Как создать Deltas в bigquery - PullRequest
0 голосов
/ 17 мая 2018

У меня есть таблица в BQ, которую я обновляю ежедневно.Это полный снимок каждый день.У меня есть бизнес-требование для создания дельты этого канала.Детали таблицы: Таблица содержит 10 столбцов. Из 10 столбцов ежедневно меняются 5 столбцов.Как определить, какие столбцы изменились, и создать только снимок для этого?Например, вот столбцы в таблице A: часто изменяемые столбцы имеют размер полужирный .

Custid - ABC

first_product - toy

first_product_purchase_date -2015-01-01

last_product - электронная книга

last_product_purchase_date - 2018-05-01

second_product - Журнал

second_product_purchase_date - 2016-01-01

third_product - ноль

third_product_purchase_date - ноль

четвертый_продукт - ноль

четвертый_продукт_покупка - ноль

После дополнительной покупки данные будут выглядеть следующим образом:

Custid - ABC

first_product - игрушка

first_product_purchase_date - 2015-01-01

last_product - Hardbook

last_product_purchase_date - 2018-05-17

second_product - Журнал

секундаd_product_purchase_date - 2016-01-01

3rd_product - CD

third_product_purchase_date - 2017-01-01

четвертый_продукт - ноль

четвертый_продукт_purchase_date - ноль

first_product = первый продукт, когда-либо купленный last_product = самый последний продукт, приобретенный

Этотолько один ряд записей для одного клиента.У меня есть миллионы клиентов со всеми этими столбцами, и, скажем, полмиллиона строк будут обновляться ежедневно.

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

1 Ответ

0 голосов
/ 25 мая 2018

Кажется, у вас есть столбец для каждого купленного продукта и его повторения, возможно, это происходит из-за ненормализованных размерных моделей. Чтобы запросить последнее «обновление», вам нужно сравнить каждый столбец предыдущей строки с помощью функции lead . Это будет использовать много вычислений и не может быть оптимальным.

Я рекомендую использовать повторяющиеся поля. Поле product и product_purchase_date будет повторяться, и вы можете просто запросить, используя where product_purchase_date = current_date(), что потребует гораздо меньше вычислений.

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

Чтобы лучше понять, как работает BigQuery под капотом, я рекомендую ознакомиться с этим документом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...