无法从 Snowflake 中的 JSON 中提取数据

Unable to extract data from JSON in Snowflake

提问人:Yousuf Sultan 提问时间:11/16/2023 最后编辑:Yousuf Sultan 更新时间:11/18/2023 访问量:31

问:

我有一个JSON数据,如下所示

    [
  "{\"category\":\"a\"}",
  "{\"category\":\"b\"}",
  "{\"category\":\"c\"}",
  "{\"category\":\"d\"}",
  "{\"category\":\"e\"}",
  "{\"category\":\"f\"}",
  "{\"category\":\"g\"}",
  "{\"category\":\"h\"}",
  "{\"category\":\"i\"}",
  "{\"category\":\"j\"}",
  "{\"category\":\"k\"}",
  "{\"category\":\"l\"}",
  "{\"category\":\"m\"}",
  "{\"category\":\"n\"}",
  "{\"category\":\"o\"}",
  "{\"category\":\"p\"}",
  "{\"category\":\"q\"}"
]

我正在使用以下查询,我得到的结果是 NULL

SELECT DISTINCT T_ID,
                ITC,
                JSON_EXTRACT_PATH_TEXT(REPLACE(ITC,'\\',''), 'category') AS cat,
                prop.VALUE::string AS cat1
FROM MDCD.M.T01 a,
     LATERAL FLATTEN(input => a.ITC, outer => true) prop

catcat1 的结果都是 NULL

snowflake-cloud-data-platform json-extract

评论


答:

2赞 Dave Welden 11/16/2023 #1

不确定为什么 cat1 为 Null,但 JSON_EXTRACT_PATH_TEXT 返回 null,因为这是一个数组。您需要为其指定一个数组索引,以便在数组的该插槽中提取 JSON。

EDITED:包含平展中的索引列,以指定JSON_EXTRACT_PATH_TEXT的数组索引。

create or replace temporary table t0 (cat variant) as
select parse_json(column1) from values
('[{"category":"a"},  {"category":"b"},  {"category":"c"},  {"category":"d"},  {"category":"e"},  {"category":"f"},  {"category":"g"},  {"category":"h"},  {"category":"i"},  {"category":"j"},  {"category":"k"},  {"category":"l"},  {"category":"m"},  {"category":"n"},  {"category":"o"},  {"category":"p"},  {"category":"q"}]');

select 
json_extract_path_text(cat[index], 'category') as cat,
prop.value::string as cat1
from t0,
lateral flatten(input => t0.cat, outer => true) prop;
类别1
一个 {“类别”:“a”}
b {“类别”:“b”}
c {“类别”:“c”}
d {“类别”:“d”}
e {“类别”:“e”}
f {“类别”:“f”}
g {“类别”:“g”}
h {“类别”:“h”}
{“类别”:“我”}
j {“类别”:“j”}
k {“类别”:“k”}
l {“类别”:“l”}
m {“类别”:“m”}
n {“类别”:“n”}
o {“类别”:“o”}
p {“类别”:“p”}
q {“类别”:“q”}

评论

0赞 Yousuf Sultan 11/17/2023
谢谢戴夫。您的查询仅返回 1 条记录。但是,我希望记录数与编号相同。的基础 JSON 中的项。
1赞 Dave Welden 11/17/2023
上面的输出来自查询。每个类别 a-q 一行,使用 prop.value::string 作为横向展平的 cat1。JSON_EXTRACT_PATH_TEXT不返回不同的类别,因为我只指定了第一个数组元素来证明它是一个数组。
0赞 Dave Welden 11/18/2023
上面的查询返回 17 行。它已更新为使用横向展平中的索引列从数组中进行选择。
0赞 Yousuf Sultan 11/20/2023
酷戴夫。这完全符合我的期望。