ClickHouse中JSON字段不存在的键返回0,如何过滤出指定键存在的记录?
解决ClickHouse JSON字段过滤存在指定键记录的问题
在ClickHouse v23中,要过滤出JSON字段中真实存在指定键的记录,可通过以下方式实现:
核心思路
利用has函数判断JSON字段是否包含目标键,再通过WHERE子句过滤出符合条件的记录,最后提取对应键的值。
具体查询语句
结合你插入的数据,若需求是过滤出存在d键的记录并获取其对应的值,执行以下查询:
SELECT b.d FROM tb WHERE has(b, 'd')
执行后得到结果:
┌─b.d─┐ │ 1 │ └─────┘
补充说明
has(json_column, 'key'):专门用于检查JSON类型字段中是否存在指定键,存在返回1,不存在返回0。- 若你实际需要的是保留存在
d键的记录但提取b.c的值,可执行:
SELECT b.c FROM tb WHERE has(b, 'd')
但该记录本身无c键,结果会返回0,与你给出的预期结果不符,推测你可能存在笔误,实际目标应为提取d键的值。
内容的提问来源于stack exchange,提问作者user2680769
相关产品推荐
相关产品推荐

