SQL 方言通

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

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

从 MaxCompute 迁移到 Doris 时,在 MaxCompute 有对应写法的 45 个常用函数中,17 个需要改写(其中 1 个在 Doris 没有对应函数)。逐个列出两边写法和注意事项。

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

需要改写的函数

函数MaxCompute 写法Doris 写法Doris 说明
ADD_MONTHSADD_MONTHS(startdate, num_months)需改写 MONTHS_ADD(date, nums)文档没有列出 ADD_MONTHS 别名。返回类型与输入相同,2020-01-31 加 1 个月得到 2020-02-29。
APPROX_COUNT_DISTINCTAPPROX_DISTINCT(colname)支持 APPROX_COUNT_DISTINCT(expr)别名是 NDV。基于 HyperLogLog,只统计非 NULL 值,返回 BIGINT。
DATEADDDATEADD(date, delta, datepart)需改写 TIMESTAMPADD(unit, n, datetime_expr)单位常用 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、YEAR。参数无效时返回 NULL。也可以写 DATE_ADD(dt, INTERVAL n unit)。
DATETRUNCDATETRUNC(date, date_part)需改写 DATE_TRUNC(datetime, 'month')文档列出两种参数顺序,示例都是日期在前。
DECODEDECODE(expression, search, result[, search, result]...[, default])需改写 CASE expr WHEN search THEN result ... ELSE default END条件函数中没有 DECODE,用 CASE 改写。
FROM_JSONfrom_json(jsonStr, schema)需改写 JSON_PARSE(json_str)没有 FROM_JSON。JSON_PARSE 遇到非法 JSON 会报错;希望返回 NULL 时用 JSON_PARSE_ERROR_TO_NULL。取字段用 JSON_EXTRACT 系列函数。
GET_JSON_OBJECTGET_JSON_OBJECT(json, json_path)需改写 GET_JSON_STRING(json_str, json_path)路径以 $ 开头,不能包含双引号和方括号字符,含点号的键要用双引号括起来。官方建议改用 jsonb 类型和 jsonb_extract 系列函数。
GETDATEGETDATE()别名 NOW([precision])别名是 current_timestamp(),返回 DATETIME。precision 取 0~6,默认 0,超出范围时报错。
LENGTHLENGTH(str)需改写 CHAR_LENGTH(str)LENGTH 返回 UTF-8 编码下的字节数,别名 OCTET_LENGTH。按字符计数要用 CHAR_LENGTH,别名 CHARACTER_LENGTH。
MAX_PTMAX_PT(table_full_name)不支持 在 Doris 官方文档中搜索不到 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。
SIZESIZE(array_or_map)别名 ARRAY_SIZE(arr) / MAP_SIZE(m)数组用 ARRAY_SIZE,NULL 元素也计入,输入为 NULL 时返回 NULL。Map 用 MAP_SIZE,NULL 键和值都计入。
SORT_ARRAYSORT_ARRAY(a[, isasc])需改写 ARRAY_SORT(arr)升序排列,NULL 放在开头;降序用 ARRAY_REVERSE_SORT。也可以传 Lambda 表达式自定义排序。
SPLITSPLIT(source, delimiter[, trimTailEmpty])需改写 SPLIT_BY_STRING(str, separator)返回字符串数组,任一参数为 NULL 时返回 NULL。分隔符为空字符串时按字节拆分。
SUBSTRSUBSTR(str, start_position[, length])支持 SUBSTRING(str, pos[, len])别名 SUBSTR。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串,任一参数为 NULL 时返回 NULL。
TO_CHARTO_CHAR(date, format)需改写 DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s')没有 TO_CHAR。DATE_FORMAT 使用 MySQL 风格格式符。
TO_DATETO_DATE(date_str[, format])需改写 str_to_date(str, format)Doris 的 TO_DATE 只接受 DATETIME 并取日期部分。按格式解析用 STR_TO_DATE,返回 DATETIME,也接受 yyyyMMdd 等三种格式。
WM_CONCATWM_CONCAT(separator, colname)需改写 GROUP_CONCAT([DISTINCT] str[, sep] [ORDER BY ...])分隔符是第二个参数,默认是逗号加空格。DISTINCT 与 ORDER BY 同时使用从 2.1.6 起支持。

迁移注意事项

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

ADD_MONTHS 按月加减

APPROX_COUNT_DISTINCT 近似去重计数

DATEADD 按单位加减日期

DATETRUNC 日期截断

DECODE 多值匹配

FROM_JSON 按 schema 解析 JSON

GET_JSON_OBJECT 提取 JSON 字段

GETDATE 获取当前时间

LENGTH 字符串长度

MAX_PT 取最新分区

SIZE 数组和 Map 元素个数

SORT_ARRAY 数组排序

SPLIT 字符串拆分

SUBSTR 截取子串

TO_CHAR 日期转字符串

TO_DATE 字符串转日期

WM_CONCAT 分组拼接字符串

可以直接用的函数

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

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