BigQuery: выравнивание всех повторяющихся полей во вложенной схеме - PullRequest
0 голосов
/ 25 сентября 2018

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

enter image description here

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

user |вопрос_ид |user_choices

123 |1 |1

123 |1 |2

123 |1 |3

123 |1 |4

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

ВЫБЕРИТЕ пользователя, dat.question_id ОТ имени таблицы, UNNEST (данные) dat

Это дает мне этот результат.enter image description here

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

ВЫБЕРИТЕ пользователя, dat.question_id, dat.user_choices FROM tablename,UNNEST (данные) dat

enter image description here

Может кто-нибудь помочь мне, как правильно UNNEST этой таблицы, чтобы я мог сплющить схему для всех элементов данных?

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2018

Ниже для BigQuery Standard 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    
...