SQL 方言通

首页 / 工具 / 迁移清单 / Doris → StarRocks

Doris 迁移到 StarRocks 的函数改写清单

从 Doris 迁移到 StarRocks 时,在 Doris 有对应写法的 44 个常用函数中,11 个需要改写。逐个列出两边写法和注意事项。

需要改写的函数 · 迁移注意事项 · 可以直接用的函数 · 反向:StarRocks 迁移到 Doris

需要改写的函数

函数Doris 写法StarRocks 写法StarRocks 说明
ADD_MONTHSMONTHS_ADD(date, nums)支持 add_months(date, months)返回 DATETIME,DATE 输入也会转成 DATETIME。目标月份没有对应日期时返回当月最后一天,例如 2022-01-31 加 1 个月得到 2022-02-28。
COLLECT_LISTCOLLECT_LIST(expr[, max_size])需改写 ARRAY_AGG(col [ORDER BY ...])在 StarRocks 文档中搜索不到 COLLECT_LIST。ARRAY_AGG 会保留 NULL,3.0 起支持 ORDER BY 指定元素顺序。
COLLECT_SETCOLLECT_SET(expr[, max_size])需改写 ARRAY_AGG(DISTINCT col)在 StarRocks 文档中搜索不到 COLLECT_SET。ARRAY_AGG_DISTINCT 是 ARRAY_AGG(DISTINCT) 的别名。ARRAY_AGG 会保留 NULL。
EXPLODELATERAL VIEW EXPLODE(arr) t AS x需改写 FROM t, UNNEST(arr) AS u(x)UNNEST 是表函数,配合横向连接使用,不需要写 LATERAL。NULL 或空数组不输出行;3.2.7 起可以用 LEFT JOIN ... ON TRUE 保留这些行。
FROM_JSONJSON_PARSE(json_str)需改写 parse_json(str)没有 FROM_JSON。parse_json 返回 JSON 类型,而不是 STRUCT 或 MAP。字符串不是合法 JSON 时返回 NULL。取字段可以接 json_query 或 -> 运算符。
GET_JSON_OBJECTGET_JSON_STRING(json_str, json_path)支持 get_json_object(json_str, json_path)文档中 get_json_string 和 get_json_object 是同一条目,返回字符串。需要保留 JSON 类型时用 json_query 或箭头操作符。
MONTHS_BETWEENMONTHS_BETWEEN(end, start[, round_type])需改写 months_diff(expr1, expr2)函数列表中没有 MONTHS_BETWEEN。months_diff 返回 expr1 减 expr2 的月数,类型是 BIGINT,只精确到月;日期不存在时返回 NULL。
NVLNVL(expr1, expr2)需改写 IFNULL(expr1, expr2)条件函数列表中没有 NVL,只有 case、coalesce、if、ifnull 和 nullif。IFNULL 的结果类型与 expr1 一致。
SIZEARRAY_SIZE(arr) / MAP_SIZE(m)别名 array_length(arr) / map_size(m)数组用 array_length,别名 cardinality,3.0 起提供,NULL 元素也计入长度,输入为 NULL 时返回 NULL。Map 用 map_size,2.5 起提供,别名同样是 cardinality。
SPLITSPLIT_BY_STRING(str, separator)支持 split(content, delimiter)返回 ARRAY<VARCHAR>。分隔符为空字符串时按单个字符拆分。文档没有说明分隔符是否按正则处理。
SUBSTRSUBSTRING(str, pos[, len])支持 substr(str, pos[, len])substr 和 substring 是同一个函数。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串。

迁移注意事项

以下内容摘自各函数页中提到 Doris 或 StarRocks 的注意事项。

ADD_MONTHS 按月加减

COLLECT_LIST 聚合为数组

COLLECT_SET 去重聚合为数组

EXPLODE 数组展开为多行

FROM_JSON 按 schema 解析 JSON

GET_JSON_OBJECT 提取 JSON 字段

MONTHS_BETWEEN 相差月数

NVL 空值替换

SIZE 数组和 Map 元素个数

SUBSTR 截取子串

可以直接用的函数

下面 33 个函数在两个引擎中写法相同。参数、返回值和边界情况仍可能不同,点开函数页查看细节。

相关页面:Doris 函数写法 · StarRocks 函数写法 · 全部迁移清单 · 用 SQL 迁移检查器检查自己的 SQL