腾讯云数据仓库 TCHouse-X 内置函数(SparkSQL 语法)

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。

赞 (0)
上一篇 4天前
下一篇 4天前