Импорт данных Яндекс Директа из Yandex Object Storage, их обработка и экспорт в ClickHouse

23 января, 2026

Подробный гайд по получению данных из Яндекс Директа и их загрузке в ClickHouse, который показывает процесс выгрузки данных с использованием API, сохранения их в CSV-файлах, загрузки в Object Storage, последующей обработки и преобразования в формат Parquet с дальнейшей загрузкой в ClickHouse.

Материал основан на официальном руководстве Yandex Cloud под названием «Импорт данных из Yandex Object Storage, обработка и экспорт в Yandex Managed Service for ClickHouse®». Оно, в свою очередь, основано на сценарии компании Data Stories по построению аналитического стека на базе сервисов Yandex Cloud. В качестве примера используются две CSV-таблицы, которые нужно объединить в одну, импортировать в формат Parquet и передать в Managed Service for ClickHouse.

Описанное ниже решение стоит денег. Стоимость поддержки включает в себя:

  • плата за кластер Managed Service for ClickHouse®: использование вычислительных ресурсов, выделенных хостам (в том числе хостам ZooKeeper), и дискового пространства (см. тарифы Managed Service for ClickHouse®);
  • плата за кластер Yandex Data Processing: использование вычислительных ресурсов ВМ и сетевых дисков Compute Cloud, а также сервиса Cloud Logging для работы с логами (см. тарифы Yandex Data Processing);
  • плата за использование публичных IP-адресов для хостов кластера (см. тарифы Virtual Private Cloud);
  • плата за бакеты Object Storage: хранение данных и выполнение операций с ними (см. тарифы Object Storage);
  • плата за NAT-шлюз (см. тарифы Virtual Private Cloud).

Пожалуйста, учитывайте эти расходы до этапа настройки.

Примечание: у меня есть подробный онлайн-курс (с видео), пройдя который вы научитесь выгружать данные из Яндекс Директа с помощью Python, чтобы не зависеть от других сервисов, переносить их в собственную базу данных (ClickHouse, MySQL, PostgreSQL), а также в Google Таблицы без помощи разработчиков и строить любые автоматические отчеты в инструментах визуализации данных Yandex DataLens для своих клиентов. Да, маркетолог тоже может писать код!

Давайте рассмотрим каждый шаг из официального руководства Yandex Cloud более подробно.

Регистрация приложения

Для регистрации приложения вам понадобится учетная запись Яндекса (Яндекс ID). Для этого перейдите по адресу https://passport.yandex.ru/auth/reg и пройдите несложную процедуру регистрации.

Вам понадобится номер мобильного телефона, куда будут приходить СМС с кодами для входа в аккаунт. Если у вас уже есть аккаунт в Яндексе, вы можете использовать его, а не создавать новый.

Создание аккаунта

После создания аккаунта перейдите по адресу https://oauth.yandex.ru/client/new. В открывшемся окне на вопрос Какое приложение хотите создать? выберите Для доступа к API или отладки:

Для доступа к API или отладки

Нажмите Перейти к созданию.

В Название сервиса введите название приложения, которое будет использоваться. Вы можете задать произвольное имя. Например, YandexDirect:

Название приложения

Затем укажите почту компании или свою. Яндекс будет оповещать вас об изменениях во внешней авторизации:

Почта для связи

В разделе Доступ к данным отметьте значение Использование API Яндекс Директа (direct:api), введя его в поле ниже:

Использование API Яндекс Директа (direct:api)

В дальнейшем вы можете изменить параметры приложения.

В самом конце после выбора соответствующего доступа к данным в Redirect URI для веб-сервисов будет автоматически подставлена строка:

Изменить ее нельзя. В завершение нажмите кнопку Создать приложение.

Создание приложения

В последнее время Яндекс дополнительно просит пройти верификацию с помощью вашего аккаунта на Госуслугах для того, чтобы:

  • на приложениях не было подписи, что сервис не верифицирован;
  • иметь возможность подключить оплату с Яндекс Пэй;
  • можно было создать больше приложений.

Верификация с помощью Госуслуг

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

Верификация с помощью Госуслуг

В результате регистрации Яндекс ID сгенерирует и отобразит на странице идентификатор и пароль приложения. Идентификатор приложения необходимо указать при создании заявки на доступ к API. Идентификатор и пароль приложения необходимы для получения авторизационного токена, разрешающего приложению доступ к данным конкретного пользователя.

Данные вашего приложения

Список зарегистрированных вами приложений доступен на странице https://oauth.yandex.ru/. Вы можете узнать идентификатор и пароль приложения, изменить параметры приложения, а также удалить приложение.

Список ваших приложений

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

Получение OAuth-токена

Когда вы будете выгружать данные из Яндекс Директа, в каждом запросе к API необходимо указывать авторизационный токен (он же OAuth-токен). В токене зашифрована информация как о приложении, так и о пользователе. Токен используется для того, чтобы определить:

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

Таким образом, при работе с Директом через API нет необходимости передавать пароль от аккаунта пользователя. Достаточно передать OAuth-токен, что делает процесс работы с API Директа более безопасным. Но важно понимать, что для каждого пользователя в приложении требуется получить отдельный токен.

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

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

Перед тем, как вы авторизуетесь под аккаунтом, на котором у вас размещены рекламные кампании Яндекс Директа, зайдите под аккаунтом, на котором вы создавали ваше приложение. Перейдите на страницу https://oauth.yandex.ru/ и выберите свое приложение:

Ваше приложение

Скопируйте идентификатор вашего приложения из раздела ClientID:

Копирование ClientID

Сохраните его в обычном блокноте. Он вам понадобится чуть позже в запросах для получения OAuth-токена.

