Присоединение вложенного столбца к таблице в SQL

# #sql #google-bigquery #nested

#sql #google-bigquery #вложенный

Вопрос:

Я пытаюсь создать таблицу BigQuery, основанную на различных других наборах данных. Таким образом, я хочу объединить данные из разных таблиц. В одной из моих исходных таблиц есть вложенный столбец, который я хочу включить. Для этого BigQuery говорит мне сначала удалить столбец, прежде чем получить к нему доступ. Мне это кажется нелогичным, так как я хочу включить его в качестве вложенного столбца в свою итоговую таблицу. Сейчас я использую запрос, упомянутый ниже, в ID качестве первичного ключа и nestedColumn вложенного столбца, но мне кажется странным сначала отменить, а затем агрегировать его.

Так что мне любопытно, это правильный путь? Или есть лучший/более чистый/более интуитивно понятный вариант? Я совсем новичок в SQL, поэтому, пожалуйста, извините меня, если я недостаточно объяснил это.

Таблица 1:

 | ID | Column2 | | --- | ----------- | | 1 | someString1 | | 2 | someString2 | | 3 | someString3 | | 4 | someString4 | | 5 | someString5 |  

Таблица 2:

 | ID | nestedColum | | --- | ----------- | | 1 | aaa | | 1 | aab | | 2 | aaa | | 3 | abc | | 4 | bcd |  

Которые после присоединения должны уступить:

 | ID | nestedColum | Column2 | | --- | ----------- | ------------  | 1 | aaa | someString1 | | | aab | | | 2 | aaa | someString1 | | 3 | abc | someString1 | | 4 | bcd | someString1 |   

Запрос:

 WITH  firstTable AS (  SELECT  ID  FROM  table1 ),    secondTable AS(  SELECT  ID,  ARRAY_AGG(h.reference IGNORE NULLS) AS nestedColumn  FROM  table2,  UNNEST (lines) AS h  GROUP BY  1 ) SELECT  firstTable.ID,  secondTable.ID,  secondTable.reference FROM  firstTable JOIN  secondTable ON  firstTable.ID = secondTable.ID  

ниже приводится MWE. В «реальных» данных столбец вложенности, конечно, вложен. Но поскольку в этом весь вопрос, я действительно не знаю, как это настроить.

 CREATE OR REPLACE TABLE  table1 ( ID int,  column2 string);  CREATE OR REPLACE TABLE  table2 ( ID int,  nestedColumn string );  INSERT INTO  table1 ( ID,  column2 ) VALUES  (1, 'something1'),  (2, 'something2'),  (3, 'something3'),  (4, 'something4'),  (5, 'something5') ;  INSERT INTO  table2 ( ID, nestedColumn ) VALUES  (1, 'aaa'),  (1, 'aab'),  (2, 'aaa'),  (3, 'abc'),  (4, 'abd');  SELECT * FROM  table1 JOIN table2 ON table1.ID = table2.ID Order by table1.ID  

Комментарии:

1. можете ли вы привести минимальный воспроизводимый пример? ожидаемый результат также был бы более чем желанным.

2. @AleixCC Я добавил свой оригинальный пост. Надеюсь, это немного прояснит мой вопрос.

3. Не могли бы вы предоставить схему обеих таблиц, т. е. таблицы 1 и таблицы 2, представленных в BigQuery, поскольку это поможет в репликации.

4. В вашем примере «Вложенный столбец» не вложен в массивы, это просто строка.