Сырые данные из Яндекс Метрики за 9 минут через ClickHouse

Читатель наверняка слышал разное про ClickHouse и Logs API для Яндекс.Метрики, возможно, открывал статейки и в большинстве случаев закрывал обратно. По крайней мере я так делал 😆. Но сегодня будет всё проще, ведь, для того чтобы познакомиться с этими возможностями Яндекс Метрики, копаться в *nix системах необязательно. Я воспользуюсь функциями винды, а если у читателя уже стоит что-то иное, то пусть смело пропускает первый пункт. Приведенный способ я успешно выполнил на двух ПК, поэтому надеюсь, что ни у кого особых проблем не возникнет, а если возникнут, то вам скорее всего придется решать их самостоятельно. Впрочем, времени мало, поэтому погнали.

Подсистема Windows для Linux

В горячо любимой 😆 многими Windows 10 (64-битная версия) уже больше года доступна подсистема для Linux. Чтобы её включить жмем Win + S и по слову компонент находим Включение или отключение компонентов Windows. В списке требуется поставить галочку напротив Подсистема Windows для Linux и перезагрузиться.

Если этого пункта там не нашлось, то либо у вас слишком старая сборка, либо винда не 64-битная, либо нужно дополнительно включить режим разработчика по пути Пуск - Параметры - Обновление и безопасность - Для разработчиков - Режим разработчика, дождаться установки пакетов и перезагрузиться.

Установка ClickHouse

На всякий случай, вот подробная инструкция от Яндекса.

Через Win + R запускаем bash и последовательно выполняем следующие команды:

1
2
3
4
5
6
7
8
9
# репозиторий яндекса
sudo sh -c "echo deb http://repo.yandex.ru/clickhouse/deb/stable/main/ >> /etc/apt/sources.list"
# установка clickhouse
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
sudo apt-get update
sudo apt-get install clickhouse-client clickhouse-server

# запуск сервера clickhouse
sudo TZ=Europe/Moscow clickhouse-server --config-file=/etc/clickhouse-server/config.xml

Последнее заклинание запускает сервер ClickHouse, который будем обслуживать все наши запросы на чтение и запись. У меня он ругался на таймзону, поэтому добавил её в команду запуска.

Загрузка данных из Logs API

Для этой процедуры команда Яндекс Метрики выложила скрипт на питоне.

Запускаем новое окошко с bash и скачиваем:

1
2
# репозиторий яндекса с примером
sudo git clone https://github.com/yndx-metrika/logs_api_integration.git /usr/yam

Если не стоит Git, то можно пройти по ссылке на GitHub, скачать в виде zip-архива и запихнуть через проводник по адресу %localappdata%\lxss\rootfs\usr в новую папку yam, например, как у меня.

Для того, чтобы получить доступ к Logs API потребуется зарегистрировать скрипт по ссылке oauth.yandex.ru/client/new, заполнив минимум 3 поля:

  • Название

  • в разделе платформы выбираем Веб-сервисы и указываем Сallback URL https://oauth.yandex.ru/verification_code

  • в разделе доступов ищем Яндекс.Метрику и выбираем Получение статистики..

Внизу Создать приложение, после чего со следующего экрана сохраните его id.

Теперь необходимо дать доступ этому приложению к нашим счетчикам. Для этого пройдите по ссылке ниже, подставив id свежесозданного приложения и подтвердите с того аккаунта, на котором есть доступ к нужному счетчику.

https://oauth.yandex.ru/authorize?response_type=token&client_id=<id приложения>

Далее открываем конфиг скрипта в проводнике по уже привычному адресу %localappdata%\lxss\rootfs\usr\yam\configs и в файле config.json вносим полученный токен, а также указываем номер счетчика, с которого нужны данные, выдыхаем.

Если у вас по-прежнему запущен сервер ClickHouse в одном окошке, то во втором пришло время скачать данные:

1
2
3
4
5
# установка библиотеки requests
sudo apt-get install python-requests
cd /usr/yam/
# загрузка данных в соответствии с confix.json
python metrica_logs_api.py -mode history -source visits

Работа с данными

Отличные ребята сделали сервис Tabix, который поможет теперь читателю эти данные обработать, если тот пройдет по ссылке и укажет три вещи:

Ну и вот вам тестовый запрос:

1
2
3
Select *
from default.visits_all
limit 10

Ссылки

comments powered by Disqus