大查询记录分为多列

时间:2019-12-05 13:10:39

标签: sql google-bigquery

我有一个看起来像这样的表

text           |  STRING
concepts       |  RECORD
concepts.name  |  STRING
[...]

所以一行可能看起来像这样:

"This is a text about BigQuery and how to split records into columns. "
SQL
BigQuery
Questions

我想将其转换为:

text, concepts_1, concepts_2, concepts_3 // The names are not important
"This is a text about BigQuery and how to split records into columns. ",SQL,BigQuery,Questions

每行中概念的数量各不相同。

编辑:

这也可以:

text, concepts
"This is a text about BigQuery and how to split records into columns. ","SQL,BigQuery,Questions"

3 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

如果逗号分隔列表适合您-请考虑以下快捷方式版本

#standardSQL
SELECT identifier, 
  (SELECT STRING_AGG(name, ', ') FROM UNNEST(concepts)) AS conceptName
FROM `project.dataset.articles`   

#standardSQL
SELECT identifier, 
  (SELECT STRING_AGG(name, ', ') FROM articles.concepts) AS conceptName
FROM `project.dataset.articles` articles   

以上两个版本都返回以下输出

Row identifier  conceptName  
1   1           SQL, BigQuery, Questions     
2   2           xxx, yyy, zzz      

如您所见-上面的版本简短而紧凑,无需使用额外的分组来将其转换为字符串,然后将其转换为字符串-因为所有这些操作都可以通过简单的操作完成

答案 1 :(得分:0)

这是我的解决方案。但它只会创建一个逗号分隔的字符串。但是,就我而言,这很好。

SELECT articles.identifier, ARRAY_TO_STRING(ARRAY_AGG(concepts.name), ",") as 
conceptName
FROM `` articles, UNNEST(concepts) concepts
GROUP BY articles.identifier

答案 2 :(得分:0)

尝试使用此:

SELECT
  text,
  c.*
FROM
  `your_project.your_dataset.your_table`,
  UNNEST(
  concepts
    ) c

这将从您的RECORD列中获取文本列以及未嵌套的值。

希望有帮助。