Sql BigQuery:为表中缺少的列填充null
我有一个查询来显示基于某些指标的每日聚合。差不多Sql BigQuery:为表中缺少的列填充null,sql,google-bigquery,Sql,Google Bigquery,我有一个查询来显示基于某些指标的每日聚合。差不多 select date(timestamp), metric, count(*) from aggs GROUP BY 1,2 ORDER BY 1,2; 问题是某一天缺少某些指标,如: date | metric | count 03/01 | B | 50 03/02 | A | 60 03/02 | B | 10 03/02 | C | 70 03/03 | C
select date(timestamp), metric, count(*) from aggs GROUP BY 1,2 ORDER BY 1,2;
问题是某一天缺少某些指标,如:
date | metric | count
03/01 | B | 50
03/02 | A | 60
03/02 | B | 10
03/02 | C | 70
03/03 | C | 10
我想为缺少的日期/度量值对填写0或null-即我们如何执行以下操作:
date | metric | count
03/01 | A | 0
03/01 | B | 50
03/01 | C | 0
03/02 | A | 60
03/02 | B | 10
03/02 | C | 70
03/03 | A | 0
03/03 | B | 0
03/03 | C | 10
可以使用交叉联接生成行,然后使用左联接填充值: 如果您没有想要的所有日期,可以使用:
unnest(generate_date_array(<date1>, <date2>, interval 1 day)) u(dte)
可以使用交叉联接生成行,然后使用左联接填充值: 如果您没有想要的所有日期,可以使用:
unnest(generate_date_array(<date1>, <date2>, interval 1 day)) u(dte)
在BigQuery中,有几种方法可以进行时间序列空暴露。如果查询性能不是问题,那么更简单的方法是
WITH original_result AS (
SELECT date(timestamp) as date, metric, count(*)
FROM aggs
GROUP BY 1,2
)
SELECT
*
FROM
UNNEST(
GENERATE_DATE_ARRAY(<start_date>, <end_date>, INTERVAL 1 DAY)
) AS date
LEFT JOIN original_result USING (date)
ORDER BY 1, 2
在BigQuery中,有几种方法可以进行时间序列空暴露。如果查询性能不是问题,那么更简单的方法是
WITH original_result AS (
SELECT date(timestamp) as date, metric, count(*)
FROM aggs
GROUP BY 1,2
)
SELECT
*
FROM
UNNEST(
GENERATE_DATE_ARRAY(<start_date>, <end_date>, INTERVAL 1 DAY)
) AS date
LEFT JOIN original_result USING (date)
ORDER BY 1, 2
您的查询在语法上不正确,因此对问题没有特别的帮助。@GordonLinoff我更新了查询,现在可以看一下吗?@Kauki。这并没有改变我的答案。您可以将查询用作CTE。您的查询在语法上不正确,因此对问题没有特别的帮助。@GordonLinoff我更新了查询,现在可以看一下吗?@Kauki。这并没有改变我的答案。您可以将查询用作CTE。