Будет продемонстрирована загрузка данных о визитах пользователей из Яндекс Метрика в базу данных PostgreSQL. Для выполнения поставленной задачи потребуется создать пять команд, выполняемых последовательно.
Целью создания данной команды является получение уникального идентификатора счётчика Яндекс Метрика для сайта biqube.ru. Он потребуется в последующих командах для обращения к данным именно этого сайта. В меню фреймворка выбираем компонент «Staging», пункт «Команды», переходим к заранее созданной модели. Для создания команды в форме задаем следующие настройки:
Переходим к созданию запроса, нажав на кнопку «Создать». В поле адреса файла указываем REST-запрос к API Яндекс Метрика: https://api-metrika.yandex.net/management/v1/counters
В поле «Метод» выбираем GET и нажимаем «Соединиться». После успешного соединения с источником необходимо перейти на вкладку «Данные». Выбраем таблицу counters, содержащую нужно нам поле id. Формируем запрос и выполняем его проверку. В области предварительного просмотра можно убедиться, что в результате присутствует счетчик сайта biqube.ru. Для сохранения запроса нажимаем «Ок» и кнопку «Сохранить». Команда создана и появилась в списке. Для запуска загрузки переходим к пункту «Профили» раздела «Staging». Выбираем профиль, указанный при настройке команды, убеждаемся, что команда активна и нажимаем «Загрузить». По завершении выполнения в целевой таблице PostgreSQL будет сохранен уникальный идентификатор для сайта biqube.ru, который в дальнейшем будет использован при создании пользовательского параметра.
Целью данной команды является инициирование задачи выгрузки логов и получение идентификатора созданного запроса на выгрузку. Яндекс Метрика не отдаёт данные мгновенно: сначала необходимо создать задачу, дождаться её обработки, и только затем забрать результат. Идентификатор запроса позволяет в дальнейшем отслеживать статус этой задачи и получить готовые данные. Прежде чем перейти к созданию команды, добавим пользовательский параметр, который будет вычислять значение счетчика для нашего сайта. Для этого перейдем в раздел «Общее», пункт «Параметры» и заполним следующие поля:
Укажем контекст вычисления параметра — Подключение, конечную точку — базу данных PostgreSQL. Вставим заранее подготовленный запрос, проверим и выполним его. Данные успешно получены.
Вернемся к компоненту «Staging», пункт «Команды», переходим к нашей модели. Для создания команды в форме задаём следующие настройки:
Для создания запроса нажать «Создать». В поле адреса указать REST-запрос с пользовательским параметром для счетчика, подставленным непосредственно в адрес, а также необходимыми фильтрами по дате выгрузки, перечню полей и типу данных:
В поле «Метод» выбрать POST, так как требуется передать параметры выгрузки. Нажать «Соединить». Перейти на вкладку «Данные», выбрать в ответе таблицу log_request, в которой должно присутствовать поле request_id. Сформировать запрос, выполнить проверку, нажать «Выполнить». Оценить результат в зоне предварительного просмотра. Нажать «Ок», затем при необходимости указать размер пакета данных и нажать «Сохранить». Далее запустим созданную команду перейдя в пункт «Профили» раздела «Staging». Выбираем нужный профиль, убеждаемся, что команда активна и нажимаем кнопку «Загрузить». По завершении в целевой таблице PostgreSQL будет сохранён request_id, необходимый для последующих команд.
На данном шаге нам необходимо получить количество частей выгрузки из JSON-ответа по ранее полученному request_id. Большие объёмы данных API возвращает не одним файлом, а по частям, поэтому нам нужно знать их точное количество, чтобы в последней команде загрузить каждую часть поочерёдно. Добавляем пользовательский параметр request_id, аналогично тому как это делалось на предыдущем шаге.
Создаем новую команду и указываем настройки:
В форме запроса указываем URL:
https://api-metrika.yandex.net/management/v1/counter//*{counter_id}*//logrequest//*{request_id}*/
Параметры counter_id и request_id подставляются из результатов предыдущих команд, посредством использования пользовательских параметров. Из JSON-ответа извлекаем таблицу parts с полем part_count (количество частей, на которые разбита выгрузка). Для сохранения нажимаем «Ок», затем кнопку «Сохранить». Переходим в пункт «Профили» раздела «Staging», выбираем нужный профиль, убеждаемся, что команда активна, и нажимаем «Загрузить».
Целью данной команды является отслеживание статуса задачи выгрузки. После создания запроса Яндекс Метрика некоторое время готовит данные. Команда повторно опрашивает API до тех пор, пока статус не сменится на processed — то есть данные готовы и можно приступать к их загрузке. Создаём новую команду и указываем настройки:
Для создания запроса нажимаем «Создать». Указываем адрес:
https://api-metrika.yandex.net/management/v1/counter//*{counter_id}*//logrequest//*{request_id}*/
В поле «Метод» выбираем GET и нажимаем «Соединиться». Переходим на вкладку «Данные», выбираем таблицу log_request, в которой содержится поле status. Формируем запрос, выполняем проверку и нажимаем кнопку «Выполнить». В зоне предварительного просмотра можно оценить полученные данные. Нажимаем «Ок», затем кнопку «Сохранить». Команда настраивается на повторное выполнение до тех пор, пока значение поля status не примет значение processed. Это обеспечивает корректную синхронизацию: следующая команда запускается только после полной готовности выгрузки на стороне Яндекс Метрика.
Переходим в пункт «Профили» раздела «Staging», выбираем нужный профиль, убеждаемся, что команда активна, и нажимаем «Загрузить». По завершении статус задачи примет значение processed, что означает готовность данных к загрузке.
Целью финальной команды является непосредственная загрузка данных о визитах пользователей в PostgreSQL. Команда последовательно скачивает каждую часть выгрузки в формате TSV и помещает данные в целевую таблицу, предварительно очистив её для полного обновления. Добавляем пользовательский параметр part_number аналогично тому, как это делалось на предыдущих шагах. Создаём новую команду и указываем настройки:
Так как предполагается полная загрузка данных, выбираем опцию «Очистить перед выполнением». Этот режим обеспечит полное обновление данных в целевой таблице при каждом запуске команды. Опция «Делать бэкап» позволяет перед выполнением создать резервную копию таблицы назначения. Для создания запроса нажимаем «Создать». Добавляем адрес:
Параметры counter_id, request_id и part_number подставляются из результатов предыдущих команд посредством пользовательских параметров.
В области с настройками запроса перейдем на вкладку «Файл». Укажем разделитель, для файла в формате TSV это табуляция «\t», и установим флажок «Есть заголовок». В поле «Метод» выбираем GET, нажимаем «Соединиться» и формируем запрос. Проверяем запрос и выполняем его. Оценив результат в зоне предварительного просмотра, нажимаем «Ок», при необходимости указываем размер пакета данных и нажимаем кнопку «Сохранить». Переходим в пункт «Профили» раздела «Staging», выбираем нужный профиль, убеждаемся, что команда активна, и нажимаем «Загрузить».
Все пять команд выполняются последовательно в рамках единого сценария обработки данных. Запуск может выполняться как вручную через веб-интерфейс, так и автоматически по расписанию с использованием оркестратора.
Результатом работы мультикоманды будет следующий сценарий:
На этом задача полной загрузки данных о визитах пользователей из Яндекс Метрика в PostgreSQL выполнена.