BigQuery:展平嵌套架构中的所有重复字段

时间:2018-09-24 23:59:51

标签: google-bigquery standard-sql unnest

我在从Big Query的嵌套模式进行查询时遇到了很多麻烦。 我有以下字段。

enter image description here

我想弄平桌子,得到这样的东西。

用户|问题ID | user_choices

123 | 1 | 1

123 | 1 | 2

123 | 1 | 3

123 | 1 | 4

从其他资源来看,我可以从重复列中的一条记录进行查询。如以下内容:

  

SELECT用户,dat.question_id FROM表名,UNNEST(data)dat

它给了我这个结果。 enter image description here

但是当我这样做时,我又得到了另一遍重复的专栏。

  

SELECT用户,dat.question_id,dat.user_choices FROM表名,UNNEST(data)dat

enter image description here

任何人都可以帮助我如何正确删除该表,以便为所有数据项提供扁平化的架构吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

以下是用于BigQuery标准SQL

#standardSQL
SELECT user, question_id, choice 
FROM `project.dataset.table`, 
  UNNEST(data) question, 
  UNNEST(user_choices) choice

您可以使用以下问题中的虚拟数据进行测试,操作

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 user, 
    [STRUCT<question_id INT64, user_choices ARRAY<INT64>>
      (1,[1,2,3]),
      (2,[2,5]),
      (3,[1,3])
    ] data UNION ALL
  SELECT 2 user, 
    [STRUCT<question_id INT64, user_choices ARRAY<INT64>>
      (1,[2,3]),
      (2,[4,5]),
      (3,[2,6])
    ] data
)
SELECT user, question_id, choice 
FROM `project.dataset.table`, 
  UNNEST(data) question, 
  UNNEST(user_choices) choice
ORDER BY user, question_id, choice    

有结果

Row user    question_id choice   
1   1       1           1    
2   1       1           2    
3   1       1           3    
4   1       2           2    
5   1       2           5    
6   1       3           1    
7   1       3           3    
8   2       1           2    
9   2       1           3    
10  2       2           4    
11  2       2           5    
12  2       3           2    
13  2       3           6