В период с 11 по 15 июня в потоках Mandrill→BigQuery, AppsFlyer→BigQuery и SparkPost→BigQuery произойдет переход на сбор данных в партиционированные таблицы — вместо таблиц с разделением по дням.
Чтобы продолжать получать актуальные отчеты на основе данных в этих потоках, вам необходимо до 11 июня подготовить новые форматы запросов для отчетов, которые используют данные таблиц этих потоков.
Что такое партиционированные таблицы (partitioned tables)
В партиционированной таблице весь объем данных разделен на части (партиции). При обработке данных в такой таблице работа логически происходит с одной большой таблицей, при этом физически объем данных разделен на отдельные части по одному из двух критериев:
- Время записи данных в таблицу (по умолчанию)
- Время из заданного поля таблицы одного из форматов даты
Ранее, при обработке данных за несколько дней в разделенных по днях таблицам необходимо было использовать table wildcard functions (TABLE_DATE_RANGE). Теперь, в партиционированных таблицах для обработки данных за определенный промежуток времени в запросах необходимо указывать значение PARTITIONTIME.
Подробнее о запросах к партиционированным таблицам — в справке Google BigQuery.
Преимущества перехода на партиционированные таблицы
- В партиционированных таблицах можно делать запросы к строкам за определенный час, минуту и т.д — запросам не нужно обрабатывать данные в таблице за весь день.
- Обновлять и удалять записи в партиционированных таблицах гораздо удобнее. Поскольку функции DML нельзя применить сразу к нескольким таблицам, раньше необходимо было делать запрос для каждой таблицы. Для партиционированной таблицы же нужен всего один запрос. В том числе, это позволит с помощью одного запроса удалить или анонимизировать данные пользователя в соответствии с требованиями GDPR.
Как произойдут изменения в потоках
В период с 11 по 15 июня мы создадим новые партиционированные таблицы и все данные в потоках Mandrill→BigQuery, AppsFlyer→BigQuery и SparkPost→BigQuery будут отправляться в них.
Названия партиционированных таблиц будут такими же, как у таблиц с разделением по дням.
Таблицы будут партиционированы по времени записи данных в таблицу. Это время может отличаться от времени совершения события и времени отправки события в сервисе-источнике данных.
Исторические данные в таблицах с разделением по дням будут скопированы в таблицы с партициями, после чего мы удалим исходные таблицы с разделением по дням.
Все исторические данные будут скопированы в течение недели после переключения сбора данных в партиционированные таблицы.
Обратите внимание: Начните использовать новые запросы только после того, как все исторические данные будут скопированы.
Как изменения повлияют на обработку данных
Структура таблиц в BigQuery не изменится. Таблицы, которые вы получаете в результате SQL-запросов также не изменятся.
В ваших запросах необходимо будет изменить только способ выбора диапазона дат. Если ранее вы выбирали даты с помощью FROM TABLE_DATE_RANGE(...), то в партиционированных таблицах используйте условие WHERE PARTITIONTIME > AND < (BETWEEN).
Поскольку партиционированные таблицы разделены по времени добавления данных, объемы данных за определенный день могут незначительно — на секунды — отличаться в сравнении с прошлым методом разделения таблиц .
Например, ранее в AppsFlyer таблицы делились по дням на основе поля event_time
. В партиционированных таблицах разделение на партиции происходит по времени добавления записи в таблицу, поэтому в некоторых случаях время в этих двух полях может отличаться. События, отправленные на границе дня, могут попасть в партицию, отличную от времени в event_time
.
Если у вас есть вопросы о партиционированных таблицах, обращайтесь к нам на bi@owox.com. Будем рады ответить :)
0 Комментарии