TCHouse-X 离线计算引擎深度兼容 Apache Spark 3.5.3,支持完整的 Spark SQL 内置函数库。用户可通过离线任务直接调用以下各类函数进行大规模数据处理。
相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。
一、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_amountFROM 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。