Snowflake表json列不含Ready_前缀键的记录计数及按部门分组问题
Snowflake JSON指定前缀键不存在记录统计方案
实现逻辑
- 用
OBJECT_KEYS()内置函数提取DETAILS列所有顶层JSON键,返回数组格式 - 通过
FLATTEN()表函数拆分数组为单键行,判断是否存在以Ready_为前缀的键 - 过滤所有存在匹配键的记录后,按部门维度分组统计计数
正确查询语句
SELECT DEPARTMENT_NAME, COUNT(*) AS NO_READY_PREFIX_RECORD_COUNT FROM -- 替换为你的实际表名 YOUR_EMP_TABLE t WHERE -- 筛选不存在任何Ready_前缀键的记录 NOT EXISTS ( SELECT 1 FROM TABLE(FLATTEN(input => OBJECT_KEYS(t.DETAILS))) k WHERE STARTSWITH(k.value::STRING, 'Ready_') ) GROUP BY DEPARTMENT_NAME;
补充说明
如果你的业务场景中Ready_前缀的键可能出现在JSON的嵌套层级中,可将FLATTEN部分修改为递归模式:TABLE(FLATTEN(input => t.DETAILS, recursive => TRUE)),同时判断条件改为STARTSWITH(k.key::STRING, 'Ready_')即可。
之前的查询计数错误通常是两个原因导致:要么仅校验了部分指定的Ready_前缀键,遗漏了其他同前缀键;要么存在性判断逻辑写反,误将包含符合前缀键的记录也计入结果。
内容的提问来源于stack exchange,提问作者Kiara
相关产品推荐
相关产品推荐

