Google bigquery Bigquery-如何抽象重复逻辑
我发现自己处于这样一种境地,我会像这样一遍又一遍地重复同样的逻辑Google bigquery Bigquery-如何抽象重复逻辑,google-bigquery,Google Bigquery,我发现自己处于这样一种境地,我会像这样一遍又一遍地重复同样的逻辑 SELECT city, CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), value, 0)) AS INT64) AS value_7, CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY), value, 0)) AS INT64) AS value_14 FRO
SELECT
city,
CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), value, 0)) AS INT64) AS value_7,
CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY), value, 0)) AS INT64) AS value_14
FROM
table
GROUP BY
city
现在,在value
旁边,我有10个其他列,我想对它们应用相同的逻辑。有没有一种简单的方法来抽象格式和条件化
像my\u func(val\u col,date\u col,days)
我知道我可以手动完成,但它看起来太难看了。虽然“BigQuery不支持自己定义聚合函数”(希望如此),但总有解决办法-请参见下文(BigQuery标准SQL)
完美的正是我想要的。谢谢你的帮助。
#standardSQL
CREATE TEMP FUNCTION my_func(arr ARRAY<STRUCT<date_col DATE, val_col INT64>>, days INT64) AS ((
SELECT CAST(SUM(IF(date_col > DATE_SUB(CURRENT_DATE(), INTERVAL days DAY), val_col, 0)) AS INT64)
FROM UNNEST(arr)
));
SELECT
city,
my_func(ARRAY_AGG((date, value)), 7) value_7,
my_func(ARRAY_AGG((date, value)), 14) value_14
FROM `project.dataset.table`
GROUP BY city
my_func(ARRAY_AGG((date, value2)), 7) value2_7,
my_func(ARRAY_AGG((date, value2)), 14) value2_14