如何在Snowflake中解析VARCHAR类型JSON数组提取lfd字段值
报错原因
GET()函数要求入参的JSON对象/数组必须是Snowflake的VARIANT结构化类型,你的col1是VARCHAR类型存储的纯文本JSON,没有经过结构化解析,直接传入字符串类型给GET()就会触发参数类型不匹配的报错。
正确提取方案
提取数组第一个元素的lfd字段
先通过PARSE_JSON()将VARCHAR类型的JSON文本显式转换为VARIANT类型,再做路径提取即可,两种常用写法:
- 基于
json_extract_path_text的兼容写法:
select col1, json_extract_path_text(parse_json(col1), '0:lfd') as lfd_value from your_table;
- 基于Snowflake原生路径运算符的简洁写法(性能更优):
select col1, parse_json(col1)[0]:lfd::string as lfd_value from your_table;
提取数组内所有元素携带的lfd字段
如果数组包含多个元素、且每个元素都可能存在lfd字段,可以用LATERAL FLATTEN把JSON数组打平成多行,自动过滤掉不带lfd字段的元素(比如你示例中第二个数组元素就没有lfd属性):
select col1, arr_element.value:lfd::string as lfd_value from your_table, lateral flatten(input => parse_json(col1)) arr_element where arr_element.value:lfd is not null;
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

