You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive SQL中map(varchar, array(varchar))类型JSON字段筛选color为blue的方法

Hive SQL筛选指定数组包含特定值的实现方案

场景1:已将JSON字符串解析为map(varchar, array(varchar))类型字段

假设解析后的map类型字段名为ext_info,直接用Hive内置array_contains函数判断即可:

SELECT * 
FROM 你的表名
WHERE array_contains(ext_info['color'], 'blue');

逻辑说明:ext_info['color']会取出map中key为color对应的数组值,array_contains函数会判断该数组是否包含目标值blue,返回true的记录即为符合要求的结果。

场景2:未解析JSON,直接基于原始JSON字符串字段查询

如果还没做JSON解析,原始JSON字段名为json_str,分版本处理:

Hive 2.3及以上版本(支持from_json函数)

直接用from_json先把JSON字符串转成指定结构的map,再做判断:

SELECT * 
FROM 你的表名
WHERE array_contains(
    from_json(json_str, 'map<string, array<string>>')['color'],
    'blue'
);

Hive 2.3以下版本(无from_json函数)

用字符串处理函数解析出color对应的数组再判断:

SELECT * 
FROM 你的表名
WHERE array_contains(
    split(regexp_replace(get_json_object(json_str, '$.color'), '\\[|\\]|"', ''), ','),
    'blue'
);

注意事项

  • 如果map中可能不存在color这个key,建议先加非空判断避免匹配异常:WHERE ext_info['color'] IS NOT NULL AND array_contains(ext_info['color'], 'blue')
  • array_contains默认是大小写敏感匹配,如果需要忽略大小写,可以先把数组元素和目标值统一转成大写/小写再判断

内容的提问来源于stack exchange,提问作者CuriousCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:24:02