Объединение BigQuery по вложенным полям

75
6

Я пытаюсь создать объединение из трех таблиц. Все 3 таблицы являются подзапросами в одной и той же таблице: каждый подзаголовок содержит только одно поле с таким же псевдонимом для поля во всех подзапросах, поэтому результирующая схема будет совместима и объединение будет успешным (в соответствии с примером из функции поддержки UNION в BigQuery SQL).

В результате запроса возникает ошибка:

Союз приводит к двусмысленной схеме. [foo] неоднозначно и сглаживает несколько полей. Псевдонимы:...

Возможно, ошибка связана с тем, что выбранное поле является вложенным в несколько записей и повторяющихся полей.

Пример фиктивного запроса:

выберите из
(SELECT record.list1.list2.listA.foo как foo из образца),
(SELECT record.list1.list2.listB.foo как foo из образца),
(SELECT record.list1.list2.listC.foo как foo из образца)

См. Задание job_eZm0F1cGA2leE37D8-N5NHNTTYU для конкретного примера (это таблица, содержащая данные, которые я не могу предоставить).

спросил(а) 2021-01-19T15:58:33+03:00 2 месяца, 4 недели назад
1
Решение
76

Вы можете воспроизвести это с помощью общедоступного набора данных:

SELECT x FROM
(SELECT phoneNumber.areaCode x
FROM [bigquery-samples:nested.persons_living] LIMIT 1),
(SELECT citiesLived.numberOfYears x
FROM [bigquery-samples:nested.persons_living] LIMIT 1);

Error: Union results in ambiguous schema.
[x] is ambiguous and is aliasing multiple fields.
Aliased fields: x,CitiesLived.x,

Как уже отмечалось, это происходит только при смешивании разных нескольких записей и повторяющихся полей - и у них есть быстрое исправление: FLATTEN() перед запросом:

SELECT x FROM
(SELECT phoneNumber.areaCode x
FROM [bigquery-samples:nested.persons_living] LIMIT 1),
(SELECT citiesLived.numberOfYears x
FROM (FLATTEN([bigquery-samples:nested.persons_living], citiesLived)) LIMIT 1);

ответил(а) 2021-01-19T15:58:33+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема