Google BigQuery — зачем нужна облачная база данных > NetPeak - Независимость и осознанность
NetPeak Biz Tech    


Google BigQuery — зачем нужна облачная база данных

Google BigQuery — зачем нужна облачная база данных

< >

Ранее я публиковал цикл материалов о работе с Google BigQuery. В этой статье расскажу о преимуществах и особенностях сервиса, а также о дополнительных инструментах для BigQuery.

Google BigQuery — это облачная база данных с высочайшей скоростью обработки огромных массивов данных.

Как начать работу в Google BigQuery

Войдите в Google Cloud Platform. При первом запуске система предложит активировать бесплатный пробный период и получить кредит $300 на 12 месяцев. Честно говоря, чтобы потратить за год в BigQuery эту сумму, вам придется очень сильно постараться.

Для дальнейшей работы введите платежные данные.

Нажмите «Выбрать проект».

Затем — «Создать проект».

Примите условия использования платформы.

Наконец, назовите проект, задайте настройки уведомлений и еще раз согласитесь с условиями использования платформы.

После подтверждения подождите несколько минут.

Вскоре вы получите оповещение, что проект создан.

Перейдите в раздел оплаты и привяжите платежный аккаунт.

Теперь проект привязан к только что созданному платежному аккаунту.

Перейдите в интерфейс Google BigQuery и напишите свой первый запрос.

Чтобы открыть редактор запросов, нажмите «Compose query» или сочетание клавиш «Ctrl + Space».

Рассмотрим, как написать первый запрос на примере публичных данных в BigQuery. Возьмите первые 15 строк из таблицы project_tycho_reports, которая находится в наборе публичных данных lookerdata.

SELECT *FROM [lookerdata:cdc.project_tycho_reports]LIMIT 25

Запрос вернет результат:

Как начать работу с BigData — загружаем данные в Google BigQuery Ранее я описывал самые простые способы загрузки собственных данных в Google BigQuery, а в этой статье расскажу, как загрузить данные с помощью языка R. Но перед этим разберем важный вопрос.

Истории бизнеса и полезные фишки

Почему стоит выбрать именно Google BigQuery

Скорость — это основное преимущество BigQuery, но не единственное. BigQuery — облачный сервис. При его использовании не понадобится арендовать сервер и оплачивать поддержку.

Стоимость BigQuery значительно ниже стоимости аренды самого примитивного сервера: даже если вы очень постараетесь и будете ежедневно записывать в эту базу данных миллионы строк, все равно вряд ли сможете потратить более $5.

Следующее преимущество — простота использования. В любой другой системе управления базами данных (СУБД) помимо знания SQL придется долго разбираться с тонкостями администрирования и настройками базы.

И если сам по себе SQL-диалект во всех базах данных очень похожий, то административная часть, как правило, везде устроена по-разному.

У BigQuery всю административную часть на себя взял Google. В этом сервисе нет никаких настроек, индексов, движков таблиц, тайм-аутов или внешних ключей. Реализована поддержка только одной кодировки UTF-8.

Для работы с BigQuery достаточно знать, как загрузить данные в BigQuery, и иметь базовые знания в SQL.

Несмотря на простоту, в BigQuery реализована поддержка пpaктически всех функций СУБД:

Правда, на момент публикации статьи сервис не поддерживает:

  • рекурсивные запросы;
  • создание хранимых процедур и функций;
  • транзакции.

Особенности SQL для Google BigQuery

BigQuery умеет переключаться между стандартным SQL и диалектами.

DML-операции INSERT, UPDATE и DELETE на данный момент поддерживаются только при использовании стандартного SQL.

Еще одно отличие между этими диалектами — способ вертикального объединения таблиц. В стандартном SQL для этого служит оператор UNION и ключевое слов ALL или DISTINCT:

SELECT 12 AS A, 32 AS BUNION ALLSELECT 2 AS A, 29 AS B

В собственном SQL-диалекте функционал для вертикального объединения таблиц значительно шире. Существует специальный набор функций подстановки таблиц (Table Wildcard Functions).

Как обpaбатывать данные из множества таблиц в Google BigQuery Этот способ объединения таблиц я уже подробно описывал ранее.

Для простого объединения достаточно просто перечислить названия нужных таблиц или подзапросы через запятую. Объединение запросов из примера выше на внутреннем диалекте SQL в BigQuery будет выглядеть так:

