BigQuery 数据透视:将任务状态长表转换为宽表
在BigQuery中实现任务状态长表到宽表的透视转换
可以使用BigQuery的PIVOT语法直接完成这个透视转换,针对需求的SQL语句如下:
SELECT * FROM ( SELECT id, created_at, status FROM `your-project.your-dataset.your-table` -- 替换为你的实际表路径 ) PIVOT ( MAX(created_at) -- 每个id+status对应唯一时间,用MAX/ANY_VALUE均可 FOR status IN ( 'task.created' AS `task.created`, 'task.completed' AS `task.completed`, 'task.deleted' AS `task.deleted` ) )
说明
- 子查询用于筛选所需字段,若原表有多余字段可在此过滤
PIVOT子句中使用聚合函数是BigQuery透视语法的强制要求,由于每个id与status的组合仅对应一条记录,MAX或ANY_VALUE都能得到正确结果FOR status IN (...)部分指定要转为列的状态值,通过AS保持列名与原状态值一致
输入表
| id | created_at | status |
|---|---|---|
| d4e9a2eb-9eb6-483e-8fbb-7268202fc7b3 | 2023-05-17T11:18:04.640Z | task.created |
| d4e9a2eb-9eb6-483e-8fbb-7268202fc7b3 | 2023-05-17T11:18:08.480Z | task.completed |
| d4e9a2eb-9eb6-483e-8fbb-7268202fc7b3 | 2023-05-17T11:18:08.480Z | task.deleted |
输出表
| id | task.created | task.completed | task.deleted |
|---|---|---|---|
| d4e9a2eb-9eb6-483e-8fbb-7268202fc7b3 | 2023-05-17T11:18:04.640Z | 2023-05-17T11:18:08.480Z | 2023-05-17T11:18:08.480Z |
内容的提问来源于stack exchange,提问作者p.magalhaes
相关产品推荐
相关产品推荐

