0
table_a
id_a|start_date|end_date  |flag_a|flag_b|...
1   |2020-01-01|2020-02-01|y     |n     |...
1   |2020-01-05|2020-02-05|y     |n     |...
2   |2020-01-15|2020-02-15|y     |n     |...
3   |2018-04-04|2020-04-14|y     |n     |...
table_b
id_a|val |date
1   |4.00|2020-01-20
1   |2.00|2020-01-20
1   |5.00|2020-01-20
2   |2.00|2020-01-20
2   |1.00|2020-01-20
2   |2.00|2020-04-20
3   |4.00|2020-04-20
3   |5.00|2020-04-20

我有这两张桌子。我想创建一个汇总表,其中不同的日期范围根据上述表格中的开始/结束日期的差异求和。

所以 table_c 将是:

id_a|start-180-90|start-90-30|start-30-0|...

因此,根据开始/结束日期和标志(每个聚合的不同标志组合),我有 50 个左右不同的聚合要运行。因此,基于table_b的id_asum all from and ,and ,依此类推,用于一堆不同的聚合。所有聚合都将基于这些日期范围,由 分区,由分区。valstart_date - 180 daysstart_date - 90 daysstart_date - 90 daysstart_date - 30 daystable_astart_datetable_bdate

从性能的角度来看,我想知道最好的方法是什么。我知道我关心的数据范围是 start_date - 180days 和 start_date + 180days 作为最大范围。但是 table_b 中的同一行可以在多个 table_a 范围内(因为表 a 可以具有相同 id 的重叠范围)。因此,如果我创建一个 a 与 b 连接的中间迭代表,它将是一个巨大的表,table_a 大约 90m,a+b 之间的连接可能超过 10b 行,如果不是更大的话,但最终表只会是90m 行,同table_a. 这些表都在 bigquery 中。我应该尝试直接在 bigquery sql 中创建这个 agg 表吗?我也可以使用火花。我应该创建一个加入 a+b 的临时表吗?我从性能的角度来看这个。

4

0 回答 0