从两个表计算分区并在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中使用小于或等于索引的索引的主要内容,如果未能解决你的问题,请参考以下文章