Теперь авторизуйтесь под учетной записью Яндекса, на которой у вас есть рекламный кабинет Яндекс Директа и из которого вы планируете выгружать данные. Затем перейдите по ссылке, вставив ее в адресную строку браузера:

, где вместо <идентификатор приложения> вставьте идентификатор вашего приложения, скопированного на предыдущем шаге.

Идентификатор вашего приложения

У вас должно открыться окно авторизации для аккаунта Яндекс Директа. Нажмите кнопку Войти как… и тогда ваше приложение получит доступ к использованию API Яндекс Директа.

Войти как...

На следующей странице отобразится ваш Oauth-токен. Он будет также добавлен в адресную строку. Некоторые браузеры могут обрезать часть ссылки, поэтому если вы не видите токен в URL, скопируйте его со страницы.

Токен доступа

Сохраните его, никому не показывайте и не передавайте. С его помощью можно получить доступ к данным пользователя в Директе. Сервис Яндекс OAuth не хранит выдаваемые токены в публичном доступе. Вы не сможете найти их в личном кабинете. Если вы не сохранили токен, вы можете получить его вручную еще раз. Примерный срок жизни токена ~ 1 год.

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

Создание заявки на доступ к API

Официальная документация

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

Примечание: заявка создается в том рекламном аккаунте Яндекс Директа, в котором было создано приложение. Для этого решения можно использовать и песочницу, но я рекомендую получать заявку сразу на полный доступ к API.

Для этого в Яндекс Директе откройте раздел Инструменты и выберите API:

Инструменты - API

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

Чтобы получить доступ к странице настроек API, необходимо создать хотя бы одну рекламную кампанию в веб-интерфейсе Директа.

Нажмите на ссылку Получить доступ к API:

Получить доступ к API

Примите пользовательское соглашение об использовании API Сервиса “Яндекс Директ”, установив переключатель рядом с Я согласен и нажав на кнопку Принять соглашение:

Принять соглашение

В открывшемся окне перейдите в меню Мои заявки:

Мои заявки

Создайте новую заявку на полный доступ:

Новая заявка - Полный доступ

Заполните заявку на получение полного доступа к Яндекс Директу:

Заявка на получение полного доступа к Яндекс Директу

Все поля, отмеченные звездочками *, обязательны к заполнению:

  • заявка для приложения, которое вы создали на предыдущеми шаге (введите application_id или выберите его из списка, если у вас несколько приложений в аккаунте);

application_id

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

Укажите один или несколько контактов, по которым с вами быстро сможет связаться служба поддержки

  • в специфике работы вы можете выбрать Разработчик программного обеспечения и ваш основной бизнес не связан с работой с клиентами-рекламодателями;

Выберите утверждение, которое лучше всего описывает специфику вашей работы

  • в технических данных о приложении в поле языка программирования напишите Python, а в протоколе поставьте галочку рядом с JSON;

Язык программирования - Python, Протокол - JSON

API Директа поддерживает два формата:

1. JSON (англ. JavaScript Object Notation) – текстовый формат обмена данными;
2. SOAP (англ. Simple Object Access Protocol) – протокол обмена структурированными сообщениями в формате XML.

  • поскольку вы впервые создаете приложение, которое нигде ранее не использовалось, в пункте Для примера успешной работы приложения, укажите один или несколько логинов в Директе, для которых оно используется можете написать Приложение новое, пока нигде не использовалось

Приложение новое, пока нигде не использовалось

  • ваше приложение будет предназначено для выгрузки данных для анализа рекламных кампаний, поэтому в предназначении программы вы можете указать именно это;

Для чего предназначено приложение

  • в основных функциях приложения выберите Получение статистики и отчетов:

Получение статистики и отчетов

  • в возможностях вашего приложения добавьте такой текст – Автоматически выгружает данные по рекламным кампаниям на компьютер пользователя для использования их в анализе и при создании графических отчетов Yandex DataLens:

Какие новые возможности работы с Директом дает ваше приложение пользователям

  • в описании схемы взаимодействия вашего приложения с Директом опишите основной функционал приложения.

Опишите схему взаимодействия вашего приложения с Директом

Лучше использовать свой уникальный текст, поскольку Яндекс тщательно проверяет все заявки. В моей практике было такое, что при вводе одного и того же текста заявка модерация отклонялась. Поэтому напишите своими словами о том, как ваше приложение будет взаимодействовать с Директом. Можете приложить ссылку на официальное решение от Yandex Cloud.

  • спецификации и скриншоты интерфейса тоже обязательны для успешного прохождения модерации. Просто загрузите несколько скриншотов кода вашей программы, чтобы у сотрудников Яндекса не возникло лишних вопросов к заявке:

Скриншоты программы

Демо-доступ к программе можно не предоставлять. В завершение согласитесь с правилами разработки Приложений для взаимодействий с API Сервиса "Яндекс.Директ", установив переключатель рядом с Согласен, а затем нажмите на кнопку Отправить:

Пользовательское соглашение

Заявка рассматривается до 7 рабочих дней (именно рабочих!). Среднее время рассмотрения обращения ~ 1-3 дня, при условии, что вы не попали в праздничные дни. Если вы все сделали так, как было показано в данном руководстве, то проблем с получением доступа у вас быть не должно.

Через некоторое время в разделе Инструменты – API – Мои заявки вы увидите статус заявки Одобрена и полный доступ:

Инструменты – API – Мои заявки

Создание облака в Yandex Cloud

Yandex Cloud – облачная платформа, где каждый может создавать и совершенствовать свои цифровые сервисы, используя инфраструктуру и уникальные технологии Яндекса.

В состав Yandex Cloud входят продукты, сервисы для управления данными, инструменты для разработки облачных приложений, моделей машинного обучения и собственные сервисы на основе ML.

Продукты и решения Yandex Cloud

