SQL 方言通

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

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

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

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

需要改写的函数

函数StarRocks 写法Doris 写法Doris 说明
ADD_MONTHSadd_months(date, months)需改写 MONTHS_ADD(date, nums)文档没有列出 ADD_MONTHS 别名。返回类型与输入相同,2020-01-31 加 1 个月得到 2020-02-29。
COLLECT_LISTARRAY_AGG(col [ORDER BY ...])支持 COLLECT_LIST(expr[, max_size])别名 GROUP_ARRAY,会丢弃 NULL,max_size 限制数组长度。
COLLECT_SETARRAY_AGG(DISTINCT col)支持 COLLECT_SET(expr[, max_size])别名 GROUP_UNIQ_ARRAY。会过滤 NULL,max_size 限制数组长度。
EXPLODEFROM t, UNNEST(arr) AS u(x)支持 LATERAL VIEW EXPLODE(arr) t AS x通常配合 LATERAL VIEW 使用。EXPLODE 对空数组和 NULL 不输出行,EXPLODE_OUTER 会保留一行 NULL。
FROM_JSONparse_json(str)需改写 JSON_PARSE(json_str)没有 FROM_JSON。JSON_PARSE 遇到非法 JSON 会报错;希望返回 NULL 时用 JSON_PARSE_ERROR_TO_NULL。取字段用 JSON_EXTRACT 系列函数。
GET_JSON_OBJECTget_json_object(json_str, json_path)需改写 GET_JSON_STRING(json_str, json_path)路径以 $ 开头,不能包含双引号和方括号字符,含点号的键要用双引号括起来。官方建议改用 jsonb 类型和 jsonb_extract 系列函数。
MONTHS_BETWEENmonths_diff(expr1, expr2)支持 MONTHS_BETWEEN(end, start[, round_type])与 Oracle 的 MONTHS_BETWEEN 一致。时间部分不参与计算;两个日期同为月末或日相同时返回整数。round_type 为 true 时保留 8 位小数。
NVLIFNULL(expr1, expr2)支持 NVL(expr1, expr2)NVL 是 IFNULL 的别名。expr1 不为 NULL 时返回 expr1,否则返回 expr2。
SIZEarray_length(arr) / map_size(m)别名 ARRAY_SIZE(arr) / MAP_SIZE(m)数组用 ARRAY_SIZE,NULL 元素也计入,输入为 NULL 时返回 NULL。Map 用 MAP_SIZE,NULL 键和值都计入。
SPLITsplit(content, delimiter)需改写 SPLIT_BY_STRING(str, separator)返回字符串数组,任一参数为 NULL 时返回 NULL。分隔符为空字符串时按字节拆分。
SUBSTRsubstr(str, pos[, len])支持 SUBSTRING(str, pos[, len])别名 SUBSTR。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串,任一参数为 NULL 时返回 NULL。

迁移注意事项

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

ADD_MONTHS 按月加减

COLLECT_LIST 聚合为数组

COLLECT_SET 去重聚合为数组

EXPLODE 数组展开为多行

FROM_JSON 按 schema 解析 JSON

GET_JSON_OBJECT 提取 JSON 字段

MONTHS_BETWEEN 相差月数

NVL 空值替换

SIZE 数组和 Map 元素个数

SUBSTR 截取子串

可以直接用的函数

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

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