1

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

在此处输入图像描述

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

用户 | 问题ID | 用户选择

123 | 1 | 1

123 | 1 | 2

123 | 1 | 3

123 | 1 | 4

从其他资源中,我达到了可以从重复列中的一条记录中查询的地步。如下所示:

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

它给了我这个结果。 在此处输入图像描述

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

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

在此处输入图像描述

任何人都可以帮助我如何正确地 UNNEST 这个表,以便我可以为所有数据项提供扁平化的架构?

谢谢!

4

1 回答 1

8

以下是 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    
于 2018-09-25T00:13:51.423 回答