Для того чтобы начать работу в Yandex Cloud, вам необходим аккаунт Яндекса. Это может быть аккаунт от другой почты, никак не связанный с вашим рекламном кабинетом Яндекс Директа, из которого вы выгружаете данные. Создать новый аккаунт можно по ссылке.

После создания аккаунта (или использования текущего) перейдите по адресу yandex.cloud. Нажмите на кнопку Попробовать бесплатно:

Попробовать бесплатно

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

Проделав это, нажмите кнопку Создать:

Создание облака

При регистрации в Yandex Cloud для пользователя будет создано облако – отдельное рабочее пространство, для которого этот пользователь будет назначен владельцем. В облаке будет создан каталог default и сеть default.

Интерфейс Yandex Cloud

Создание платежного аккаунта

Для новых клиентов Yandex Cloud предоставляется пробный период. Он позволяет вам получить практический опыт использования сервисов, не оплачивая потребленные ресурсы. В рамках пробного периода вашему платежному аккаунту выдается стартовый грант сроком действия 60 дней.

Грант от Yandex Cloud на тестирование

Стартовый грант может быть выдан физическому лицу или юридическому лицу, владельцем которого является то же физическое лицо, только один раз. Например, если физическое лицо уже получило грант, то его юридическому лицу грант выдан не будет. Стартовый грант начисляется при создании первого платежного аккаунта, если ранее вы:

  • Никогда не приобретали услуг Yandex Cloud.
  • Не активировали пробный период.
  • При создании платежного аккаунта привязали банковскую карту.

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

После того, как вы создали свое первое облако, добавьте платежный аккаунт, нажав на кнопку Создать аккаунт:

Создать аккаунт

Либо же перейдите в сервис Yandex Cloud Billing и создайте аккаунт через эту страницу. На вкладке Аккаунт нажмите кнопку Создать аккаунт.

В открывшемся окне:

В поле Имя аккаунта задайте имя платежного аккаунта. Имя будет отображаться в списке ваших платежных аккаунтов и поможет выбрать нужный.

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

Платежный аккаунт - Общая информация

В поле Тип аккаунта выберите Физическое лицо / Юридическое лицо или ИП и нажмите кнопку Вперед. В зависимости от того, какой тип аккаунта вы будете использовать, продолжите заполнение по нижеприведенной инструкции:

Рассмотрим способ создания типа аккаунта Физическое лицо. На странице Персональные данные укажите ваши фамилию и имя и нажмите кнопку Вперед.

Платежный аккаунт - Персональные данные

На странице Платежные данные привяжите вашу банковскую карту к создаваемому платежному аккаунту:

  • Нажмите кнопку Добавить карту.
  • Укажите данные карты: 16-значный номер, срок действия, код CVV (с обратной стороны карты).
  • Нажмите кнопку Привязать.

Ввод банковских реквизитов

Если к аккаунту пользователя уже привязаны банковские карты, вы можете выбрать одну из них, не добавляя новую.

Принимаются банковские карты Мир, Visa и MasterCard.

  • Резиденты Российской Федерации ведут расчеты в RUB и могут использовать для оплаты карты, выпущенные только российскими банками.
  • Резиденты Республики Казахстан ведут расчеты в KZT и могут использовать для оплаты карты, выпущенные только нероссийскими банками.
  • Нерезиденты Российской Федерации и Республики Казахстан ведут расчеты в USD и могут использовать для оплаты карты, выпущенные только нероссийскими банками.

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

Ваш аккаунт будет создан с платным потреблением: после использования стартового гранта с карты начнут списываться средства за используемые ресурсы сервисов Yandex Cloud.

Платежный аккаунт - Платежные данные

Закончив с добавлением банковской карты, нажмите кнопку Вперед.

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

Если это ваш первый платежный аккаунт в Yandex Cloud, вам будет доступно подключение пробного периода. Для этого обязательно поставьте галочку Включить пробный период:

Включить пробный период

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

Включение пробного периода происходит только на этапе создания первого платежного аккаунта в консоли управления Yandex Cloud.

Стартовый грант действует 60 дней. Размер и валюта гранта зависят от страны, в которой вы проживаете:

  • для резидентов Российской Федерации (РФ), а также налоговых резидентов Республики Беларусь (РБ) размер гранта составляет не менее 4 000 ₽ с учетом НДС;
  • для резидентов Республики Казахстан (РК) размер гранта составляет не менее 20 000 ₸ с учетом НДС;
  • для нерезидентов Российской Федерации и Республики Казахстан размер гранта составляет не менее 30 $, без учета налогов и сборов.

Подключая пробный период, помните, что после его завершения ваши ресурсы будут приостановлены. Для возобновления работы потребуется перейти на платную версию.

На странице Контакты укажите актуальные адрес электронной почты и телефон. Контактные данные нужны не только для связи с вами, но и для выставления счетов и финансовых документов. Если контактные данные уже заполнены, проверьте их актуальность.

Нажмите кнопку Создать.

Платежный аккаунт - Контакты

При создании платежного аккаунта вам автоматически выдается роль владельца billing.accounts.owner. Любой пользователь с ролью billing.accounts.owner может удалить эту роль у создателя платежного аккаунта и изменить владельца.

На вкладке Аккаунт интерфейса Yandex Cloud Billing в блоке Привязанные облака и сервисы отображаются все подключенные облака и сервисы, например DataSphere и др. Если аккаунт добавлен в организацию, ее идентификатор также будет показан в блоке Привязанные облака и сервисы.

Cloud Center - Аккаунт

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

После этого вас перенаправит на страницу Биллинга, на которой будут отображены ваши платежные реквизиты и уведомление об активированном пробном периоде:

Активированный пробный период

