В то время как FLATTEN
- правильный подход при разборе массива, значение столбца UUID
, показанное в исходном описании, недопустимо , если интерпретируется как JSON синтаксис : "[""val1"", ""val2""]"
, и это потребует исправления, прежде чем можно будет применить подход LATERAL FLATTEN
, рассматривая его как тип VARIANT
.
Если ваша выборка данных в исходном описании является литеральной и применяется ко всем столбчатым значения, то следующий запрос поможет преобразовать его в действительный синтаксис JSON, а затем применить боковое выравнивание для получения желаемого результата:
SELECT
T.REFERENCE,
X.VALUE AS UUID
FROM (
SELECT
REFERENCE,
-- Attempts to transform an invalid JSON array syntax such as "[""a"", ""b""]"
-- to valid JSON: ["a", "b"] by stripping away unnecessary quotes
PARSE_JSON(REPLACE(REPLACE(REPLACE(UUID, '""', '"'), '["', '['), ']"', ']')) AS UUID_ARR_CLEANED
FROM TABLENAME) T,
LATERAL FLATTEN(T.UUID_ARR_CLEANED) X
Если ваши данные уже имеют допустимый тип VARIANT
при успешном выполнении PARSE_JSON
для столбца UUID
во время загрузки, и приведенный в описании пример был просто проблемой форматирования, которая отображает только недопустимое значение JSON в сообщении, а затем более простую версию того же запроса, что и выше. будет достаточно:
SELECT REFERENCE, X.VALUE AS UUID
FROM TABLENAME, LATERAL FLATTEN(TABLENAME.UUID) X