Presto中Map类型SQL语句失效求助,含JSON提取尝试失败情况
Presto SQL修复方案:JSON类型字段的条件统计
修复后的代码
SELECT city_id, value_map, SUM(CASE WHEN json_extract_scalar(value_map, '$.custom.rider.flexProductCell.cellIndex') IN ('0', '2') AND json_extract_scalar(value_map, '$.custom.rider.flexProductCell.keys.vehicleViewId') IN ('20054133', '20054595', '20055263') THEN 1 ELSE 0 END) AS top1_top3_product_count FROM rider.fact_rider_app_event GROUP BY city_id, value_map;
关键修复说明
- 原代码使用
map_value()函数失效,大概率是因为value_map是JSON字符串类型而非Presto原生MAP类型。Presto对JSON字符串和MAP类型的处理函数不通用。 - 改用
json_extract_scalar()函数:专门用于从JSON字符串中提取字符串/数字等标量值,路径语法必须以$开头,层级用.分隔,完全匹配你要提取的嵌套键路径。 - 若确认
value_map是MAP类型,先通过SELECT typeof(value_map) FROM rider.fact_rider_app_event LIMIT 1;验证字段类型,再检查键名是否完全匹配(比如大小写、特殊字符),此时可保留map_value()但需确保键无格式差异。
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