На электронную почту также придет письмо о завершении регистрации и активации пробного периода. А информация о стартовом гранте и вашем балансе будет представлена на странице биллинга. Статус вашего платежного аккаунта будет Active:

Активный платежный аккаунт

Этот грант в дальнейшем вы можете использовать для Yandex Managed Service for ClickHouse и других сервисов, входящих в данную реализацию.

Создание каталога

Каталог – это пространство, в котором создаются и группируются ресурсы Yandex Cloud.

Ресурсы Yandex Cloud – виртуальные машины, диски, сети и другие – размещаются в каталогах. При создании ресурса указывается каталог, в котором он будет создан. Каждый каталог принадлежит одному облаку. Не существует каталогов вне облака. Нельзя создать каталог внутри другого каталога. Облака принадлежат организациям.

Чтобы создать новый каталог, перейдите по ссылке console.yandex.cloud в консоль управления и напротив вашего облака нажмите на иконку с тремя точками и выберите Создать каталог:

Создание каталога

Введите имя каталога (например: firstbuild). Описание можно оставить пустым. В настройках Дополнительно оставьте активной галочку Создать сеть по умолчанию:

Настройки каталога

В завершение нажмите кнопку Создать.

Созданный каталог

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

Облачная сеть – это аналог традиционной локальной сети в дата-центре. Облачные сети создаются в каталогах и используются для передачи информации между облачными ресурсами и связи ресурсов с интернетом.

Для виртуальных машин Yandex Compute Cloud и хостов баз данных доступ из интернета и в интернет открыт через публичные IP-адреса.

Если у вас длительное время не появляется меню создания каталога, а рядом с облаком отображается иконка с часами, то значит вы не привязали облако к платежному аккаунту:

Привяжите облако к платежному аккаунту

Сделайте это, и тогда возможность создания каталога станет доступна.

Создание сервисного аккаунта

Теперь вам необходимо создать сервисный аккаунт. Перейдите в свой каталог Yandex Cloud и откройте раздел Сервисные аккаунты:

Сервисные аккаунты

Далее перейдите в Identity and Access Management:

Identity and Access Management

Нажмите кнопку Создать сервисный аккаунт.

Создание сервисного аккаунта

Введите имя сервисного аккаунта dataproc-s3-sa. Нажмите Добавить роль и назначьте сервисному аккаунту роли:

  • dataproc.agent
  • dataproc.provisioner

Имя сервисного аккаунта и роли в каталоге

Нажмите кнопку Создать.

Создание бакетов в Object Storage

Бакет (Bucket) - это выделенная часть хранилища Object Storage для пользовательских данных. Каждый бакет в Yandex Cloud имеет уникальное название, по которому выполняются запросы к Object Storage. Данные в бакетах хранятся в виде объектов. Вы можете логически структурировать данные с помощью нескольких бакетов или с помощью папок (префиксов) внутри одного бакета. Также бакеты можно использовать для хостинга статических сайтов.

Подробнее о том, как начать работу с Yandex Object Storage, читайте в официальной документации Yandex Cloud.

Для создания бакета выберите каталог (см. выше), в котором вы будете создавать бакет, а затем перейдите в сервис Object Storage.

Object Storage

Создайте свой первый бакет:

Создание бакета

Создайте бакет для исходных данных, назначив ему имя (например, bucket-initial-data). Никаких других настроек не производите. Нажмите Сохранить.

Создание бакета для исходных/входных данных (bucket-initial-data)

Предоставьте сервисному аккаунту кластера разрешение READ для этого бакета. Для этого откройте Object Storage - Бакеты и напротив созданного бакета нажмите на меню с тремя точками, выбрав пункт Настроить ACL:

Настроить ACL для бакета

В открывшемся окне добавьте свой сервисный аккаунт dataproc-s3-sa, назначив ему разрешение READ:

Сервисный аккаунт с разрешением READ

 

Сохраните изменения.

Теперь создайте еще один бакет, но только уже для результатов обработки (для выходных данных). Назначьте ему имя (например, bucket-processing-result). Никаких других настроек не производите. Нажмите Сохранить.

Создание бакета для результатов обработки (bucket-processing-result)

Предоставьте сервисному аккаунту кластера разрешение READ и WRITE для этого бакета:

Сервисный аккаунт с разрешением READ и WRITE

Сохраните изменения.

Создание облачной сети

После того, как вы создали каталог в Yandex Cloud, внутри нее была создана сеть с подсетями в каждой зоне доступности. Ее имя - default:

Облачная сеть с подсетями, которая создается по умолчанию

Согласно официальной документации Yandex Cloud, мы должны создать облачную сеть с другими именем. Для этого откройте сервис Virtual Private Cloud и в правом верхнем углу нажмите Создать сеть:

Создание новой сети

Задайте ей название dataproc-network, убрав галочку Создать подсети:

Сеть dataproc-network

Нажмите кнопку Создать сеть. Теперь сеть default теперь можно удалить, она не будет участвовать в наших процессах:

Удаление сети default

Создание подсети

Откройте созданную сеть dataproc-network и создайте внутри нее подсеть:

Создание подсети

Сделайте это в любой зоне доступности. Значение CIDR обязательно к указанию, но по инструкции нет особых пометок. В таком случае можно указать любой диапазон из частных IPv4-адресов, определенных в RFC 1918:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Например, 192.168.0.0/24:

Создание подсети - указание CIDR

Нажмите Создать подсеть.

Настройка NAT-шлюза для подсети

На панели слева вашей облачной сети выберите Шлюзы:

Шлюзы

Нажмите кнопку Создать.

Создать шлюз

Задайте имя шлюза (например - gateway):

Создание шлюза

На панели слева выберите Таблицы маршрутизации. Нажмите на кнопку Создать таблицу маршрутизации:

