Сведение нескольких массивов разной длины в BigQuery

Я пытаюсь сгладить массивы в разных столбцах разной длины без дублирования результатов.

Например (используя стандартный SQL):

WITH
  x AS (
  SELECT
    ARRAY[1,
    2,
    3] AS a,
    ARRAY[1,
    2] AS b)
SELECT
  a,
  b
FROM
  x,
  x.a,
  x.b

Производит:

+-----++-----+
| a   |   b  |
+-----++-----+
|   1 |   1  |
|   1 |   2  |
|   2 |   1  |
|   2 |   2  |
|   3 |   1  |
|   3 |   2  |
+-----++-----+

Это должно выглядеть так:

+-----++-----+
| a   |   b  |
+-----++-----+
|   1 |   1  |
|   2 |   2  |
|   3 | null |
+-----++-----+
MySQL <> google-bigquery..
Raymond Nijland 13.06.2019 17:54

Похоже, вам не хватает группы, чтобы получить желаемые результаты

Tamir Klein 13.06.2019 17:54

@TamirKlein - Не могли бы вы привести пример?

ethanenglish 13.06.2019 17:55

Также я советую удалить тег sql, так как google-bigquery отклоняется от некоторого базового синтаксиса SQL ANSI/ISO, который является тегом sql на этом веб-сайте. Поскольку синтаксис соединения запятых ANSI/ISO FROM x, x.a, x.b — это UNION ALL в google-bigquery вместо CROSS JOIN, который, как я полагаю, был в устаревшем режиме.

Raymond Nijland 13.06.2019 17:55

@RaymondNijland - перекрестное соединение дает тот же результат. Не могли бы вы привести пример, иллюстрирующий вашу точку зрения?

ethanenglish 13.06.2019 17:58
"кросс-соединение дает тот же результат" Хорошо, тогда вы запускаете его в стандартном SQL, тогда вы можете «игнорировать» мои комментарии
Raymond Nijland 13.06.2019 18:03
«Не могли бы вы привести пример, иллюстрирующий вашу точку зрения?»from_body: { from_item [, ...] | # Warning: Comma means UNION ALL here это в поиске руководство "Грамматика запроса
Raymond Nijland 13.06.2019 18:03

@RaymondNijland - пример в вопросе. Вставьте SQL в BigQuery и нажмите «Выполнить», чтобы воспроизвести пример в вопросе.

ethanenglish 13.06.2019 18:07
«Пример в вопросе»., как я уже сказал, вы можете «игнорировать» мой комментарий о устаревшем SQL (где запятая в FROM означает UNION ALL) и стандартном SQL (где запятая в FROM означает CROSS JOIN) в google bigquery, поскольку было неясно, в каком режиме вы используете запрос, поскольку вы использовали старый синтаксис соединения запятых ANSI/ISO. В идеале вам следует избегать использования любого способа и использовать синтаксис неявного соединения, такой как ответ @GordonLinoff, поскольку его запрос правильный и должен давать правильные результаты
Raymond Nijland 13.06.2019 18:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
9
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать JOIN:

SELECT a, b
FROM x LEFT JOIN
     UNNEST(x.a) a left join
     unnest(x.b) b 
     ON a = b;

Это работает очень хорошо. Как бы вы добавили больше столбцов помимо «а» и «б»? Допустим, у вас есть еще 2 вложенных столбца. Как бы вы присоединились? Первоначально оператор «и» имел смысл («... a = b и b = c»), но он просто дублировал «a» и «b». Есть предположения?

ethanenglish 13.06.2019 19:27

@этаннглиш . . . Вы можете продолжать добавлять дополнительные unnest()s. Если вы не можете заставить его работать, вы должны задать другой вопрос.

Gordon Linoff 13.06.2019 20:13

Я только что сделал: stackoverflow.com/questions/56586399/… :)

ethanenglish 13.06.2019 20:16

Другие вопросы по теме