首页 / Doris
Doris 函数写法
Doris 常用函数的写法和注意事项,以及迁移到其他数仓引擎时需要改写的地方。
| 函数 | 用途 | 支持 | 写法 | 说明 |
|---|---|---|---|---|
| COLLECT_LIST | 聚合为数组 | 支持 | COLLECT_LIST(expr[, max_size]) |
别名 GROUP_ARRAY,会丢弃 NULL,max_size 限制数组长度。 |
| COLLECT_SET | 去重聚合为数组 | 支持 | COLLECT_SET(expr[, max_size]) |
别名 GROUP_UNIQ_ARRAY。会过滤 NULL,max_size 限制数组长度。 |
| CONCAT | 字符串拼接 | 支持 | CONCAT(expr[, expr ...]) |
任一参数为 NULL 时返回 NULL。 |
| CONCAT_WS | 按分隔符拼接 | 支持 | CONCAT_WS(sep, str[, str]) |
也支持 CONCAT_WS(sep, array)。分隔符为 NULL 时返回 NULL,NULL 值会被跳过,空字符串不会。 |
| DATE_ADD | 日期加减 | 支持 | DATE_ADD(date, INTERVAL n DAY) |
别名有 days_add 和 adddate。单位支持 YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。 |
| DATE_FORMAT | 日期格式化 | 支持 | DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s') |
MySQL 风格格式符,%m 是月,%i 是分钟。文档还列出 yyyyMMdd、yyyy-MM-dd 和 yyyy-MM-dd HH:mm:ss 三种格式。结果超过 128 字节时返回 NULL。 |
| DATEDIFF | 日期差 | 支持 | DATEDIFF(expr1, expr2) |
结果为 expr1 减 expr2,按天计算。 |
| DATETRUNC | 日期截断 | 需改写 | DATE_TRUNC(datetime, 'month') |
文档列出两种参数顺序,示例都是日期在前。 |
| EXPLODE | 数组展开为多行 | 支持 | LATERAL VIEW EXPLODE(arr) t AS x |
通常配合 LATERAL VIEW 使用。EXPLODE 对空数组和 NULL 不输出行,EXPLODE_OUTER 会保留一行 NULL。 |
| FROM_UNIXTIME | 时间戳转日期 | 支持 | FROM_UNIXTIME(unix_timestamp[, string_format]) |
格式可以写 %Y-%m-%d %H:%i:%s,也可以写 yyyy-MM-dd HH:mm:ss。超出 0~32536771199 时返回 NULL。 |
| GET_JSON_OBJECT | 提取 JSON 字段 | 需改写 | GET_JSON_STRING(json_str, json_path) |
路径以 $ 开头,不能包含双引号和方括号字符,含点号的键要用双引号括起来。官方建议改用 jsonb 类型和 jsonb_extract 系列函数。 |
| IF | 条件判断 | 支持 | IF(condition, value_true, value_false_or_null) |
|
| MAX_PT | 取最新分区 | 不支持 | — | 在 Doris 官方文档中搜索不到 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。 |
| NVL | 空值替换 | 支持 | NVL(expr1, expr2) |
NVL 是 IFNULL 的别名。expr1 不为 NULL 时返回 expr1,否则返回 expr2。 |
| SPLIT | 字符串拆分 | 需改写 | SPLIT_BY_STRING(str, separator) |
返回字符串数组,任一参数为 NULL 时返回 NULL。分隔符为空字符串时按字节拆分。 |
| SUBSTR | 截取子串 | 支持 | SUBSTRING(str, pos[, len]) |
别名 SUBSTR。从 1 开始计数,负数从末尾倒数,pos 为 0 或超出长度时返回空字符串,任一参数为 NULL 时返回 NULL。 |
| TO_DATE | 字符串转日期 | 需改写 | str_to_date(str, format) |
Doris 的 TO_DATE 只接受 DATETIME 并取日期部分。按格式解析用 STR_TO_DATE,返回 DATETIME,也接受 yyyyMMdd 等三种格式。 |
| WM_CONCAT | 分组拼接字符串 | 需改写 | GROUP_CONCAT([DISTINCT] str[, sep] [ORDER BY ...]) |
分隔符是第二个参数,默认是逗号加空格。DISTINCT 与 ORDER BY 同时使用从 2.1.6 起支持。 |