Создание таблицы маршрутизации

Задайте имя таблицы (например - routing-table), а также укажите сеть dataproc-network:

Имя таблицы маршрутизации и сеть

Затем нажмите на кнопку Добавить маршрут. В открывшемся окне в поле Next hop выберите Шлюз. В поле Шлюз укажите созданный NAT-шлюз. Префикс назначения заполнится автоматически.

Добавление статического маршрута

Нажмите кнопку Добавить, а затем Создать таблицу маршрутизации.

Создание таблицы маршрутизации

Затем привяжите таблицу маршрутизации к одной из подсетей, чтобы направить трафик из нее через NAT-шлюз. Для этого на панели слева выберите Подсети. В строке нужной подсети нажмите на иконку с тремя точками и выберите пункт Привязать таблицу маршрутизации:

Привязать таблицу маршрутизации

В открывшемся окне выберите созданную таблицу в списке. Нажмите кнопку Привязать.

Привязка таблицы маршрутизации

Создание группы безопасности

Группы безопасности действуют по принципу «запрещено все, что не разрешено». Если назначить сетевому интерфейсу виртуальной машины (ВМ) группу безопасности без правил, ВМ не сможет передавать и принимать трафик. А нам нужно создать по одному правилу для входящего и исходящего служебного трафика.

Для этого откройте свою подсеть и перейдите на вкладку Группы безопасности. Создайте новую группу безопасности:

Создание группы безопасности

Задайте имя dataproc-sg:

Группа безопасности dataproc-sg

Создайте по одному правилу для входящего и исходящего служебного трафика со следующей конфигурацией:

  • Диапазон портов - 0-65535
  • Протокол - Любой (Any)
  • Источник / Назначение - Группа безопасности
  • Группа безопасности - Текущая (Self)

Для этого сначала на вкладке Входящий трафик добавьте правило:

Добавление правила для входящего трафика

Задайте настройки и сохраните:

Правило для входящего трафика

То же самое правило добавьте для исходящего трафика, перейдя на вкладку Исходящий трафик и добавив правило на ней:

Правило для исходящего трафика

Добавьте еще одно правило для исходящего HTTPS-трафика с такой конфигурацией:

  • Диапазон портов - 443
  • Протокол - TCP
  • Назначение - CIDR
  • CIDR блоки - 0.0.0.0/0

В интерфейсе это будет выглядеть так:

Правило для исходящего трафика 443

Сохраните правило.

Добавьте еще одно правило для исходящего трафика по протоколу TCP на порт 8443 для доступа к ClickHouse:

  • Диапазон портов - 8443
  • Протокол - TCP
  • Назначение - CIDR
  • CIDR блоки - 0.0.0.0/0

В интерфейсе это будет выглядеть так:

Правило для исходящего трафика 8443

Сохраните правило. В результате у вас должно быть создано 3 правила для исходящего трафика и 1 правило для входящего трафика.

Новая группа безопасности

Сохраните группу безопасности.

Создание кластера Yandex Data Processing

Yandex Data Processing - сервис для обработки многотерабайтных массивов данных с использованием инструментов с открытым исходным кодом, таких как Apache Spark, Apache Hadoop, Apache HBase, Apache Zeppelin и других сервисов экосистемы Apache.

Кластер Yandex Data Processing должен состоять из подкластера с хостом-мастером и как минимум из одного подкластера для хранения или обработки данных.

Для создания кластера Yandex Data Processing вашему аккаунту в Yandex Cloud нужны роли:

Сервисному аккаунту кластера Yandex Data Processing должны быть назначены роли:

  • dataproc.agent - чтобы сервисный аккаунт мог получать информацию о состоянии хостов кластера, заданиях и лог-группах.
  • dataproc.provisioner - чтобы сервисный аккаунт мог взаимодействовать с автоматически масштабируемой группой ВМ. Тогда будет доступно автомасштабирование подкластеров.

В консоли управления выберите каталог, в котором нужно создать кластер Yandex Data Processing. Нажмите кнопку Создать ресурс и выберите Кластер Yandex Data Processing в выпадающем списке:

Создать ресурс - Кластер Yandex Data Processing

Создайте кластер с любой подходящей конфигурацией хостов и следующими настройками:

  • Окружение - PRODUCTION;
  • Сервисы - SPARK, YARN, HDFS;

Чтобы использовать самую свежую версию образа, укажите значение 2.0:

Окружение и Сервисы

Обязательным полем для заполнения является SSH-ключ. Для подключения к ВМ по SSH используется пара ключей: открытый ключ размещается на ВМ, а закрытый ключ хранится у пользователя. Этот способ безопаснее, чем подключение по логину и паролю.

Далее демонстрация будет идти для операционной системы Windows 10 и новее. Инструкции по получению SSH-ключа для других ОС вы можете найти в официальной документации Yandex Cloud.

Откройте меню Пуск на своем компьютере и начните вводить powershell. В появившихся результатах нажмите на приложение Windows PowerShell:

Windows PowerShell

Откроется окно командной строки. Скопируйте нижеприведенный текст в PowerShell и нажмите Enter:

Создание нового ключа с помощью команды

После этого еще раз несколько раз нажмите на клавишу Enter, пока вы не получите следующее окно:

Получение SSH

После этого окно можно закрыть. Ваши ключи будут созданы в директории C:\Users\<имя_пользователя>\.ssh\

Ключ SSH на вашем компьютере

Откройте с помощью блокнота или любого другого текстового редактора (например, Notepad++) файл с расширением .pub:

Открытие файла .pub

Скопируйте содержимое файла и вставьте его в поле SSH-ключ создания кластера Yandex Data Processing:

Вставка SSH-ключа в Yandex Data Processing

