首页 > 解决方案 > 在大查询中将多行转换为单个键值对行/列

问题描述

我想将多行数据转换为键值对。能够使用 udaf 函数在 hive 中执行此操作

输入表有两列

列 1 列 2

1 23

2 30

3 45

4 50

5 65

输出表将有一行/列

周销售额(键,值)

(“1”:“23”,“2”:“30”,“3”:“45”,“4”:“50”,“5”:“65”)

标签: google-cloud-platformgoogle-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL
SELECT CONCAT('{',
    STRING_AGG(CONCAT('"', CAST(column1 AS STRING), '":"', CAST(column2 AS STRING), '"')),
  '}') AS Weeksales
FROM `project.dataset.table`

如果适用于您的问题的样本数据 - 结果将是

Row Weeksales    
1   {"1":"23","2":"30","3":"45","4":"50","5":"65"}    

或更简洁的版本

#standardSQL
SELECT FORMAT('{%s}', STRING_AGG(FORMAT('"%d":"%d"', column1, column2))) AS Weeksales
FROM `project.dataset.table`   

显然具有相同的输出

另一个选项,更简洁,输出略有不同 - 但希望显示为您的选项

#standardSQL
SELECT STRING_AGG(FORMAT('%T', t)) AS Weeksales
FROM `project.dataset.table` t  

带输出

Row Weeksales    
1   (1, 23),(2, 30),(3, 45),(4, 50),(5, 65)    

上一个版本的另一个变体

#standardSQL
SELECT FORMAT('%t', ARRAY_AGG(t)) AS Weeksales
FROM `project.dataset.table` t      

带输出

Row Weeksales    
1   [(1, 23), (2, 30), (3, 45), (4, 50), (5, 65)]   

推荐阅读