如何在非常大的表上进行尾随和

时间:2019-12-05 22:12:56

标签: sql google-bigquery

我有一个表,其中包含220亿行,并且要求我对某些指标进行30天的尾随总和,然后按天划分,然后乘积。我在网上找到的答案建议使用自连接来确定此尾随和,但是在一张很大的桌子上,我什至不愿从基于成本的角度对其进行测试。

有没有一种方法可以计算尾随总和而无需进行非常昂贵的自连接?

1 个答案:

答案 0 :(得分:1)

您将使用窗口功能。如果每个日期有一行:

select t.*,
       sum(val) over (partition by day, product
                      order by date
                      rows between 29 preceding and current row
                     ) as sum_30
from t;

如果您想要30天并且可能存在间隔,则需要将日期转换为数字,您可以使用unix_date()。那应该是:

select t.*,
       sum(val) over (partition by day, product
                      order by unix_date(date)
                      range between 29 preceding and current row
                     ) as sum_30
from t;