Metabase中提取JSON字段outgoing冒号后对应值的SQL查询需求
在Metabase中提取JSON字段中的值
针对你数据表中outgoing字段的JSON结构(键名不固定,有普通名称和old.前缀两种情况),可以根据底层数据库类型选择以下方法提取冒号后的值:
底层为PostgreSQL时
直接用PostgreSQL的JSON函数遍历键值对,不管键名是什么都能拿到对应值:
SELECT id, status, (SELECT value FROM json_each_text(outgoing::json)) AS outgoing_value FROM 你的表名;
说明:outgoing::json将字符串类型的字段转为JSON类型,json_each_text遍历所有键值对并取出value部分,就是你要的processing、cancelled这类值。
底层为MySQL时
通过获取键名再拼接路径提取值:
SELECT id, status, JSON_UNQUOTE( JSON_EXTRACT(outgoing, CONCAT('$.', JSON_UNQUOTE(JSON_KEYS(outgoing)))) ) AS outgoing_value FROM 你的表名;
说明:JSON_KEYS(outgoing)获取JSON里的唯一键名,拼接成$.键名的路径后,用JSON_EXTRACT提取值,最后JSON_UNQUOTE去掉值的引号。
用Metabase原生自定义字段(无需写SQL)
在Metabase的可视化界面中添加自定义字段,根据数据库选择对应表达式:
- 适配MySQL:
unquote(json_extract(outgoing, concat('$.', json_keys(outgoing))))
- 适配PostgreSQL:
json_extract_path_text(outgoing::json, json_object_keys(outgoing::json))
内容的提问来源于stack exchange,提问作者siraug22
相关产品推荐
相关产品推荐

