首页 / MaxCompute
MaxCompute 函数写法
MaxCompute 常用函数的写法和注意事项,以及迁移到其他数仓引擎时需要改写的地方。
| 函数 | 用途 | 支持 | 写法 | 说明 |
|---|---|---|---|---|
| COLLECT_LIST | 聚合为数组 | 支持 | COLLECT_LIST(colname) |
值为 NULL 的行不参与计算,结果不保证顺序。官方建议拼接字符串时改用 WM_CONCAT。 |
| COLLECT_SET | 去重聚合为数组 | 支持 | COLLECT_SET(colname) |
返回去重后的数组,值为 NULL 的行不参与计算。 |
| CONCAT | 字符串拼接 | 支持 | CONCAT(str1, str2[, ...]) |
任一参数为 NULL 或没有参数时返回 NULL。也可以拼接数组,此时任一数组为 NULL 返回 NULL。 |
| CONCAT_WS | 按分隔符拼接 | 支持 | CONCAT_WS(separator, str1, str2[, ...]) |
也支持 CONCAT_WS(separator, array)。没有参数或任一参数为 NULL 时返回 NULL,不会跳过 NULL。 |
| DATE_ADD | 日期加减 | 支持 | DATE_ADD(startdate, delta) |
按天加减,delta 为负数时表示减。返回 DATE,输入的时间部分会被丢弃。需要按月、小时等单位加减时用 DATEADD。 |
| DATE_FORMAT | 日期格式化 | 支持 | DATE_FORMAT(date, format) |
返回 STRING。默认模式下分钟写 mi,写 mm 会输出月份;开启 Hive 兼容模式后分钟写 mm,写 mi 返回 NULL。DATE 和 STRING 输入需要开启 Hive 兼容模式。 |
| DATEDIFF | 日期差 | 支持 | DATEDIFF(end_date, start_date[, date_part]) |
结果为 end_date 减 start_date。不传 date_part 时按天计算并返回 INT,传入时返回 BIGINT。date_part 支持 yyyy、mm、dd、hh、mi、ss、ff3 等。 |
| DATETRUNC | 日期截断 | 支持 | DATETRUNC(date, date_part) |
返回类型与输入相同。单位支持 yyyy、q、mm、week、isoweek、dd、hh、mi、ss、ff3,week 默认从周一开始,也可以写 week(sunday)。 |
| EXPLODE | 数组展开为多行 | 支持 | EXPLODE(var) |
支持 array 和 map。同一个 SELECT 只能有一个 EXPLODE,也不能同时选其他列,不能与 GROUP BY 等一起使用。数组为 NULL 时不输出行。 |
| FROM_UNIXTIME | 时间戳转日期 | 支持 | FROM_UNIXTIME(unixtime) |
输入为秒,返回 DATETIME。默认只接受一个参数;开启 Hive 兼容模式后可以传第二个参数指定格式。 |
| GET_JSON_OBJECT | 提取 JSON 字段 | 支持 | GET_JSON_OBJECT(json, json_path) |
返回 STRING,路径以 $ 开头,不支持正则。转义行为受 odps.sql.udf.getjsonobj.new 控制。 |
| IF | 条件判断 | 支持 | IF(testCondition, valueTrue, valueFalseOrNull) |
条件为 NULL 时按 FALSE 处理,返回第三个参数。第二、三个参数的类型必须一致。 |
| MAX_PT | 取最新分区 | 支持 | MAX_PT(table_full_name) |
按字母顺序返回有数据的最大一级分区,只看一级分区。OSS 外部表也支持。所有分区都为空时会报错。 |
| NVL | 空值替换 | 支持 | NVL(value, default_value) |
文档要求两个参数的数据类型一致。 |
| SPLIT | 字符串拆分 | 支持 | SPLIT(source, delimiter[, trimTailEmpty]) |
返回 ARRAY<STRING>。分隔符支持正则表达式。trimTailEmpty 默认为 true,会去掉末尾的空字符串。任一参数为 NULL 时返回 NULL。 |
| SUBSTR | 截取子串 | 支持 | SUBSTR(str, start_position[, length]) |
从 1 开始计数,负数从末尾倒数。start_position 为 0 时返回空字符串;Hive 兼容模式和 BigQuery 兼容模式下按 1 处理。length 为 0 或负数时返回空字符串。 |
| TO_DATE | 字符串转日期 | 支持 | TO_DATE(date_str[, format]) |
不传 format 时返回 DATE,传入 format 时返回 DATETIME。格式符为 yyyy、mm、dd、hh、mi、ss、ff3,format 必须包含 yyyy。 |
| WM_CONCAT | 分组拼接字符串 | 支持 | WM_CONCAT(separator, colname) |
分隔符必须是常量且写在前面。支持 DISTINCT 和 WITHIN GROUP (ORDER BY ...),值为 NULL 的行不参与计算。 |