Как выбрать элемент из Varchar "JSON Array" в базе данных снежинок? - PullRequest
1 голос
/ 10 января 2020

У меня есть столбец VARCHAR (16777216) в таблице базы данных снежинок, который структурирован как массив с JSON в нем.

Пример строки в столбце: [ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]

Как использовать sql для выбора всех фамилий в каждой строке?

Обратите внимание , это VARCHAR КОЛОННА.

1 Ответ

2 голосов
/ 10 января 2020

Вы можете сгладить массив JSON, а затем извлечь поле Last Name следующим образом:

WITH SampleData AS (
  SELECT '[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]' AS text
)
SELECT json_object.value:"Last Name" AS last_name
FROM SampleData, LATERAL FLATTEN (input => PARSE_JSON(text)) json_object;

Это возвращает:

LAST_NAME
"Doe"
"Doe"

В запросе LATERAL FLATTEN part - это то, что указывает на возвращение строки для каждой записи в тексте после анализа ее как JSON, а затем в списке SELECT, json_object.value возвращает значение для этой строки, а :"Last Name" возвращает поле с именем Last Name из него. Часть WITH SampleData (...) просто создает некоторые встроенные данные со столбцом VARCHAR с именем text.

Если вы хотите одну строку для каждой строки ввода, где последние имена находятся в массиве, вы можете использовать запрос этой формы:

WITH SampleData AS (
  SELECT '[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]' AS text
)
SELECT ARRAY_AGG(json_object.value:"Last Name") AS last_names
FROM SampleData, LATERAL FLATTEN (input => PARSE_JSON(text)) json_object
GROUP BY text;

Возвращает:

LAST_NAMES
[    "Doe",    "Doe"  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...