Рабочий ETL-контур
Автоматизация сбора поискового спроса Yandex Wordstat
ETL-контур для регулярного сбора, хранения и анализа поискового спроса по фразам, кластерам, брендам и конкурентам.
Автоматизация сбора динамики спроса из Yandex Wordstat: от XLSX-файла с фразами до готовой витрины в YDB и аналитики в DataLens.
- Yandex Cloud
- Cloud Functions
- YDB
- DataLens
- Telegram Bot
- ChatGPT
Контекст
Маркетологу важно регулярно видеть, как меняется поисковый спрос: по бренду, конкурентам, категориям, форматам, регионам и периодам. Ручная работа с Wordstat плохо масштабируется: фраз становится больше, группировки усложняются, данные нужно обновлять регулярно, а историческую динамику приходится каждый раз собирать заново.
Задача была не просто получить данные из Wordstat, а превратить ручной сбор в воспроизводимый аналитический контур: с хранением семантики, регулярной загрузкой данных, контролем ошибок и готовым слоем для BI.
Задача
Нужно было собрать систему, которая берет подготовленную семантику, получает динамику спроса через Wordstat API, сохраняет данные в YDB и готовит их для анализа в DataLens.
- загружать фразы и кластеры из XLSX-файла;
- хранить справочники в нормализованной структуре YDB;
- получать weekly-динамику через Wordstat API;
- поддерживать backfill и rolling-обновления;
- логировать запуски, статусы, ошибки и количество записанных строк;
- обрабатывать фразы батчами с учетом лимитов API;
- готовить отдельную витрину для DataLens;
- оставить основу для расширения под monthly и daily режимы, а также расширения регионов и устройств.
Архитектура решения
Контур построен вокруг Yandex Cloud: исходные фразы и кластеры загружаются через XLSX, файл попадает в Object Storage, Cloud Functions обновляют справочники в YDB, отдельная функция обращается к Wordstat API, сохраняет факты в dynamics-таблицу и передает данные в аналитическую витрину.
Модель данных
В основе проекта — нормализованная модель данных. Фразы, кластеры, запуски, задачи и фактическая динамика хранятся отдельно. Это позволяет не смешивать справочники, процесс обработки и итоговые аналитические данные.
clusters
Справочник кластеров: бренды, конкуренты, generic-группы и другие смысловые сегменты спроса.
phrases
Хранилище фраз для парсинга. Каждая фраза имеет стабильный phrase_id, нормализованный текст и связь с кластером.
parser_runs
Лог запусков парсера: статус, время старта и завершения, количество обработанных фраз, ошибки и количество записанных строк.
parser_tasks
Очередь задач для батчевой обработки: статусы, попытки, ошибки, время начала и завершения задачи.
wordstat_weekly_dynamics
Итоговая таблица с динамикой спроса: фраза, регион, устройство, период, показы, доля, run_id и время загрузки.
dynamics_enriched
Предрассчитанный аналитический слой, который собирает справочники и факты в удобный формат для BI.
Надежность и контроль ошибок
Система рассчитана не на разовый запуск, а на регулярную обработку данных. Каждый запуск получает собственный run_id, задачи хранятся отдельно, ошибки фиксируются на уровне конкретной фразы или батча, а статусы позволяют быстро понять, где именно остановился процесс.
- каждый запуск имеет run_id;
- статусы запусков: RUNNING, SUCCESS, FAILED, CANCELLED;
- задачи хранятся в parser_tasks отдельно от parser_runs;
- attempt используется для повторных попыток;
- error_message сохраняет причину ошибки;
- batch-обработка помогает не упираться в лимиты API;
- rolling-режим защищает свежие данные от устаревания;
- при сбое можно понять, где проблема: API, задача, запись в YDB или сборка витрины.
Автоматизация
Поверх ETL добавлен операционный слой: Timer Triggers запускают регулярную обработку, backfill используется для исторической загрузки, rolling-режим обновляет последние периоды, а Telegram-уведомления сообщают о старте, результате и ошибках.
Timer Triggers
Регулярные запуски функций по расписанию.
Telegram Notifications
Уведомления о запуске, статусе и результате обработки.
Backfill Mode
Историческая загрузка данных за нужные периоды.
Rolling Mode
Перезапись последних периодов, где данные могут обновляться.
Витрина и DataLens
Прямые джойны больших таблиц внутри BI могут быстро упереться в ограничения по материализации данных. Поэтому для DataLens собирается отдельная витрина в YDB: справочники, факты и кластеры заранее приводятся к удобному аналитическому виду.
- быстрее работает BI;
- меньше риск ошибок на тяжелых join-операциях;
- проще строить графики и селекторы;
- можно анализировать спрос по брендам, конкурентам, generic-группам и кластерам;
- можно сравнивать периоды и смотреть динамику спроса.
Сложности и решения
API имеет ограничения (100 запросов/час).
Добавлены батчи, лимиты, ретраи, очередь задач и контроль попыток.
Историческая загрузка занимает много времени.
Backfill вынесен в отдельный режим, который можно запускать частями.
Свежие данные могут обновляться задним числом.
Rolling-режим перезаписывает последние периоды и поддерживает актуальность данных.
DataLens может упираться в тяжелые джойны.
Собирается отдельная витрина в YDB вместо сложных соединений внутри BI.
Ошибки сложно искать без логирования.
Используются parser_runs, parser_tasks, статусы, error_message и Telegram-уведомления.
Результат
Получился рабочий ETL-контур для сбора и анализа поискового спроса. Фразы и кластеры хранятся в YDB, weekly-динамика загружается через Wordstat API, запуски логируются, задачи обрабатываются батчами, ошибки контролируются, а данные готовятся для DataLens через отдельную витрину.
Это не разовый парсер, а основа для внутреннего инструмента: от хранения семантики до автоматического обновления спроса и готового аналитического слоя.