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

BigQuery: Flattening all repeated fields in nested schema

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

我想压平 table 并得到类似这样的东西。

用户 | question_id | user_choices

123 | 1 | 1

123 | 1 | 2

123 | 1 | 3

123 | 1 | 4

从其他资源中,我可以从重复列中的记录之一进行查询。比如下面的:

SELECT user, dat.question_id FROM tablename, UNNEST(data) dat

它给了我这个结果。

但是当我这样做时,我又得到了另一个重复的列。

SELECT user, dat.question_id, dat.user_choices FROM tablename, UNNEST(data) dat

任何人都可以帮助我如何正确地 UNNEST table 以便我可以为所有数据项设置扁平化模式?

谢谢!

以下适用于 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