SELECT *FROM (SELECT 12 AS A, 32 AS B), (SELECT 2 AS A, 29 AS B)

Переключатель между SQL-диалектами в BigQuery находится в интерфейсе в блоке опций: нажмите кнопку Show options под редактором запросов.

С помощью галочки «SQL Dialect» переключитесь на нужный диалект.

Инструменты для работы с BigQuery

Мы уже разобрались, как загружать данные в базу и как обращаться к данным SQL запросами. Но вряд ли вы хотите взаимодействовать с данными, ограничившись этими возможностями. Скорее всего, вы загружаете данные для построения дашбордов или чего-то подобного.

Как связать Microsoft Power BI и Google BigQuery Интеграция Google BigQuery c BI-платформами и электронными таблицами Как получить данные в различных BI платформах, я писал в статьях об интеграции с электронными таблицами и Microsoft Power BI.

Microsoft Power BI, как и большинство популярных  BI-систем и электронных таблиц, с июля 2017 года поддерживает интеграцию с Google BigQuery из коробки. У коннектора довольно скудные возможности: он не умеет обращаться к сохраненным представлениям или отправлять в BigQuery запросы. Пока что с помощью встроенного коннектора можно вытягивать только плоские таблицы.

Simba Drivers

Если вам необходимо получить данные из Google BigQuery в электронной таблице или BI-системе, которая из коробки не поддерживает интеграцию, воспользуйтесь бесплатным Simba Drivers.

Этот драйвер поддерживает все необходимые возможности, включая переключения SQL-диалектов. Подробности настройки ищите в моей статье о связке Microsoft Power BI и Google BigQuery.

Язык R

Язык R — один из самых мощных инструментов для работы с данными. Он умеет как получать данные из Google BigQuery, так и записывать их. Для этого удобнее всего пакет bigrquery.

Для начала установите язык R. Также для удобства работы с R я рекомендую установить интегрированную среду разработки RStudio.

Запустите RStudio и с помощью сочетания клавиш «Ctrl+Alt+Shift+0» откройте все доступные в ней панели. Чаще всего понадобятся панели Source и Console.

Для установки develop-версии пакета bigrquery из репозитория на GitHub предварительно установите пакет devtools. Введите в окно Source код, затем выделите его (зажмите левой кнопки мыши) и нажмите «Ctrl+Enter» для выполнения комaнды:

