【问题标题】:How to create Deltas in bigquery如何在 bigquery 中创建 Delta
【发布时间】: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 我已经用示例数据更新了问题
  • 这里还是一片黑暗。您可能想详细说明“我每天都会刷新”。 - 你到底是怎么做的?

标签: sql google-bigquery


【解决方案1】:

您似乎对购买的每种产品及其重复都有一个列,这可能来自非规范化维度模型。要查询最后一次“更新”,您必须使用 lead 函数比较前一行的每一列。这将使用大量计算并且可能不是最佳的。

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

去规范化维度模型旨在减少对传统数据仓库的计算。 Bigquery 是快速、高度可扩展的企业数据仓库,具有强大的计算能力。

为了更好地了解 BigQuery 在后台的工作原理,我建议您查看此document

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多