BigQuery: сглаживание всех повторяющихся полей во вложенной схеме

У меня так много проблем с запросами из вложенной схемы Big Query. У меня есть следующие поля.

введите здесь описание изображения

Я хочу сгладить стол и получить что-то вроде этого.

пользователь | question_id | user_choices

123 | 1 | 1

123 | 1 | 2

123 | 1 | 3

123 | 1 | 4

Из других ресурсов я дошел до того, что могу запросить одну из записей в повторяющихся столбцах. Например, следующее:

ВЫБРАТЬ пользователя, dat.question_id FROM tablename, UNNEST (data) dat

Это дает мне такой результат. введите здесь описание изображения

Но когда я это делаю, я снова получаю еще один повторяющийся столбец.

SELECT user, dat.question_id, dat.user_choices FROM tablename, UNNEST (данные) dat

введите здесь описание изображения

Может ли кто-нибудь помочь мне, как правильно ОТНОСИТЬ эту таблицу, чтобы я мог иметь плоскую схему для всех элементов данных?

Спасибо!


person 2D_    schedule 24.09.2018    source источник


Ответы (1)


Ниже приведен стандартный SQL BigQuery.

#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    
person Mikhail Berlyant    schedule 25.09.2018
comment
Также подумайте о том, чтобы проголосовать за ответ, если он полезен: o) - person Mikhail Berlyant; 25.09.2018