如何通过Phoenix查询HBase表中JSON字段指定键并统计
解决方案
Phoenix 4.10及以上版本自带JSON字段解析能力,可直接提取REQUEST列中的merchant值并分组统计,具体实现如下:
推荐查询语句(依赖JSON函数)
SELECT JSON_EXTRACT_STRING(REQUEST, '$.template.merchant') AS merchant, COUNT(*) AS count FROM 你的表名 -- 替换为实际表名 WHERE JSON_EXTRACT_STRING(REQUEST, '$.template.merchant') IS NOT NULL GROUP BY JSON_EXTRACT_STRING(REQUEST, '$.template.merchant')
语句说明
JSON_EXTRACT_STRING(REQUEST, '$.template.merchant'):根据JSON路径提取目标值,这里的路径对应你提供的JSON结构——外层template对象下的merchant键。GROUP BY+COUNT(*):按提取出的merchant唯一值分组,统计每个值的出现次数。WHERE子句:可选,用于过滤无merchant字段的记录,避免统计NULL值。
低版本Phoenix兼容方案(字符串截取)
如果你的Phoenix版本低于4.10,不支持JSON函数,可通过字符串截取实现(需保证JSON格式稳定,merchant值无嵌套双引号):
SELECT SUBSTR(REQUEST, INSTR(REQUEST, '"merchant":"') + 12, INSTR(REQUEST, '"', INSTR(REQUEST, '"merchant":"') + 12) - (INSTR(REQUEST, '"merchant":"') + 12)) AS merchant, COUNT(*) AS count FROM 你的表名 WHERE REQUEST LIKE '%"merchant":"%' GROUP BY SUBSTR(REQUEST, INSTR(REQUEST, '"merchant":"') + 12, INSTR(REQUEST, '"', INSTR(REQUEST, '"merchant":"') + 12) - (INSTR(REQUEST, '"merchant":"') + 12))
内容的提问来源于stack exchange,提问作者Santhoshhadoop
相关产品推荐
相关产品推荐