install.packages(\"devtools\")

Теперь установите пакет bigrquery:

devtools::install_github(\"rstats-db/bigrquery\")

Чтобы в R были доступны функции пакета, после установки подключите их с помощью комaнды library или require. Например, подключим пакет bigrquery с помощью кода:

library(bigrquery)

Структура данных в Google BigQuery состоит из проекта с набором данных, содержащим таблицы. Проект вы уже создали, а теперь для передачи информации создайте набор данных. Выберите в интерфейсе из выпадающего меню «Create new dataset».

Чтобы создать набор данных с помощью языка R, воспользуйтесь комaндой insert_dataset. Комaнда требует всего 2 аргумента:

project — ID проекта (возьмите из URL в BigQuery).

dataset — название нового набора данных.

Давайте создадим первый набор данных с названием myFirstDataSet. Введите в область Source приведенный ниже код, выделите комaнду с помощью мыши и нажмите «Ctrl+Enter» для выполнения.

insert_dataset(project = \"myfirstproject-185308\", dataset = \"myFirstDataSet\")

В окне Console в RStudio появится запрос о создании учетных данных, чтобы в дальнейшем не требовалась повторная аутентификация.

Введите на запрос Selection в Console ответ Yes и нажмите Enter. Откроется браузер — разрешите доступ к данным и получите авторизационный код.

Скопируйте сгенерированный код. Затем вставьте его в Console RStudio в ответ на запрос авторизационного кода и нажмите Enter.

Отлично, вы создали набор данных.

Теперь запишите встроенную в R таблицу mtcars в набор данных myFirstDataSet. Для передачи данных из R в BigQuery в пакете bigrquery есть функция insert_upload_job. Она принимает такие аргументы:

project — ID проекта (смотрите либо в URL проекта, либо в режиме переключения проектов).

dataset — название набора данных, куда вы планируете отправить данные. В нашем случае myFirstDataSet.

table — название таблицы с записанными данными.

values — data frame (таблица данных) в R с данными для передачи в BigQuery.

billing = project аккаунта для оплаты операции. По умолчанию — платежный аккаунт, который привязан к проекту.

create_disposition — опция для определения необходимых действий.
Если в BigQuery нет таблицы с заданным в аргументе table названием, укажите \"CREATE_IF_NEEDED\" — система создаст новую таблицу.
Если указать \"CREATE_NEVER\" и таблица с заданным именем не найдется в наборе данных, будет возвращена соответствующая ошибка.

write_disposition — опция для выбора добавления данных в существующую таблицу.
\"WRITE_APPEND\" — дописать данные в таблицу.
\"WRITE_TRUNCATE\" — перезаписать данные в таблице.
\"WRITE_EMPTY\" — записать данные для пустой таблицы.

Код для передачи в BigQuery встроенной в R таблицы mtcars:

insert_upload_job(project = \"myfirstproject-185308\", dataset = \"myFirstDataSet\", table = \"mtcars_bigquery\", values = mtcars, create_disposition = \"CREATE_IF_NEEDED\", write_disposition = \"WRITE_APPEND\")

При успешном выполнении операции в консоли R появится дополнительная информация, а в интерфейсе BigQuery — созданная таблица mtcars_bigquery.

Для запроса данных из BigQuery в R в пакете bigrquery предназначена функция query_exec. Основные аргументы:

query — текст SQL-запроса, результат которого вы хотите загрузить в R.

project — ID проекта для запроса данных.

page_size — максимальный размер возвращаемого результата в строках (по умолчанию 10 000).

max_pages — максимальное количество страниц возврата запросом (по умолчанию 10).

use_legacy_sql — выбор SQL-диалекта для обработки запроса.
По умолчанию задано значение TRUE с внутренним диалектом BigQuery.
Для стандартного диалекта SQL задайте в этом аргументе значение FALSE.

Для обратного запроса данных, которые вы отправили в BigQuery на прошлом шаге, задайте комaнду:

bq_mtcars_table <- query_exec(query = \"SELECT * FROM myFirstDataSet.mtcars_bigquery\", project = \"myfirstproject-185308\", use_legacy_sql = TRUE)

В рабочем окружении (описание которого вы видите в окне Environment) появится новый объект bq_mtcars_table.

Выводы

Google BigQuery — простой и в то же время мощнейший инструмент для хранения и обработки данных. Это облачная база данных с поддержкой большинства функций СУБД.

Сервис обходится значительно дешевле содержания, поддержки и администрирования сервера для бесплатных баз данных (MySQL или PostgreSQL).

Надеюсь, мой цикл инструкций для начала работы с Google BigQuery упростит ваши будни.

Успехов в работе с большими данными!



Комментарии:

120 пунктов продающей мобильной версии сайта — чек-лист

120 пунктов продающей мобильной версии сайта — чек-лист Пора сделать так, чтобы мобильная версия сайта приносила прибыль....

28 11 2022 4:36:21

Визуализация данных с помощью DataDeck

Визуализация данных с помощью DataDeck Краш-тест сервиса визуализации данных: выбираем задачу, источники, создаём отчет с помощью DataDeck. Бонус в конце — лаконичные списки преимуществ и недостатков этого инструмента и приятный подарок для дочитавших...

27 11 2022 1:32:22

Как покорить Бразилию — советы Depositphotos

Как покорить Бразилию — советы Depositphotos Идем в Бразилию: опыт Depositphotos + полезные факты....

26 11 2022 6:26:49

Контекст-стратегия: купил и полетел

Чтобы привлечь представителей малого и среднего бизнеса, мы разработали стратегии по контекстной рекламе. Это открывает двери агентства Netpeak проектам с самым скромным бюджетом...

25 11 2022 9:42:59

Как мы сделали аналитический инструмент для блога Netpeak

Как узнать, хорошую ли статью вы опубликовали в блоге...

24 11 2022 17:14:27

Как делать вирусный контент без лишнего текста — правила жизни Coub

Как делать вирусный контент без лишнего текста — правила жизни Coub Пользователи могут смотреть вирусные ролики без единого слова...

23 11 2022 0:52:41

Один из самых популярных мессенджеров в мире: продвигаемся в Telegram

Один из самых популярных мессенджеров в мире: продвигаемся в Telegram Правила, законы, платное и бесплатное продвижение в Telegram...

22 11 2022 4:21:21

Десять часто задаваемых вопросов о лендингах

Десять часто задаваемых вопросов о лендингах Десять вопросов, которые чаще всего задают люди, столкнувшиеся с необходимостью создания landing page....

21 11 2022 13:43:11

Как улучшить UX/UI сайта — семь советов по юзабилити

Как улучшить UX/UI сайта — семь советов по юзабилити Эти советы будут полезны вебмастерам, которые хотят сделать шаблон сайта самостоятельно...

20 11 2022 0:28:10

SEO-продвижение сайта eda.ua — рост органического трафика на 331,5% за шесть месяцев

SEO-продвижение сайта eda.ua — рост органического трафика на 331,5% за шесть месяцев SEO-продвижение онлайн-сервиса доставки еды с новым сайтом. Цели продвижения, составление семантического ядра, формирование URL, поддомены, карточки товаров, тексты, внешняя оптимизация, дополнительные работы, а также полученные результаты...

19 11 2022 5:41:35

Как создать отчет по категориям и брендам в Google Data Studio, если они не передаются в Google ***ytics

Как создать отчет по категориям и брендам в Google Data Studio, если они не передаются в Google ***ytics Как настроить передачу категории и бренда товара в Google Data Studio....

18 11 2022 6:44:24

Как модель маркетплейса увеличивает SEO-трафик?

Как модель маркетплейса увеличивает SEO-трафик? Каким образом бизнес-модель маркетплейса может помочь увеличить трафик интернет-магазина в целом....

17 11 2022 7:23:24

myTarget: 10 фишек для продвижения мобильных приложений

myTarget: 10 фишек для продвижения мобильных приложений Look-alike аудитории, таргетинг на участников групп, ограничение стоимости установки и другие вкусные фишки myTarget...

16 11 2022 21:13:40

Гайд по форматам видеокампаний YouTube

Гайд по форматам видеокампаний YouTube Рекламные кампании для брендинга, роста вовлечения пользователей, продаж, лояльности. Какой формат выбрать, чтобы получить необходимое целевое действие. Узнать!...

15 11 2022 14:22:39

Контекстная реклама для строительной компании в Украине — рост конверсий в 5 раз

Контекстная реклама для строительной компании в Украине — рост конверсий в 5 раз Почему в рекламе недвижимости стоит запускать динамический ремаркетинг...

14 11 2022 16:49:59

Сколько стоил клик в Google Ads и Яндекс.Директ в Казахстане во втором квартале 2018 года

Сколько стоил клик в Google Ads и Яндекс.Директ в Казахстане во втором квартале 2018 года Данные о стоимости клика в наиболее популярных рекламных интернет-площадках страны....

13 11 2022 11:15:50

NPS: что такое Net Promoter Score и как начать его считать

NPS: что такое Net Promoter Score и как начать его считать Цель этой статьи — предупредить от опасной ошибки в маркетинге: бездумного и неправильного внедрения NPS-опросника....

12 11 2022 13:29:38

Как раскрутить телеграм-канал в 2022 — 14 актуальных способов продвижения

Как раскрутить телеграм-канал в 2022 — 14 актуальных способов продвижения Хотите говорить с клиентами? Пишите им в телеге. Для этого важно продвижение телеграм-канала. Что и как делать для раскрутки — подробная инструкция....

11 11 2022 1:32:43

Как провести интервью: инсайты и секреты Head of Content Inweb Наты Заяць

Как провести интервью: инсайты и секреты Head of Content Inweb Наты Заяць Как подготовиться и сделать из интервью полноценную историю, которая будет интересна аудитории...

10 11 2022 4:22:55

Как рекламировать товары для HoReCa и выйти на окупаемость в первый месяц работ — кейс econom-service

Как рекламировать товары для HoReCa и выйти на окупаемость в первый месяц работ — кейс econom-service Ещё один проект, который продвигался во время карантина....

09 11 2022 3:21:23

CEO fuckups. Три ошибки опытных руководителей

И как с ними справиться. Рабочие инструкции для Chief Executive Office и менеджеров в целом. Давайте управлять комaндой и собой более эффективно и без выгорания. Узнать больше!...

08 11 2022 23:18:17

Готовые SEO-решения для 9 самых популярных CMS

Готовые SEO-решения для 9 самых популярных CMS База самых распространенных CMS и модулей для их SEO-оптимизации....

07 11 2022 10:49:41

Как быстро и бесплатно импортировать в Google Таблицы статистику из Facebook

Понадобится всего пару минут, чтобы создать отчет о тратах, количестве конверсий или любых других важных показателях. Понятная инструкция для PPC-специалистов и про возможности и ограничения бесплатной версии расширения. Читайте дальше!...

06 11 2022 10:38:50

Как платить за рекламные аккаунты в Украине, России и Казахстане

Как платить за рекламные аккаунты в Украине, России и Казахстане Подробно об оплате аккаунтов и налогообложении рекламы в Украине, России, Казахстане....

05 11 2022 3:55:22

Кейс по контекстной рекламе сайта туристической компании: увеличение количества онлайн-бронирований на 100%

Кейс по контекстной рекламе сайта туристической компании: увеличение количества онлайн-бронирований на 100% Стратегия контекстной рекламы для лендинга турагенства: увеличение количества онлайн-бронирований на 100%...

04 11 2022 4:44:53

Антикейс: продвижение Endorphone.com.ua с помощью видеоблогеров

Как избежать ошибок при продвижении интернет-магазина с помощью видеоблогеров....

03 11 2022 0:30:56

Digital стратег Даша Шигаева о работе, отчетах и киборгах

Digital стратег Даша Шигаева о работе, отчетах и киборгах Работа — рекламировать. Интервью с директором по стратегии агентства Smartica/Skykillers....

02 11 2022 1:19:17

Что меняет налог на Google для бизнеса и пользователей — объясняем на примере Facebook

Что меняет налог на Google для бизнеса и пользователей — объясняем на примере Facebook Как жить с налогом на Google, Facebook и другие международные сервисы — объясняем детали....

01 11 2022 13:57:44

Как использовать фотоколлаж в маркетинге

Как использовать фотоколлаж в маркетинге Инструкция по созданию изображений для сториз, email-рассылок и объявлений в соцсетях...

31 10 2022 22:56:29

Какие форматы объявлений в Яндекс.Директ самые эффективные

Какие форматы объявлений в Яндекс.Директ самые эффективные Стандартный образец для новичков. Форматы объявлений в РСЯ, чтобы начинающие специалисты по контекстной рекламе смогли быстро и эффективно запустить рекламные кампании. Интересно? Читайте дальше!...

30 10 2022 16:57:55

Семь улучшений Netpeak: создаем бизнес-страницу в Instagram, на Facebook, делаем email-маркетинг и публикуем истории бизнеса

Семь улучшений Netpeak: создаем бизнес-страницу в Instagram, на Facebook, делаем email-маркетинг и публикуем истории бизнеса Настроенная бизнес-страница компании в Instagram и на Facebook помогает в продвижении товаров и услуг в интернете. Поэтому так важно сделать их seo-friendly. Читать!...

29 10 2022 11:26:57

Как эффективно настроить рекламные кампании в Apple Search Ads — zoom-митап с Радомиром Новковичем

Как эффективно настроить рекламные кампании в Apple Search Ads — zoom-митап с Радомиром Новковичем 5 мая в 17:00 — митап в Zoom с Радомиром Новковичем — фаундером RadASO и CEO Tonti Laguna Mobile....

28 10 2022 5:30:41

Universal App Campaign 2.0 в Google Рекламе — как выжать максимум пользы

Universal App Campaign 2.0 в Google Рекламе — как выжать максимум пользы Как сделать рекламу в Universal App Campaign 2.0 максимально эффективной...

27 10 2022 9:54:35

Комикс о проверке гипотез и человеческом факторе

Комикс о проверке гипотез и человеческом факторе Отрывок из книги «Статистика: базовый курс в комиксах» Грейди Клейн и Алана Дебни...

26 10 2022 14:29:13

Как увеличить количество звонков с сайта: кейс Callback от Ringostat

Как увеличить количество звонков с сайта: кейс Callback от Ringostat Callback от Ringostat: пример того, как увеличить конверсии с помощью формы заказа обратного звонка...

25 10 2022 15:26:18

Аукцион рекламы в Facebook: всё, о чем вы стеснялись спросить

Аукцион рекламы в Facebook: всё, о чем вы стеснялись спросить Рекламные аукционы Фейсбук заточены поднимать объявление с наивысшей итоговой ценностью — это главное отличие от классических аукционов...

24 10 2022 7:21:50

Контекстная реклама для продажи квартир в Киеве — как увеличить количество конверсий на 75%

Контекстная реклама для продажи квартир в Киеве — как увеличить количество конверсий на 75% Исправляем ошибки в рекламных кампаниях, аналитике и бюджете...

23 10 2022 8:11:39

Анализ пути в Google ***ytics 4: как ускорить процесс покупки на сайте

Анализ пути в Google ***ytics 4: как ускорить процесс покупки на сайте Анализ пути — это как многокaнaльные последовательности в Universal ***ytics, только лучше....

22 10 2022 4:46:32

Скорость загрузки сайта - как проверить и отслеживать метрики скорости загрузки и Web Vitals

Скорость загрузки сайта - как проверить и отслеживать метрики скорости загрузки и Web Vitals Всё о метриках загрузки сайта. Как проверить и отслеживать реальную скорость загрузки сайта и почему нельзя доверять показателям Pagespeed Insights....

21 10 2022 20:35:33

10 творческих задач на собеседовании Wieden+Kennedy в интернете

10 творческих задач на собеседовании Wieden+Kennedy в интернете 10 заданий, которые заставят пошевелить мозгами и придумать нестандартные решения. Используйте их (видоизмените, адаптируйте) под свой продукт или услугу. Создайте крутую кампанию, креатив или предложите это своей комaнде....

20 10 2022 20:45:59

Скелеты в шкафу РСЯ: как эффективно построить рекламную кампанию?

Как создавать результативные кампании в Рекламной сети Яндекса...

19 10 2022 14:21:41

Чем отличается адвокат бренда от посла бренда?

Чем отличается адвокат бренда от посла бренда? Что такое посол бренда и чем он отличается от адвоката бренда?...

18 10 2022 5:13:44

Путь от обычного сайта до интернет-магазина — история Сергея Бабенышева и бизнеса Tricolor

Путь от обычного сайта до интернет-магазина — история Сергея Бабенышева и бизнеса Tricolor C какими сложностями пришлось столкнуться при создании интернет-магазина....

17 10 2022 0:39:37

Яндекс.Аудитории: полное руководство по созданию и использованию сегментов

Яндекс.Аудитории: полное руководство по созданию и использованию сегментов Четкий мануал для настройки Яндекс.Аудиторий от создания сегмента, работы с геолокацией, пикселем аудитории, похожими аудиториями, ретаргетингом и до корректировки ставок...

16 10 2022 19:49:43

Безопасность PBN — как защитить сайты и серверы от взлома

Безопасность PBN — как защитить сайты и серверы от взлома В помощь вебмастерам, которые поддерживают работу PBN....

15 10 2022 18:53:26

Главред блога Netpeak про управление задачами и собой

Главред блога Netpeak про управление задачами и собой Неля Серебро рассказывает про внутреннюю кухню блога Netpeak...

14 10 2022 5:57:30

PPC-атавизмы — пять подходов, которые утратили актуальность

PPC-атавизмы — пять подходов, которые утратили актуальность Отличная работа SEO-специалистов прошлого, породила касту PPC-специалистов настоящего, которые все еще ориентируются на публикации из 2017, ведь они все еще в ТОПе выдачи....

13 10 2022 9:24:22

Интернет-торговля в Украине: 15 слайдов о ecommerce

Интернет-торговля в Украине: 15 слайдов о ecommerce Тема поста — исследование электронной коммерции в Украине: рынки, статистика, объем продаж, поисковый потенциал....

12 10 2022 3:52:40

AMP Google: что нужно знать об ускоренных мобильных страницах

Обновление от Google, запущенный в октябре 2015 года. Это просто веб-страницы, но в их основе находится AMP HTML, формат для максимального ускорения загрузки на телефонах...

11 10 2022 0:42:32

Как сделать интеграцию Google Tag Manager с Яндекс.Метрикой

Как сделать интеграцию Google Tag Manager с Яндекс.Метрикой Подружим GTM и Метрику с минимальным вовлечением программиста....

10 10 2022 10:43:19

Еще:
понять и запомнить -1 :: понять и запомнить -2 :: понять и запомнить -3 :: понять и запомнить -4 :: понять и запомнить -5 :: понять и запомнить -6 :: понять и запомнить -7 ::