Snowflake SQL: как перебирать массив с объектами JSON, чтобы найти элемент, соответствующий условию

#sql #json #snowflake-cloud-data-platform #flatten

#sql #json #snowflake-cloud-data-platform #сгладить

Вопрос:

Ломаю голову над этим. В Snowflake мое поле city_info выглядит так (для 3 выборочных записей)

 [{"name": "age", "content": 35}, {"name": "city", "content": "Chicago"}]
[{"name": "age", "content": 20}, {"name": "city", "content": "Boston"}]
[{"name": "city", "content": "New York"}, {"name": "age", "content": 42}]
 

Я пытаюсь извлечь столбец city из этого

 Chicago
Boston
New York
 

Я попытался сгладить это

 select *
from lateral flatten(input =>
  select city_info::VARIANT as event
  from data
)
 

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

Если я попытаюсь сделать это для 3 строк, он скажет мне subquery returns more than one row.

Любая помощь приветствуется! Крис

Ответ №1:

Вы могли бы записать его как:

 SELECT value:content::string AS city_name
FROM tab,
LATERAL FLATTEN(input => tab.city_info)
WHERE value:name::string = 'city'