Запрос нескольких повторяющихся полей в BigQuery

У меня есть схема, которая содержит несколько повторяющихся полей, которые не являются вложенными.

Я пытаюсь запросить перекрестный продукт, но получаю ошибку: "Невозможно запросить перекрестный продукт повторяющихся полей..."

Если я запрашиваю только 2 повторяющихся поля, я могу сгладить одно из них. Тем не менее, я заинтересован в том, чтобы запросить более двух повторяющихся полей, и я не могу понять, как синтаксис FLATTEN поддерживает это.

Например, скажем, структура таблицы: a1, запись (повторяется): a1.b1, целое число a2, запись (повторяется): a2.b1, целое число a3, запись (повторяется): a3.b1, целое число

Я хочу запросить: выберите (*) на вкладке

3 ответа

Решение

Вы можете использовать вложенный вложенный выбор внутри FLATTEN, Требуется дополнительное ограничение вокруг оператора select. (синтаксис, к сожалению, довольно уродливый). например

SELECT
  ...
FROM (
    FLATTEN((
      SELECT
        ...
      FROM (
          FLATTEN((
            SELECT
              ...
            FROM
              table),
            f1)
          )
        ),
      f2)
    )
  )

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

(FLATTEN(ПЛОСКОЕ (таблица, a1), a2))

Теперь, когда BigQuery перешел на стандартный SQL, используя FLATTEN не работает Однако Google задокументировал, как мигрировать. Это решение сработало для меня, хотя есть несколько других способов сделать это:

SELECT
  flattened_field_1,
  flattened_field_2

FROM my_dataset.my_table
LEFT JOIN UNNEST(repeated_field_1) AS flattened_field_1
LEFT JOIN UNNEST(repeated_field_2) AS flattened_field_2
# ...etc
Другие вопросы по тегам