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。