【问题标题】:Converting multiple rows to single key value pair row/column in Big query在大查询中将多行转换为单个键值对行/列
【发布时间】:2019-12-27 07:56:39
【问题描述】:

我想将多行数据转换成键值对。能够使用 udaf 函数在 hive 中做到这一点

输入表有两列

column1column2

1 23

2 30

3 45

4 50

5 65

输出表将只有一行/一列

周销售额(键,值)

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

【问题讨论】:

  • 输出表中只有一行?
  • 是的。刚刚编辑了问题。
  • 这很简单!你有没有尝试过?
  • GCP 世界的新手。尝试了一些东西,无法达到预期的输出,因此在这里发布。

标签: google-cloud-platform google-bigquery


【解决方案1】:

以下是 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)]   

【讨论】:

  • 谢谢。会试试这个。
猜你喜欢
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2018-06-24
  • 2020-05-21
相关资源
最近更新 更多