内置函数

最近更新时间:2026-05-20 14:11:22

我的收藏
TCHouse-X 离线计算引擎深度兼容 Apache Spark 3.5.3,支持完整的 Spark SQL 内置函数库。用户可通过离线任务直接调用以下各类函数进行大规模数据处理。

1. 函数分类总览

函数类别
作用范围
典型场景
行数变化
标量函数
单行输入 > 单行输出
字段转换、格式化
不变
聚合函数
多行输入 > 单行输出
分组统计
减少
窗口函数
窗口范围内计算
排名、累计、同环比
不变
复杂类型函数
Array/Map/Struct 处理
嵌套数据解析
可能增加(explode)
条件/生成/转换函数
逻辑控制、类型转换
业务逻辑、数据清洗
视场景而定

2. 标量函数(Scalar Functions)

对单行中的一个或多个值进行操作,每行返回一个单一值。

2.1 字符串函数

函数
说明
示例
concat(s1, s2, ...)
字符串拼接
concat('Hello', ' ', 'World')Hello World
substring(str, pos, len)
截取子串
substring('abcdef', 2, 3)bcd
lower(str)
转小写
lower('ABC')abc
upper(str)
转大写
upper('abc')ABC
regexp_replace(str, pattern, replacement)
正则替换
regexp_replace('abc123', '\\\\d+', '')abc

2.2 数值/数学函数

函数
说明
示例
abs(x)
绝对值
abs(-5)5
round(x, n)
四舍五入
round(3.1415, 2)3.14
floor(x)
向下取整
floor(3.7)3
ceil(x)
向上取整
ceil(3.2)4
sqrt(x)
平方根
sqrt(16)4.0

2.3 日期和时间函数

函数
说明
示例
current_date()
当前日期
current_date()2026-05-07
date_add(date, days)
日期加 N 天
date_add('2026-05-07', 3)2026-05-10
date_sub(date, days)
日期减 N 天
date_sub('2026-05-07', 3)2026-05-04
datediff(end, start)
计算日期差
datediff('2026-05-07', '2026-05-01')6
from_unixtime(ts)
时间戳转换
from_unixtime(1700000000)2023-11-14 22:13:20

3. 聚合函数(Aggregate Functions)

作用于一组行(通常为 GROUP BY 结果),返回一个汇总值。
分类
函数
说明
基础统计
count(col)
计数
sum(col)
求和
avg(col)
平均值
max(col)
最大值
min(col)
最小值
高级统计
stddev_samp(col)
样本标准差
corr(col1, col2)
两列相关系数
集合聚合
collect_list(col)
聚合为数组(不去重)
collect_set(col)
聚合为集合(去重)
近似计算
approx_count_distinct(col)
HyperLogLog 高效去重计数

4. 窗口函数(Window Functions)

在与当前行相关的行集合上执行计算,不减少结果集行数
分类
函数
说明
排名函数
row_number()
连续唯一排名
rank()
并列排名,跳号
dense_rank()
并列排名,不跳号
ntile(n)
均分为 N 组
偏移函数
lag(col, n, default)
取前第 n 行值(默认 n=1)
lead(col, n, default)
取后第 n 行值(默认 n=1)
聚合窗口
sum() OVER (...)
累计求和
avg() OVER (...)
移动平均
示例:
SELECT
user_id,
order_time,
amount,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_time) AS rn,
LAG(amount, 1) OVER (PARTITION BY user_id ORDER BY order_time) AS prev_amount
FROM orders;

5. 复杂类型处理函数(Collection / Complex Type Functions)

专门处理 Array、Map、Struct 类型。

5.1 Array 函数

函数
说明
示例
explode(arr)
数组展开为多行
explode(array(1,2,3)) → 3 行
array_contains(arr, value)
判断是否包含
array_contains(array(1,2,3), 2)true
element_at(arr, index)
获取指定位置元素
element_at(array('a','b','c'), 2)b
array_join(arr, sep)
数组元素连接为字符串
array_join(array('a','b'), ',')a,b

5.2 Map 函数

函数
说明
示例
map_keys(m)
获取键列表
map_keys(map('a',1,'b',2))[a,b]
map_values(m)
获取值列表
map_values(map('a',1,'b',2))[1,2]
explode(m)
Map 展开为 Key/Value 两列
-

5.3 JSON 处理函数

函数
说明
示例
get_json_object(json, path)
按路径提取 JSON
get_json_object('{"a":1}', '$.a')1
from_json(str, schema)
JSON 字符串转结构化
-
to_json(struct)
结构化转 JSON 字符串
-

6. 其他特殊函数

分类
函数
说明
示例
条件函数
if(cond, v1, v2)
条件判断
if(age > 18, '成年', '未成年')
coalesce(v1, v2, ...)
返回第一个非空值
coalesce(NULL, NULL, 'a')a
CASE WHEN ... THEN ... END
多分支判断
CASE WHEN x > 0 THEN '正' ELSE '负' END
生成函数
explode(arr)
一行输入,多行输出
-
posexplode(arr)
带位置索引的 explode
-
转换函数
cast(expr AS type)
强制类型转换
cast('123' AS INT)123

7. 完整函数列表

如需获取 SparkSQL 支持的 300+ 个内置函数的详细定义及示例,请参见 SparkSQL Functions