我在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中,我只想要任何列值更改的行。
答案 0 :(得分:0)
看起来你购买的每件产品和重复产品都有一个专栏,或许这来自一个非标准化的维度模型。查询最后一次"更新"您必须使用lead函数比较上一行的每一列。这将使用大量计算,可能不是最佳的。
我建议使用repeated字段。 product和product_purchase_date将重复字段,您可以使用where product_purchase_date = current_date()
进行查询,这将使用更少的计算。
去标准化维度模型意味着在传统数据仓库上使用较少的计算。 Bigquery是快速,高度可扩展的企业数据仓库,具有很强的计算能力。
要了解BigQuery如何在幕后工作,我建议您查看此document。