Далее укажите следующие настройки:

  • Сервисный аккаунт - dataproc-s3-sa;
  • Имя бакета - бакет, который вы создали для выходных данных (в нашем примере - это bucket-processing-result);
  • Сеть - dataproc-network;
  • Группы безопасности - dataproc-sg;
  • Настройка UI Proxy включена.

Конфигурация кластера Yandex Data Processing

Для работы сервиса HDFS нужны подкластеры с хостом-мастером и DataNode. Поэтому в блоке Подкластеры добавьте Data подкластер:

Добавление подкластера

Задайте DataNode для HDFS и выберите любую конфигурацию подкластера. Например, Intel Cascade Lake с 2 ядрами и 8 ГБ памяти (s2.micro):

Конфигурация подкластера

Поскольку суммарный объем SSD-дисков в одном облаке не должен превышать 200 ГБ, используйте network-hdd. Например - 64 ГБ:

Размер хранилища - network-hdd

В сетевых настройках обязательно укажите свою подсеть:

Подсеть

Нажмите Добавить.

Примечание: подробнее о правилах тарификации для Yandex Data Processing читайте в официальной документации.

В завершение нажмите кнопку Создать кластер.

Создание кластера Yandex Data Processing

После создания кластера подождите некоторое время, пока он не будет полностью готов. Как только процесс завершится, ваш кластер появится в общем списке с возможностью немедленного использования:

Созданный кластер Yandex Data Processing

Создание кластера ClickHouse

Подробно весь этот процесс описан в руководстве 5.1.4. Создание кластера ClickHouse нашей онлайн-документации. Единственное, что требуется соблюсти согласно официальному руководству - это:

  • создание кластера ClickHouse должно быть с публичным доступом к хостам кластера;
  • сетевые настройки (сеть и группы безопасности) должны быть заданы для dataproc-network и dataproc-sg соответственно;
  • имя БД - db1;
  • имя пользователя - user1;
  • сервисный аккаунт - dataproc-s3-sa.

Примечание: для создания кластера Managed Service for ClickHouse нужна роль vpc.user и роль managed-clickhouse.editor или выше.

В консоли управления выберите каталог, в котором нужно создать кластер БД. Нажмите Создать ресурс - Кластер ClickHouse:

Создать ресурс - Кластер ClickHouse

Чтобы начать работу, просто нажмите Создать кластер:

Создание кластера

На открывшейся странице настроек кластера заполните все необходимые данные. В разделе Базовые параметры введите имя кластера в поле Имя кластера. Оно должно быть уникальным в рамках каталога. Например, directClickHouse:

Имя кластера

При желании вы можете добавить описание. Допустимая длина – до 256 символов.

Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):

  • PRODUCTION – для стабильных версий ваших приложений.
  • PRESTABLE – для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.

Мы рекомендуем выбрать PRODUCTION:

Окружение PRODUCTION

Теперь выберите версию ClickHouse, которую будет использовать кластер Managed Service for ClickHouse. Для большинства кластеров рекомендуется выбрать самую новую LTS-версию.

На момент выхода этого руководства самой новой/последней LTS-версией является 25.8 LTS. Выберите ее из выпадающего списка:

Версия кластера

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

Примечание: все доступные варианты перечислены в разделе Классы хостов.

Платформа определяет тип физического процессора и набор допустимых конфигураций vCPU и RAM.

  • Intel Broadwell соответствует процессору Intel Xeon Processor E5-2660 v4;
  • Intel Cascade Lake соответствует процессору Intel Xeon Gold 6230;
  • Intel Ice Lake соответствует процессору Intel Xeon Gold 6338.

Типы конфигураций:

  • s1s2s3 – стандартные конфигурации с соотношением количества гигабайт RAM к количеству vCPU 4:1;
  • m2m3 – конфигурации с увеличенным соотношением количества гигабайт RAM к количеству vCPU (8:1). Такие конфигурации могут быть полезны для кластеров с повышенными требованиями к кешу;
  • c3 – конфигурации с уменьшенным соотношением количества гигабайт RAM к количеству vCPU (2:1). Такие конфигурации могут быть полезны для кластеров с повышенными требованиями к производительности процессора;
  • b1b2b3 – конфигурации с гарантированной долей vCPU ниже 100%. Этот класс хостов предназначен для тестовой нагрузки, минимальная рекомендуемая конфигурация хоста для продакшн-решений – 2 vCPU с гарантированной долей 50%.

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

В блоке Ресурсы из выпадающего списка Платформы выберите Intel Cascade Lake:

Тип - Intel Cascade Lake

А тип виртуальной машины – burstable:

Тип виртуальной машины – burstable

А класс хоста – b2.medium:

Класс хоста - b2.medium

Для данного типа и платформы в блоке Размер хранилища можно выбрать тип хранилища:

  • сетевые HDD-диски (network-hdd) – самый экономичный вариант для кластеров, не требовательных к скорости записи и чтения;
  • сетевые SSD-диски (network-ssd) – компромиссный вариант: медленнее, чем локальные SSD-диски, но, в отличие от них, обеспечивают сохранность данных при выходе из строя оборудования Yandex Cloud.

Тип диска

Есть и другие варианты хранилища:

  • нереплицируемые SSD-диски (network-ssd-nonreplicated) – сетевые диски с повышенной производительностью, реализованной за счет устранения избыточности;
  • сверхбыстрые сетевые SSD-диски с тремя репликами (network-ssd-io-m3) – сетевые диски с теми же скоростными характеристиками, что и нереплицируемые. Этот тип диска обеспечивает избыточность;
  • локальные SSD-диски (local-ssd) – самые быстрые диски.

