从两个表计算分区并在bigquery中使用小于或等于索引的索引

Posted

技术标签:

【中文标题】从两个表计算分区并在bigquery中使用小于或等于索引的索引【英文标题】:calculate partition from two table and using index less than or equals of index in bigquery 【发布时间】:2021-04-03 13:46:22 【问题描述】:

我有 2 个表,第一个表是一个主表,我想加入并将分区总和到第二个表。

第一个表是:main_table

Month Product MOB
2020-12-01 B2B 1
2020-12-01 B2B 2
2021-01-01 B2B 1
2020-11-01 B2C 1
2020-11-01 B2C 2
2020-11-01 B2C 3

第二个表是:second_table

month Product MOB amount
2020-12-01 B2B 0 100
2020-12-01 B2B 2 100
2021-01-01 B2B 1 50
2020-11-01 B2C -2 50
2020-11-01 B2C 1 55
2020-11-01 B2C 3 100

我的预期结果是

Month Product MOB partition_amount
2020-12-01 B2B 1 100
2020-12-01 B2B 2 200
2021-01-01 B2B 1 50
2020-11-01 B2C 1 105
2020-11-01 B2C 2 105
2020-11-01 B2C 3 205

partition_amount 的计算方法是当 main_table.Month=second_table.Month 和 main_table.product=second_table.product 时,partition 是 second_table.amount 的 mob 之和。它将在 second_table.mob 时计算

谁能帮我写查询使用大查询?

【问题讨论】:

【参考方案1】:

它将在 second_table.mob

一种方法是join 和聚合:

select m.month, m.product, m.mob, sum(s.partition_amount)
from main_table m join
     second_table s
     on s.month = m.month and
        s.product = m.product and
        s.mob <= m.mob
group by 1, 2, 3;

【讨论】:

【参考方案2】:

考虑下面

select any_value(main_table).*,
  sum(if(second_table.mob <= main_table.mob, amount, 0)) as partition_amount
from `project.dataset.main_table` main_table
left join `project.dataset.second_table` second_table
using(month, product)
group by format('%t', main_table)    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

以上是关于从两个表计算分区并在bigquery中使用小于或等于索引的索引的主要内容,如果未能解决你的问题,请参考以下文章

将分区(火花)镶木地板加载到 bigquery 表

BigQuery:计算每日分区表中的平均值

BigQuery - 跨多个表读取时选择分区键

如何从手动分区的 BigQuery 表中引用最新表

分区 BigQuery 表,从 AVRO 加载

Bigquery 分片与 Bigquery 分区