en
Назад

Рабочий 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-таблицу и передает данные в аналитическую витрину.

Схема архитектуры: от XLSX-файла и Object Storage до YDB, Wordstat API, витрины и DataLens.

Модель данных

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

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 через отдельную витрину.

Это не разовый парсер, а основа для внутреннего инструмента: от хранения семантики до автоматического обновления спроса и готового аналитического слоя.

Ссылки