SQL 方言通

首页 / 文章 /

Hive 迁移到 StarRocks:58 个常用函数的改写清单

把 SQL 从 Hive 迁移到 StarRocks,表结构和语法通常一次就能改完,函数却容易漏改。例如 Hive 的 NVL,在 StarRocks 中要写成 IFNULL。同名函数也可能在参数顺序、NULL 处理或返回类型上不一样。

本文整理了 58 个数仓常用函数,其中 19 个需要改写,1 个在 StarRocks 中没有对应函数。另有 4 个函数在 Hive 中只能用标准 SQL 绕过,到 StarRocks 可以改用原生函数。每条结论都附有官方文档出处,最近一次核对是 2026-10-21。

需要改写的函数

函数 Hive 写法 StarRocks 写法
ARRAY_DISTINCT collect_set(x) array_distinct(array)
ARRAY_JOIN concat_ws(SEP, array<string>) array_join(array, sep[, null_replace_str])
COLLECT_LIST collect_list(col) ARRAY_AGG(col [ORDER BY ...])
COLLECT_SET collect_set(col) ARRAY_AGG(DISTINCT col)
DATEADD date_add(startdate, days) / add_months(startdate, n) TIMESTAMPADD(unit, n, datetime_expr)
DATETRUNC trunc(date, 'MM') date_trunc('month', datetime)
EXPLODE explode(array | map) FROM t, UNNEST(arr) AS u(x)
FROM_JSON json_tuple(jsonStr, k1, k2, ...) parse_json(str)
GETDATE current_timestamp NOW([p])
LENGTH length(string A) char_length(str)
MONTHS_BETWEEN months_between(date1, date2) months_diff(expr1, expr2)
NVL NVL(value, default_value) IFNULL(expr1, expr2)
POSEXPLODE posexplode(ARRAY<T> a) 无对应函数
RLIKE A RLIKE B regexp(expr, pattern)
SIZE size(array_or_map) array_length(arr) / map_size(m)
SORT_ARRAY sort_array(Array<T>) array_sort(array)
SPLIT_PART split(str, pat)[n - 1] split_part(content, delimiter, field)
TO_DATE to_date(from_unixtime(unix_timestamp(str, pattern))) str_to_date(str, format)
WM_CONCAT concat_ws(',', collect_list(col)) GROUP_CONCAT([DISTINCT] expr [ORDER BY ...] [SEPARATOR sep])

StarRocks 写法说明

可以改用原生函数

下面这些函数在 Hive 中没有原生实现,一般用标准 SQL 绕过。原写法在 StarRocks 中仍然能运行,不改也可以。

函数 Hive 写法 StarRocks 写法
ANY_VALUE max(col) ANY_VALUE(expr)
APPROX_COUNT_DISTINCT COUNT(DISTINCT col) APPROX_COUNT_DISTINCT(expr)
DAYOFWEEK extract(dayofweek FROM ts) dayofweek(date)
MAX_BY ROW_NUMBER() OVER (PARTITION BY ... ORDER BY y DESC) = 1 max_by(x, y)

迁移注意事项

ARRAY_DISTINCT 数组去重

ARRAY_JOIN 数组拼接成字符串

COLLECT_LIST 聚合为数组

COLLECT_SET 去重聚合为数组

DATEADD 按单位加减日期

DATETRUNC 日期截断

EXPLODE 数组展开为多行

FROM_JSON 按 schema 解析 JSON

GETDATE 获取当前时间

LENGTH 字符串长度

MONTHS_BETWEEN 相差月数

NVL 空值替换

POSEXPLODE 带下标展开数组

RLIKE 正则匹配判断

SIZE 数组和 Map 元素个数

SORT_ARRAY 数组排序

SPLIT_PART 按分隔符取第 N 段

TO_DATE 字符串转日期

WM_CONCAT 分组拼接字符串

APPROX_COUNT_DISTINCT 近似去重计数

DAYOFWEEK 星期几

MAX_BY 取最大值对应的列

写法相同的函数

以下 35 个函数在两个引擎中写法相同,可以直接迁移。参数和边界行为的细节见各函数的对照页。

ADD_MONTHS、ARRAY_CONTAINS、COALESCE、CONCAT、CONCAT_WS、DATE_ADD、DATE_FORMAT、DATE_SUB、DATEDIFF、DECODE、FIRST_VALUE、FROM_UNIXTIME、GET_JSON_OBJECT、GREATEST、IF、INSTR、LAG、LAST_DAY、LAST_VALUE、LEAD、LPAD、MD5、NULLIF、PERCENTILE_APPROX、REGEXP_EXTRACT、REGEXP_REPLACE、REPLACE、ROW_NUMBER、SPLIT、STR_TO_MAP、SUBSTR、SUBSTRING_INDEX、TO_CHAR、UNIX_TIMESTAMP、WEEKOFYEAR

说明

数据来自开源数据集 sql-dialect-functions(CC BY 4.0)。完整对照见在线清单,现有 SQL 可以用迁移检查器检查。