提问人:Yousuf Sultan 提问时间:11/16/2023 最后编辑:Yousuf Sultan 更新时间:11/18/2023 访问量:31
无法从 Snowflake 中的 JSON 中提取数据
Unable to extract data from JSON in Snowflake
问:
我有一个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
cat 和 cat1 的结果都是 NULL
答:
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
酷戴夫。这完全符合我的期望。
评论