SQL 方言通

首页 / 工具 / 迁移清单 / Spark SQL → MaxCompute

Spark SQL 迁移到 MaxCompute 的函数改写清单

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

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

需要改写的函数

函数Spark SQL 写法MaxCompute 写法MaxCompute 说明
APPROX_COUNT_DISTINCTapprox_count_distinct(expr[, relativeSD])别名 APPROX_DISTINCT(colname)MaxCompute 2.0 扩展函数,返回 BIGINT,文档写明会有 5% 的误差。
DATEADDts + INTERVAL n HOUR支持 DATEADD(date, delta, datepart)datepart 必须是常量,可选 yyyy、q、mm、week、dd、hh、mi、ss、ff3 等。返回类型与 date 相同。date 为 NULL 时报错,delta 或 datepart 为 NULL 时返回 NULL。2.0 数据类型版本下,字符串要先 CAST 成 DATETIME。
DATETRUNCdate_trunc('MONTH', ts)支持 DATETRUNC(date, date_part)返回类型与输入相同。单位支持 yyyy、q、mm、week、isoweek、dd、hh、mi、ss、ff3,week 默认从周一开始,也可以写 week(sunday)。
GETDATEcurrent_timestamp() 或 now()支持 GETDATE()返回 DATETIME,以东八区时间为标准。同一条 SQL 中总是返回固定值,精度到秒;开启 2.0 数据类型后精度到毫秒。
WM_CONCATstring_agg(expr[, delimiter]) WITHIN GROUP (ORDER BY ...)支持 WM_CONCAT(separator, colname)分隔符必须是常量且写在前面。支持 DISTINCT 和 WITHIN GROUP (ORDER BY ...),值为 NULL 的行不参与计算。

迁移注意事项

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

APPROX_COUNT_DISTINCT 近似去重计数

DATEADD 按单位加减日期

DATETRUNC 日期截断

GETDATE 获取当前时间

WM_CONCAT 分组拼接字符串

可以直接用的函数

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

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