SQL 方言通

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

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

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

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

需要改写的函数

函数MaxCompute 写法Spark SQL 写法Spark SQL 说明
APPROX_COUNT_DISTINCTAPPROX_DISTINCT(colname)支持 approx_count_distinct(expr[, relativeSD])Spark 1.6.0 起提供,基于 HyperLogLog++。relativeSD 是允许的最大相对标准差。
DATEADDDATEADD(date, delta, datepart)需改写 ts + INTERVAL n HOURSpark 3.4.0 起有 dateadd(start_date, num_days),但只能加天数,没有单位参数。按小时、月等单位加减用 INTERVAL 字面量,按月也可以用 add_months。
DATETRUNCDATETRUNC(date, date_part)需改写 date_trunc('MONTH', ts)date_trunc 从 2.3.0 起提供,单位在前,返回 timestamp。只需要日期时可以用 trunc(date, fmt)。
GETDATEGETDATE()别名 current_timestamp() 或 now()返回查询开始执行时的时间戳,同一查询中各次调用结果相同。3.4.0 起还有不带时区的 localtimestamp()。
MAX_PTMAX_PT(table_full_name)不支持 函数索引中没有 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。
WM_CONCATWM_CONCAT(separator, colname)需改写 string_agg(expr[, delimiter]) WITHIN GROUP (ORDER BY ...)string_agg 和 listagg 从 Spark 4.0.0 起提供。更早的版本用 concat_ws(',', collect_list(expr))。

迁移注意事项

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

APPROX_COUNT_DISTINCT 近似去重计数

DATEADD 按单位加减日期

DATETRUNC 日期截断

GETDATE 获取当前时间

MAX_PT 取最新分区

WM_CONCAT 分组拼接字符串

可以直接用的函数

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

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