Вы можете напрямую адресовать значения в массивах и соответствующим образом преобразовывать данные, используя struct et c.:
WITH t AS (
SELECT * FROM UNNEST([
STRUCT('a' AS company, STRUCT([-71.2, 42.0] as coordinates, 'Point' as type) AS location),
('b', ([-71.0, 42.2], 'Point')),
('c', ([-71.4, 42.4], 'Point'))
])
)
--show source structure of example data
--SELECT * FROM t
SELECT * except(location),
STRUCT(
location.coordinates[safe_offset(0)] as long,
location.coordinates[safe_offset(1)] as lat,
location.type
) as location
FROM t
новая таблица результатов
Там offset()
для доступа на основе 0, ordinal()
для доступа на основе 1 и с safe_
вы не запускаете ошибки, если индекс в массиве не существует. Если вам нужно знать, что значения отсутствуют, вы должны использовать версию без safe_
.
В любом случае - эта структура плоская, если выбрать определенные c значения из массива. Он должен работать с datastudio или любым другим инструментом визуализации, больше нет повторяющихся строк