数仓 SQL 函数对照

首页 / JSON

GET_JSON_OBJECT 提取 JSON 字段

GET_JSON_OBJECT 按 JSON 路径从字符串中取值。各引擎的函数名、返回类型和路径规则差别较大,是迁移时最容易出错的函数之一。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 GET_JSON_OBJECT(json, json_path) 返回 STRING,路径以 $ 开头,不支持正则。转义行为受 odps.sql.udf.getjsonobj.new 控制。 官方文档
Hologres 支持 GET_JSON_OBJECT(json, json_path) 属于 hive_compatible 扩展,使用前需要先执行 CREATE EXTENSION。 官方文档
StarRocks 支持 get_json_object(json_str, json_path) 文档中 get_json_string 和 get_json_object 是同一条目,返回字符串。需要保留 JSON 类型时用 json_query 或箭头操作符。 官方文档
Doris 需改写 GET_JSON_STRING(json_str, json_path) 路径以 $ 开头,不能包含双引号和方括号字符,含点号的键要用双引号括起来。官方建议改用 jsonb 类型和 jsonb_extract 系列函数。 官方文档
Hive 支持 get_json_object(json_string, path) 官方文档
Spark SQL 支持 get_json_object(json_txt, path) 从 Spark 1.5.0 起提供。 官方文档
Flink SQL 需改写 JSON_VALUE(json, path) 提取 JSON 中的标量值,可以用 RETURNING 子句指定返回类型。 官方文档

迁移注意事项

示例

从订单扩展字段中取城市

MaxCompute
SELECT GET_JSON_OBJECT(ext, '$.city') AS city FROM orders;
Hologres
CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA public;
SELECT GET_JSON_OBJECT(ext, '$.city') AS city FROM orders;
StarRocks
SELECT get_json_string(ext, '$.city') AS city FROM orders;
Doris
SELECT GET_JSON_STRING(ext, '$.city') AS city FROM orders;
Flink SQL
SELECT JSON_VALUE(ext, '$.city') AS city FROM orders;

最后核对日期: