Запрос нескольких повторяющихся полей в 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