Snowflake中查询字典列表,提取key与val不相等的对应key值
Snowflake实现方案
你可以通过JSON数组打平+字段对比+分组聚合的逻辑实现需求,具体SQL如下:
WITH flattened_options AS ( -- 打平options数组,提取每个元素的key、val值 SELECT attrs, f.value:key::STRING AS option_key, f.value:val::STRING AS option_val FROM 你的实际表名, -- 替换为你自己的表名 LATERAL FLATTEN(input => options) AS f -- 如果options是字符串格式的JSON,上面一行改成 LATERAL FLATTEN(input => PARSE_JSON(options)) AS f ) -- 筛选key和val不等的记录,按attrs聚合结果 SELECT attrs, LISTAGG(option_key, ',') AS result FROM flattened_options WHERE option_key != option_val GROUP BY attrs;
逻辑说明
- 用
LATERAL FLATTEN函数将每行的options JSON数组拆分为多条记录,每条对应数组里的一个字典对象 - 提取每个字典的
key和val字段并转成字符串类型做等值判断 - 用
LISTAGG聚合符合条件的key值,如果一个attrs下有多个不匹配的key,会用逗号拼接返回,符合通用场景
你提供的示例数据执行以上SQL后,返回结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者1ksj8jdnu36flksf
相关产品推荐
相关产品推荐