От выбранного типа дисков зависит, с каким шагом можно будет изменить размер хранилища:

  • хранилище на локальных SSD-дисках для платформ Intel Broadwell и Intel Cascade Lake – с шагом 100 ГБ;
  • хранилище на локальных SSD-дисках для платформы Intel Ice Lake – с шагом 368 ГБ;
  • хранилище на нереплицируемых SSD-дисках – с шагом 93 ГБ.

Поскольку вы создаете свой первый кластер ClickHouse на базе Yandex Cloud, вы можете взять самый простой тип диска (network-hdd) и минимальное по объему хранилище (на 10 ГБ). Это позволит вам удешевить итоговый тариф на аренду вычислительных ресурсов. В дальнейшем вы сможете поменять конфигурацию и увеличить размер хранилища, если объем вашей статистики из Яндекс Директа будет превышать выбранный.

Тип диска - network-hdd

Выбрав данную конфигурацию, справа вы увидите итоговую стоимость обслуживания (аренды):

Итоговая стоимость аренды кластера ClickHouse

В блоке Сетевые настройки укажите Сеть и Группы безопасности, которые вы создали на предыдущих шагах:

Сеть и Группы безопасности

В разделе Хосты напротив созданного хоста нажмите иконку карандаша и в открывшемся окне включите настройку публичного доступа:

Активация публичного доступа

Сохраните изменения.

В разделе Настройки СУБД задайте следующую конфигурацию:

  • Управление пользователями через SQL – Выключено;
  • Управление базами данных через SQL – Выключено (автоматически);
  • Имя пользователя – user1 (оставьте по умолчанию);
  • Пароль – минимум 8 символов (можно ввести вручную, а можно сгенерировать автоматически);
  • Имя БД – db1 (оставьте по умолчанию);
  • Движок – оставьте по умолчанию (изменить нельзя);
  • Гибридное хранилище – нет.

Настройки СУБД

В разделе Сервисные настройки обязательно поставьте галочки

  • Доступ из DataLens – позволяет строить визуализации на основе данных из кластера, собирать дашборды и делиться полученными результатами;
  • Доступ из WebSQL – позволяет исполнять запросы, делиться ими, просматривать и изменять схему баз данных;
  • Сервисный аккаунт - укажите dataproc-s3-sa.

Сервисные настройки

В завершение нажмите кнопку Создать кластер. После создания кластера ClickHouse вы увидите его в списке доступных:

Кластер ClickHouse

Выполнив все эти шаги, мы с вами подготовили только инфраструктуру, без данных. Теперь будем работать со статистикой Яндекс Директа.

Подготовка данных Яндекс Директа

Подробно весь процесс написания программы и итоговой выгрузки данных Яндекс Директа локально на компьютер в формате csv представлен в нашей онлайн-документации. К сожалению, в этом руководстве не представляется возможным описать это все, поскольку тогда этот гайд будет выглядеть не как методическое пособие, а как целая книга на несколько сотен страниц.

Я предполагаю, что до этого шага вы дошли самостоятельно и выгрузили нужные данные из Яндекс Директа с помощью API. Первый файл с примером, который я буду использовать - это статистика рекламных кампаний, полученная с помощью сервиса Reports:

Пример статистики Яндекс Директа (reports.csv)

Второй файл - это дополнительные сведения о рекламных кампаниях, которые выгружены с помощью сервиса Campaigns и метода get:

Параметры кампаний (campaigns.csv)

Нам необходимо подготовить CSV к загрузке, а именно:

  • проверить кодировку (CSV должен быть в UTF-8);
  • убедиться, что разделитель - запятая.

Загрузка CSV в Object Storage

Согласно официальному руководству, необходимо создать в бакете для входных данных папку csv и загрузить в нее CSV-файлы.

Примечание: в примере Yandex Cloud используются две таблицы в формате CSV:

  1. coords.csv - содержит информацию о географических координатах автомобиля;
  2. sensors.csv - содержит информацию о скорости и рабочих параметрах автомобиля.

Однако такие данные мало пригодны для наглядного показа обработки статистики из Яндекс Директа и ее выгрузки из Object Storage в ClickHouse. Поэтому я использовал реальные данные из рабочего кабинета одного из своих клиентов.

Для этого перейдите в сервис Object Storage. Выберите бакет, в который нужно загрузить объект. В нашем примере - bucket-initial-data:

Входной бакет для загрузки данных

В открывшемся окне в правом верхнем углу нажмите Создать папку:

Создать папку

Укажите имя папки csv и нажмите кнопку Создать:

Имя папки - csv

После создание папки перейдите в нее и нажмите Загрузить объекты:

Загрузить объекты

В появившемся окне выберите файл со статистикой Яндекс Директа и нажмите Открыть:

Загрузка csv

Консоль управления отобразит все объекты, выбранные для загрузки и предложит для каждого из них выбрать класс хранилища. Класс хранилища по умолчанию определяется настройкой бакета:

Загрузка объектов

Нажмите Загрузить.

После этого вы увидите в списке всех объектов ваш загруженный файл csv:

Загрузка объекта

Загрузите второй файл с параметрами кампаний таким же способом:

Загруженные файлы в Object Storage

Обработка данных в Yandex Data Processing

Теперь нам необходимо объединить данные из двух таблиц в одну и загрузить ее в формате Parquet в бакет, который вы ранее создали для результатов обработки. В нашем примере - bucket-processing-result.

Создайте локально файл с именем join-tables.py и скопируйте в него следующий скрипт:

, где вместо:

  • INPUT_BUCKET задайте имя входного бакета, в котором хранятся исходные CSV-таблицы (в нашем примере - это bucket-initial-data);
  • OUTPUT_BUCKET укажите имя выходного бакета, в который будет сохранен Parquet-файл с объединенными данными (в нашем примере - это bucket-processing-result).

