Не удается запросить полуструктурированные данные, используя боковое выравнивание и т. Д. - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть некоторые данные в таблице, и один из столбцов - это вариант, содержащий число данных JSON. Я могу успешно сгладить массивы и массивы внутри массивов для доступа к данным в них, но я борюсь с сглаживанием пар ключ-значение для доступа к значению для данного ключа.

Я видел документы на https://docs.snowflake.net/manuals/user-guide/json-basics-tutorial.html, сопоставляя это с моим случаем использования, и в результатах приводятся значения NULL.

Мой вариант показан частично ниже - В частности, такие значения, как MatchStatus и ключ / значения в разделе «Переменные», которые мне интересны для извлечения.

Спасибо за любые полезные предложения.

enter image description here

1 Ответ

1 голос
/ 15 февраля 2020

Описанная JSON имеет простую структуру, похожую на траекторию, с объектами на разных уровнях (и без массивов).

За Документация полуструктурированных данных Snowflake , используйте точечную запись чтобы извлечь значение по (плоско вложенному) пути:

Insert a colon : between the VARIANT column name
and any first-level element: <column>:<level1_element>.

Use dot notation to traverse a path in a JSON object:
<column>:<level1_element>.<level2_element>.<level3_element>.

Примером может быть (обратите внимание на использование точек в третьей и четвертой строках):

SELECT
  badminton_odds:Id as id,
  badminton_odds:PricingRequest.MatchStatus as match_status,
  badminton_odds:PricingRequest.Variables.Dispersion as var_dispersion
FROM odds_table

You не требуется FLATTEN для простого извлечения единственного значения. Используйте FLATTEN, когда вам нужно разбить некоторые рядные данные на несколько строк (например, в случае массивов).

Например, если описанный JSON в вопросе о том, как выглядит один элемент массива длинный массив таких объектов, вы можете использовать FLATTEN, чтобы сначала разбить весь массив на строки, а затем применить извлечение стиля пути, чтобы извлечь значение из каждой строки.

...