如何在 bigquery 中创建 Delta
Posted
技术标签:
【中文标题】如何在 bigquery 中创建 Delta【英文标题】:How to create Deltas in bigquery 【发布时间】:2018-05-17 06:53:48 【问题描述】:我在 BQ 有一张桌子,我每天都会刷新。这是每天的完整快照。 我有创建该提要的增量的业务需求。 表详细信息: 表包含 10 列 在 10 列中,有 5 列每天更改。我如何识别哪些列发生了变化并只为此创建一个快照? 例如,这里是 tableA 中的列:经常更改的列是 bold。
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 - 空
third_product_purchase_date - 空
fourth_product - 空
fourth_product_purchase_date - 空
更多购买后数据会是这样的:
Custid - ABC
first_product - 玩具
first_product_purchase_date - 2015-01-01
last_product - 硬本
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 - 空
fourth_product_purchase_date - 空
first_product = 购买的第一件产品 last_product = 最近购买的产品
这只是一位客户的一行记录。我拥有数以百万计的所有这些列的客户,假设每天都会更新 50 万行。
在我的增量中,我只想要任何列值发生变化的行。
【问题讨论】:
您需要样本数据和想要的结果。 @GordonLinoff 我已经用示例数据更新了问题 这里还是一片黑暗。您可能想详细说明“我每天都会刷新”。 - 你到底是怎么做的? 【参考方案1】:您似乎对购买的每种产品及其重复都有一个列,这可能来自非规范化维度模型。要查询最后一次“更新”,您必须使用 lead 函数比较前一行的每一列。这将使用大量计算并且可能不是最佳的。
我建议使用repeated 字段。 product 和 product_purchase_date 将是重复字段,您可以简单地使用 where product_purchase_date = current_date()
进行查询,这将使用更少的计算。
去规范化维度模型旨在减少对传统数据仓库的计算。 Bigquery 是快速、高度可扩展的企业数据仓库,具有强大的计算能力。
为了更好地了解 BigQuery 在后台的工作原理,我建议您查看此document。
【讨论】:
以上是关于如何在 bigquery 中创建 Delta的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 BigQuery 中自定义函数吗?如何在 BigQuery 中创建日期参数?