如何在bigquery中创建Deltas

时间:2018-05-17 06:53:49

标签: sql google-bigquery

我在BQ有一张桌子,我每天刷新。它每天都是一个完整的快照。 我有业务要求来创建该Feed的增量。 表详细信息: 表包含10列 在10列中,每天有5列更改。如何识别哪些列已更改并仅为其创建快照? 例如,这里是tableA中的列:经常更改的列是粗体

Custid - ABC

first_product - 玩具

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 - null

third_product_purchase_date - null

fourth_product - null

fourth_product_purchase_date - null

购买更多数据后,数据将如下所示:

Custid - ABC

first_product - 玩具

first_product_purchase_date - 2015-01-01

last_product - Hardbook

last_product_purchase_date - 2018-05-17

second_product - 杂志

second_product_purchase_date - 2016-01-01

third_product - CD

third_product_purchase_date - 2017-01-01

fourth_product - null

fourth_product_purchase_date - null

first_product =有史以来第一个购买的产品 last_product =最近购买的产品

这只是一个客户的一行记录。我有数百万客户拥有所有这些列,并且我们说每天会有50万行更新。

在我的delta中,我只想要任何列值更改的行。

1 个答案:

答案 0 :(得分:0)

看起来你购买的每件产品和重复产品都有一个专栏,或许这来自一个非标准化的维度模型。查询最后一次"更新"您必须使用lead函数比较上一行的每一列。这将使用大量计算,可能不是最佳的。

我建议使用repeated字段。 product和product_purchase_date将重复字段,您可以使用where product_purchase_date = current_date()进行查询,这将使用更少的计算。

去标准化维度模型意味着在传统数据仓库上使用较少的计算。 Bigquery是快速,高度可扩展的企业数据仓库,具有很强的计算能力。

要了解BigQuery如何在幕后工作,我建议您查看此document