На компьютере это может выглядеть так (в зависимости от того, какую IDE или программу вы используете для написания кода):

Пример созданного скрипта на компьютере (программа PyCharm)

Этот скрипт в среде Yandex Data Processing читает два CSV-файла (reports.csv со статистикой и campaigns.csv со справочными данными кампаний) из Yandex Object Storage, приводит названия полей в campaigns.csv к общей схеме, затем выполняет LEFT JOIN по идентификатору кампании (CampaignId), обогащая статистику метаданными кампаний. Результат объединения сохраняется обратно в Object Storage в формате Parquet, готовом для дальнейшей загрузки в ClickHouse или аналитической обработки.

После этого создайте в бакете для входных данных (в нашем примере - это bucket-initial-data) папку scripts:

Папка scripts

И загрузите в нее файл join-tables.py:

Загруженный скрипт в папку scripts

Создание задания PySpark

Перейдите в сервис Yandex Data Processing, нажмите на имя нужного кластера. Выберите вкладку Задания и создайте задание:

Создание задания

Задайте такие настройки:

  • Имя - произвольное (например - Задание PySpark);
  • Тип задания - PySpark;
  • Main python файл - укажите путь к файлу скрипта join-tables.py.
, где вместо <имя_входного_бакета> укажите имя входного бакета (в нашем примере - это bucket-initial-data).

В интерфейсе Yandex Cloud это будет выглядеть так:

Настройки задания

Нажмите кнопку Создать задание.

Дождитесь завершения задания:

Завершение задания (DONE)

А затем проверьте, что в выходном бакете в папке parquet появился Parquet-файл part-00000-***:

Parquet-файл part-00000-***

 

Экспорт данных в ClickHouse

Осталось только перенести объединенную таблицу из Object Storage в кластер ClickHouse. Для этого локально создайте еще один файл с именем parquet-to-ch.py и скопируйте в него следующий скрипт:

Укажите в скрипте:

  • в <имя_выходного_бакета> имя бакета, в котором лежит Parquet-файл (в нашем примере - это bucket-processing-result);
  • в параметре jdbcHostname идентификатор кластера Managed Service for ClickHouse;

FQDN хоста ClickHouse

  • в <пароль_пользователя_ClickHouse®> пароль пользователя ClickHouse.

Итоговый скрипт:

Пример созданного скрипта на компьютере (программа PyCharm)

Загрузите файл parquet-to-ch.py в бакет для входных данных в папку scripts:

Загруженный скрипт папке scripts

Создание задания PySpark

Перейдите в сервис Yandex Data Processing и создайте еще одно задание. Задайте такие настройки:

  • Имя - произвольное (например - Задание PySpark 2);
  • Тип задания - PySpark;
  • Main python файл - укажите путь к файлу скрипта parquet-to-ch.py.
, где вместо <имя_входного_бакета> укажите имя входного бакета (в нашем примере - это bucket-initial-data).

В интерфейсе Yandex Cloud это будет выглядеть так:

Настройки задания

Нажмите кнопку Создать задание.

Дождитесь завершения задания:

Завершение задания (DONE)

И убедитесь, что объединенная таблица с названием measurements перенесена в кластер. Для этого вы можете воспользоваться WebSQL, подключившись к ClickHouse, используя логин и пароль от БД:

Объединенная таблица в ClickHouse

Удаление созданных ресурсов

Как вы уже знаете, некоторые ресурсы Yandex Cloud платные. Чтобы за них не списывалась плата, удалите те, которые вы больше не будете использовать. Удалите объекты из бакетов и остальные ресурсы в зависимости от способа их создания:

  • кластер Managed Service for ClickHouse;
  • кластер Yandex Data Processing;
  • бакеты Object Storage;
  • подсеть;
  • таблицу маршрутизации;
  • NAT-шлюз;
  • облачную сеть;
  • сервисный аккаунт.

Итоги

Выполнение данного руководства позволяет не просто настроить автоматизацию, но и подняться на новую ступень в работе с маркетинговыми данными. То, как это нужно делать "по науке".

Чему вы научились?

  • Работа с API. Вы освоили процесс регистрации приложений, получения OAuth-токенов и взаимодействия с API Яндекс Директа;
  • Облачная инфраструктура. Вы научились разворачивать и связывать между собой сервисы Yandex Cloud: бакеты Object Storage, кластеры ClickHouse и среду обработки данных Yandex Data Processing;
  • ETL-процессы. Вы усвоили механику трансформации данных из отдельных таблиц CSV в оптимизированный формат Parquet с последующей загрузкой в базу данных;
  • Визуализация. Вы подготовили фундамент для создания автоматических отчетов в Yandex DataLens на основе готового подключения к ClickHouse, что позволяет презентовать результаты клиентам в реальном времени.

Логичный вопрос: почему нельзя сделать «проще»? Можно, и мы в своей онлайн-документации идем как раз по пути наименьшего сопротивления. Но он не всегда применим в крупных организациях. Простые решения (выгрузка в CSV, ручные отчеты, сторонние сервисы) работают до определенного момента. Как только появляются большие объемы данных, несколько клиентов или требования к автоматизации - без такой архитектуры уже не обойтись. Этот гайд показывает не «самый простой», а правильный и масштабируемый путь, так как здесь решается сразу несколько задач:

  • работа с защищенным API и авторизацией;
  • хранение больших объемов данных;
  • трансформация данных в удобный для аналитики вид;
  • масштабируемость и отказоустойчивость;
  • соответствие требованиям Яндекса к использованию API.

Если вы только начинаете работать с API Яндекс Директа, наш онлайн-курс поможет быстрее разобраться в теме и избежать типичных ошибок.

🔥 Новый онлайн-курс «n8n для маркетологов». Старт 1 июля!
ПОДРОБНЕЕ