Spark SQL 函数分类导航
不知道用哪个函数?按场景找 👇
点击函数名跳转到详细用法页面
🔍 快速定位指南
| 我想... | 去看 |
|---|---|
| 拼接/截取/替换字符串 | [字符串函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 日期加减/格式化/提取 | [日期时间函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 求和/计数/平均/统计 | [聚合函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 排名/取前后行/累计 | [窗口函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| IF/CASE/处理NULL | [条件与控制函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 类型互转 | [类型转换函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 操作数组/Map | [集合函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 解析/生成JSON | [JSON 函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 加密/哈希/UUID | [加密与哈希函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 数组转多行 | [展开函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 数学计算/三角函数 | [数学函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
| 解析URL/XML | [URL函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) / [XML函数](#我想… 去看 拼接/截取/替换字符串 字符串函数 日期加减/格式化/提取 日期时间函数 求和/计数/平均/统计 聚合函数 排名/取前后行/累计 窗口函数 IF/CASE/处理NULL 条件与控制函数 类型互转 类型转换函数 操作数组/Map 集合函数 解析/生成JSON JSON 函数 加密/哈希/UUID 加密与哈希函数 数组转多行 展开函数 数学计算/三角函数 数学函数 解析URL/XML URL函数 / XML函数) |
🔤 字符串函数
拼接与构造
| 场景 | 函数 | 说明 |
|---|---|---|
| 拼接字符串 | concat | 将多个字符串拼接在一起 |
| 带分隔符拼接 | concat_ws | 用指定分隔符连接多个字符串 |
| 格式化输出 | format_string, printf | 类似 C 语言 printf 格式化 |
| 生成空格 | space | 返回指定数量的空格 |
| 重复字符串 | repeat | 将字符串重复 N 次 |
截取与拆分
| 场景 | 函数 | 说明 |
|---|---|---|
| 按位置截取 | substring, substr | 从指定位置截取子串 |
| 取左/右N字符 | left, right | 从左/右取固定长度 |
| 按分隔符截取 | substring_index | 取分隔符前/后的内容 |
| 按分隔符拆分 | split | 拆分为数组 |
| 取拆分后第N段 | split_part | 拆分后直接取某一段 |
| 分句 | sentences | 将文本拆分为句子和单词 |
查找与匹配
| 场景 | 函数 | 说明 |
|---|---|---|
| 查找子串位置 | instr, locate, position | 返回子串首次出现的位置 |
| 判断是否包含 | contains | 是否包含指定子串 |
| 判断前后缀 | startswith, endswith | 是否以指定字符串开头/结尾 |
| 模糊匹配 | like, ilike | SQL LIKE 模式匹配(ilike不区分大小写) |
| 正则匹配 | regexp, regexp_like, rlike | 正则表达式匹配 |
| 正则提取 | regexp_extract, regexp_extract_all | 用正则提取匹配内容 |
| 正则查找位置 | regexp_instr | 正则匹配的位置 |
| 正则计数 | regexp_count | 正则匹配出现次数 |
| 正则子串 | regexp_substr | 返回正则匹配的子串 |
| 在集合中查找 | find_in_set | 在逗号分隔列表中查找 |
| 发音匹配 | soundex | 返回发音编码(模糊匹配英文) |
| 编辑距离 | levenshtein | 计算两个字符串的编辑距离 |
替换与修改
| 场景 | 函数 | 说明 |
|---|---|---|
| 直接替换 | replace | 替换所有匹配的子串 |
| 正则替换 | regexp_replace | 用正则表达式替换 |
| 逐字符替换 | translate | 按字符映射替换(类似 tr 命令) |
| 覆盖插入 | overlay | 在指定位置覆盖替换 |
| 数据脱敏 | mask | 用掩码字符替换敏感数据 |
去空格与填充
| 场景 | 函数 | 说明 |
|---|---|---|
| 去两端空格 | trim, btrim | 去除前后空格或指定字符 |
| 去左空格 | ltrim | 去除左侧空格 |
| 去右空格 | rtrim | 去除右侧空格 |
| 左填充 | lpad | 左侧填充到指定长度 |
| 右填充 | rpad | 右侧填充到指定长度 |
大小写转换
| 场景 | 函数 | 说明 |
|---|---|---|
| 转大写 | upper, ucase | 全部转大写 |
| 转小写 | lower, lcase | 全部转小写 |
| 首字母大写 | initcap | 每个单词首字母大写 |
长度与编码
| 场景 | 函数 | 说明 |
|---|---|---|
| 字符长度 | length, len, char_length, character_length | 返回字符数 |
| 字节长度 | octet_length, bit_length | 返回字节/比特数 |
| ASCII 码 | ascii | 返回首字符 ASCII 值 |
| ASCII 转字符 | chr, char | ASCII 码转字符 |
| 反转字符串 | reverse | 反转字符串 |
| 选取第N个 | elt | 从多个字符串中选第N个 |
📅 日期时间函数
获取当前时间
| 场景 | 函数 | 说明 |
|---|---|---|
| 当前日期 | current_date, curdate | 返回当前日期(date 类型) |
| 当前时间戳 | current_timestamp, now, localtimestamp | 返回当前时间戳 |
| 当前时区 | current_timezone | 返回会话时区 |
日期加减
| 场景 | 函数 | 说明 |
|---|---|---|
| 加/减天 | date_add, dateadd, date_sub | 日期加减指定天数 |
| 加月份 | add_months | 日期加减指定月数 |
| 下一个星期X | next_day | 返回下一个指定星期几的日期 |
| 月末日期 | last_day | 返回当月最后一天 |
| 生成日期序列 | sequence | 生成连续日期/数字序列 |
日期差值
| 场景 | 函数 | 说明 |
|---|---|---|
| 天数差 | datediff, date_diff | 两个日期之间的天数 |
| 月数差 | months_between | 两个日期之间的月数(精确到小数) |
日期格式化与解析
| 场景 | 函数 | 说明 |
|---|---|---|
| 日期→字符串 | date_format, to_char, to_varchar | 按格式输出日期字符串 |
| 字符串→日期 | to_date | 解析字符串为 date 类型 |
| 字符串→时间戳 | to_timestamp, to_timestamp_ltz, to_timestamp_ntz | 解析字符串为 timestamp |
| 构造日期 | make_date | 从年月日构造 date |
| 构造时间戳 | make_timestamp, make_timestamp_ltz, make_timestamp_ntz | 从年月日时分秒构造 timestamp |
| 构造间隔 | make_interval, make_dt_interval, make_ym_interval | 构造 interval 类型 |
日期截断
| 场景 | 函数 | 说明 |
|---|---|---|
| 截断到指定精度 | date_trunc | 截断到年/季/月/周/日/时等 |
| 截断日期 | trunc | 截断 date 到年或月 |
提取日期部分
| 场景 | 函数 | 说明 |
|---|---|---|
| 提取任意部分 | extract, date_part, datepart | 提取年/月/日/时/分/秒等 |
| 年 | year | 提取年份 |
| 季度 | quarter | 提取季度(1-4) |
| 月 | month | 提取月份(1-12) |
| 日 | day, dayofmonth | 提取日(1-31) |
| 时 | hour | 提取小时(0-23) |
| 分 | minute | 提取分钟(0-59) |
| 秒 | second | 提取秒(0-59) |
| 星期几 | dayofweek, weekday | 返回星期几 |
| 年中第几天 | dayofyear | 返回年中第几天(1-366) |
| 年中第几周 | weekofyear | 返回年中第几周 |
Unix 时间戳
| 场景 | 函数 | 说明 |
|---|---|---|
| 日期→秒时间戳 | unix_timestamp, to_unix_timestamp | 转为 Unix 秒级时间戳 |
| 秒时间戳→字符串 | from_unixtime | Unix 时间戳转格式化字符串 |
| 日期→天数 | unix_date | 日期转为距 epoch 天数 |
| 天数→日期 | date_from_unix_date | 天数转为日期 |
| 时间戳→秒/毫秒/微秒 | unix_seconds, unix_millis, unix_micros | 时间戳转为数值 |
| 秒/毫秒/微秒→时间戳 | timestamp_seconds, timestamp_millis, timestamp_micros | 数值转为时间戳 |
时区转换
| 场景 | 函数 | 说明 |
|---|---|---|
| UTC→本地 | from_utc_timestamp | UTC 时间转为指定时区 |
| 本地→UTC | to_utc_timestamp | 本地时间转为 UTC |
| 任意时区转换 | convert_timezone | 在任意时区之间转换 |
窗口时间(流处理)
| 场景 | 函数 | 说明 |
|---|---|---|
| 时间窗口 | window | 生成滑动/滚动时间窗口 |
| 窗口结束时间 | window_time | 获取窗口的事件时间 |
| 会话窗口 | session_window | 基于活动间隔的会话窗口 |
🔢 数学函数
四舍五入与取整
| 场景 | 函数 | 说明 |
|---|---|---|
| 四舍五入 | round, bround | 四舍五入(bround 银行家舍入) |
| 向上取整 | ceil, ceiling | 向上取最近整数 |
| 向下取整 | floor | 向下取最近整数 |
| 最近整数 | rint | 返回最接近的整数(double) |
基础运算
| 场景 | 函数 | 说明 |
|---|---|---|
| 绝对值 | abs | 取绝对值 |
| 取反 | negative | 取相反数 |
| 正值 | positive | 返回自身(正号) |
| 取模 | mod, pmod | 取余数(pmod 总返回正数) |
| 整除 | div | 整数除法 |
| 符号 | sign, signum | 返回正负号(-1/0/1) |
| 最大值 | greatest | 多个值中取最大 |
| 最小值 | least | 多个值中取最小 |
| 直方图分桶 | width_bucket | 将值分配到等宽桶 |
幂与对数
| 场景 | 函数 | 说明 |
|---|---|---|
| 幂运算 | pow, power | x 的 y 次方 |
| 平方根 | sqrt | 平方根 |
| 立方根 | cbrt | 立方根 |
| 指数 | exp, expm1 | e 的 x 次方 |
| 自然对数 | ln, log | 自然对数 |
| 常用对数 | log10, log2, log1p | 以 10/2 为底的对数 |
| 斜边 | hypot | sqrt(x²+y²) |
三角函数
| 场景 | 函数 | 说明 |
|---|---|---|
| 正弦 | sin, asin, sinh, asinh | sin / arcsin / 双曲 |
| 余弦 | cos, acos, cosh, acosh | cos / arccos / 双曲 |
| 正切 | tan, atan, atan2, tanh, atanh | tan / arctan / 双曲 |
| 余切/正割/余割 | cot, sec, csc | 其他三角函数 |
| 角度弧度互转 | degrees, radians | 弧度↔角度 |
常数与随机数
| 场景 | 函数 | 说明 |
|---|---|---|
| 圆周率 | pi | 返回 π |
| 自然常数 | e | 返回 e |
| 随机数 | rand, random | 均匀分布随机数 [0,1) |
| 正态随机数 | randn | 标准正态分布随机数 |
| 阶乘 | factorial | n! |
| 自增ID | monotonically_increasing_id | 生成单调递增唯一 ID |
进制转换
| 场景 | 函数 | 说明 |
|---|---|---|
| 十进制→二进制 | bin | 转二进制字符串 |
| 十进制→十六进制 | hex | 转十六进制字符串 |
| 十六进制→十进制 | unhex | 十六进制转回 |
| 任意进制转换 | conv | 在 2-36 进制之间转换 |
位运算
| 场景 | 函数 | 说明 |
|---|---|---|
| 位与 | bit_and | 按位与 |
| 位或 | bit_or | 按位或 |
| 位异或 | bit_xor | 按位异或 |
| 位计数 | bit_count | 二进制中 1 的个数 |
| 获取某一位 | bit_get, getbit | 获取指定位的值 |
| 左移/右移 | shiftleft, shiftright, shiftrightunsigned | 位移操作 |
📊 聚合函数
基础聚合
| 场景 | 函数 | 说明 |
|---|---|---|
| 求和 | sum | 合计值 |
| 计数 | count | 计数(含 count distinct) |
| 条件计数 | count_if | 满足条件的行数 |
| 平均值 | avg, mean | 算术平均 |
| 最大值 | max | 取最大 |
| 最小值 | min | 取最小 |
| 取最大值对应行 | max_by | 按某列最大值取另一列 |
| 取最小值对应行 | min_by | 按某列最小值取另一列 |
| 任意值 | any_value | 取组内任意一个值 |
| 第一个值 | first | 取组内第一个值 |
| 最后一个值 | last | 取组内最后一个值 |
| 中位数 | median | 取中位数 |
| 众数 | mode | 取出现最多的值 |
| 百分位 | percentile, percentile_approx | 精确/近似百分位 |
收集为集合
| 场景 | 函数 | 说明 |
|---|---|---|
| 收集为列表 | collect_list, array_agg | 组内值收集为数组(含重复) |
| 收集为去重集合 | collect_set | 组内值收集为数组(去重) |
统计函数
| 场景 | 函数 | 说明 |
|---|---|---|
| 标准差 | stddev, stddev_samp, stddev_pop, std | 样本/总体标准差 |
| 方差 | variance, var_samp, var_pop | 样本/总体方差 |
| 协方差 | covar_samp, covar_pop | 样本/总体协方差 |
| 相关系数 | corr | 皮尔逊相关系数 |
| 偏度 | skewness | 分布偏度 |
| 峰度 | kurtosis | 分布峰度 |
| 回归分析 | regr_slope, regr_intercept, regr_r2, regr_count, regr_avgx, regr_avgy, regr_sxx, regr_sxy, regr_syy | 线性回归系列 |
近似与概率
| 场景 | 函数 | 说明 |
|---|---|---|
| 近似去重计数 | approx_count_distinct | HyperLogLog 近似计数 |
| 近似百分位 | approx_percentile | 近似百分位数 |
| 直方图 | histogram_numeric | 数值直方图 |
| Count-Min Sketch | count_min_sketch | 频率估计草图 |
| 布尔全真 | bool_and, every | 所有值都为 true |
| 布尔存在真 | bool_or, some, any | 存在 true 值 |
Bitmap 与 HLL
| 场景 | 函数 | 说明 |
|---|---|---|
| Bitmap 聚合 | bitmap_construct_agg, bitmap_or_agg | 构建/合并 bitmap |
| Bitmap 查询 | bitmap_count, bitmap_bit_position, bitmap_bucket_number | bitmap 位操作 |
| HLL 聚合 | hll_sketch_agg, hll_union_agg | 构建/合并 HLL sketch |
| HLL 查询 | hll_sketch_estimate, hll_union | HLL 基数估计 |
分组辅助
| 场景 | 函数 | 说明 |
|---|---|---|
| 分组标识 | grouping, grouping_id | 标识 GROUPING SETS 中的分组级别 |
🪟 窗口函数
排序编号
| 场景 | 函数 | 说明 |
|---|---|---|
| 行号 | row_number | 分区内连续编号(1,2,3...) |
| 排名(跳号) | rank | 并列相同名次,后续跳号(1,1,3) |
| 排名(不跳号) | dense_rank | 并列相同名次,不跳号(1,1,2) |
| 百分比排名 | percent_rank | (rank-1)/(rows-1) |
| 累积分布 | cume_dist | ≤当前值的行数占比 |
| 分桶 | ntile | 将数据等分为 N 桶 |
偏移取值
| 场景 | 函数 | 说明 |
|---|---|---|
| 取前N行 | lag | 取当前行往前第 N 行的值 |
| 取后N行 | lead | 取当前行往后第 N 行的值 |
| 窗口第一行 | first_value | 窗口框内第一行的值 |
| 窗口最后一行 | last_value | 窗口框内最后一行的值(注意默认 frame) |
| 窗口第N行 | nth_value | 窗口框内第 N 行的值 |
窗口聚合
所有聚合函数(SUM/AVG/COUNT/MAX/MIN 等)都可以作为窗口函数使用,配合 OVER 子句和 frame 定义实现滑动计算。
❓ 条件与控制函数
条件判断
| 场景 | 函数 | 说明 |
|---|---|---|
| IF 条件 | if | 条件为真返回 A,否则返回 B |
| CASE WHEN | case, when | 多条件分支判断 |
| 范围判断 | between | 值在范围内 |
| 成员判断 | in | 值在列表中 |
NULL 处理
| 场景 | 函数 | 说明 |
|---|---|---|
| 取第一个非NULL | coalesce | 从左到右取第一个非 NULL 值 |
| NULL 则替换 | nvl, ifnull | 为 NULL 时返回默认值 |
| 三元 NULL | nvl2 | 非 NULL 返回 A,NULL 返回 B |
| 相等则返回NULL | nullif | 两值相等时返回 NULL |
| NULL安全比较 | equal_null | NULL=NULL 返回 true |
| 判断是否NULL | isnull, isnotnull | 判断 NULL |
| 判断是否NaN | isnan, nanvl | 判断/替换 NaN |
逻辑运算
| 场景 | 函数 | 说明 |
|---|---|---|
| 与 | and | 逻辑与 |
| 或 | or | 逻辑或 |
| 非 | not | 逻辑非 |
错误处理
| 场景 | 函数 | 说明 |
|---|---|---|
| 断言 | assert_true | 条件为假时抛出异常 |
| 主动报错 | raise_error | 抛出自定义错误信息 |
| 安全加 | try_add | 溢出返回 NULL 而非报错 |
| 安全减 | try_subtract | 溢出返回 NULL |
| 安全乘 | try_multiply | 溢出返回 NULL |
| 安全除 | try_divide | 除零返回 NULL |
| 安全求和 | try_sum | 溢出返回 NULL |
| 安全均值 | try_avg | 溢出返回 NULL |
| 安全取元素 | try_element_at | 越界返回 NULL |
| 安全转二进制 | try_to_binary | 失败返回 NULL |
| 安全转数字 | try_to_number | 失败返回 NULL |
| 安全转时间戳 | try_to_timestamp | 失败返回 NULL |
| 安全解密 | try_aes_decrypt | 失败返回 NULL |
🔄 类型转换函数
| 场景 | 函数 | 说明 |
|---|---|---|
| 通用转换 | cast | 转换为任意类型 |
| 转整数 | int, bigint, smallint, tinyint | 转为整数类型 |
| 转浮点 | float, double, decimal | 转为浮点/定点类型 |
| 转字符串 | string | 转为字符串 |
| 转布尔 | boolean | 转为布尔值 |
| 转日期 | date | 转为日期类型 |
| 转时间戳 | timestamp | 转为时间戳类型 |
| 转二进制 | binary, to_binary | 转为二进制 |
| 转数字(格式化) | to_number | 按格式字符串转数字 |
| 查看类型 | typeof | 返回表达式的数据类型 |
📦 集合函数 (Array / Map / Struct)
Array 创建
| 场景 | 函数 | 说明 |
|---|---|---|
| 创建数组 | array | 从多个值构建数组 |
| 生成序列 | sequence | 生成等差数组 |
| 重复填充 | array_repeat | 将值重复 N 次生成数组 |
Array 查询
| 场景 | 函数 | 说明 |
|---|---|---|
| 取元素 | element_at, get | 按索引取数组元素 |
| 数组大小 | size, array_size, cardinality | 返回数组长度 |
| 是否包含 | array_contains | 数组是否包含指定值 |
| 查找位置 | array_position | 值在数组中的位置 |
| 是否有交集 | arrays_overlap | 两数组是否有共同元素 |
| 条件存在 | exists | 是否存在满足条件的元素 |
| 条件全满足 | forall | 是否所有元素满足条件 |
Array 变换
| 场景 | 函数 | 说明 |
|---|---|---|
| 映射转换 | transform | 对每个元素应用函数 |
| 过滤 | filter | 保留满足条件的元素 |
| 聚合/归约 | aggregate, reduce | 将数组归约为单个值 |
| 排序 | array_sort, sort_array | 数组排序 |
| 打乱 | shuffle | 随机打乱数组 |
| 反转 | reverse | 反转数组 |
| 截取 | slice | 截取数组子段 |
| 展平 | flatten | 嵌套数组展平一层 |
| 去重 | array_distinct | 数组元素去重 |
| 去NULL | array_compact | 移除数组中的 NULL |
| 最大/最小 | array_max, array_min | 数组中的最大/最小值 |
Array 集合运算
| 场景 | 函数 | 说明 |
|---|---|---|
| 并集 | array_union | 两数组合并去重 |
| 交集 | array_intersect | 两数组共同元素 |
| 差集 | array_except | A 有 B 没有的元素 |
Array 增删改
| 场景 | 函数 | 说明 |
|---|---|---|
| 头部添加 | array_prepend | 在数组头部插入元素 |
| 尾部添加 | array_append | 在数组尾部插入元素 |
| 指定位置插入 | array_insert | 在指定位置插入元素 |
| 删除元素 | array_remove | 删除所有匹配元素 |
Array 转换
| 场景 | 函数 | 说明 |
|---|---|---|
| 数组拼接为字符串 | array_join | 用分隔符连接数组元素 |
| 多数组配对 | arrays_zip, zip_with | 多个数组按位置组合 |
Map 创建
| 场景 | 函数 | 说明 |
|---|---|---|
| 创建 Map | map | 从 key-value 对构建 map |
| 两数组→Map | map_from_arrays | keys 数组 + values 数组 → map |
| 条目数组→Map | map_from_entries | struct 数组 → map |
| 字符串→Map | str_to_map | 按分隔符解析为 map |
Map 查询与变换
| 场景 | 函数 | 说明 |
|---|---|---|
| 取值 | element_at | 按 key 取 value |
| 获取所有 key | map_keys | 返回所有 key 的数组 |
| 获取所有 value | map_values | 返回所有 value 的数组 |
| 转为条目数组 | map_entries | map → struct 数组 |
| 是否包含 key | map_contains_key | 判断 key 是否存在 |
| 合并 Map | map_concat | 合并多个 map |
| 过滤 Map | map_filter | 按条件过滤 key-value |
| 变换 key | transform_keys | 对每个 key 应用函数 |
| 变换 value | transform_values | 对每个 value 应用函数 |
| 配对变换 | map_zip_with | 两个 map 按 key 合并计算 |
Struct 操作
| 场景 | 函数 | 说明 |
|---|---|---|
| 创建 Struct | struct, named_struct | 构建结构体 |
📋 JSON 函数
| 场景 | 函数 | 说明 |
|---|---|---|
| 提取JSON字段 | get_json_object | 用 JSONPath 提取值 |
| JSON→Struct | from_json | JSON 字符串解析为结构化类型 |
| Struct→JSON | to_json | 结构化数据转为 JSON 字符串 |
| 提取多字段 | json_tuple | 一次提取多个 JSON 字段 |
| JSON数组长度 | json_array_length | 获取 JSON 数组的元素个数 |
| JSON对象的key | json_object_keys | 获取 JSON 对象的所有 key |
| 推断JSON Schema | schema_of_json | 从 JSON 样本推断 schema |
📄 CSV 函数
| 场景 | 函数 | 说明 |
|---|---|---|
| CSV→Struct | from_csv | CSV 字符串解析为结构化类型 |
| Struct→CSV | to_csv | 结构化数据转为 CSV 字符串 |
| 推断CSV Schema | schema_of_csv | 从 CSV 样本推断 schema |
🔐 加密与哈希函数
| 场景 | 函数 | 说明 |
|---|---|---|
| MD5 | md5 | 128 位 MD5 哈希 |
| SHA-1 | sha, sha1 | 160 位 SHA-1 哈希 |
| SHA-2 | sha2 | SHA-224/256/384/512 哈希 |
| 通用哈希 | hash | Murmur3 哈希(返回 int) |
| xxHash64 | xxhash64 | xxHash64 哈希(返回 long) |
| CRC32 | crc32 | CRC32 校验和 |
| AES 加密 | aes_encrypt | AES 对称加密 |
| AES 解密 | aes_decrypt | AES 对称解密 |
| Base64 编码 | base64 | 二进制转 Base64 字符串 |
| Base64 解码 | unbase64 | Base64 字符串转二进制 |
| UUID | uuid | 生成随机 UUID |
| Luhn 校验 | luhn_check | 验证信用卡等号码校验位 |
🌐 URL 与编码函数
| 场景 | 函数 | 说明 |
|---|---|---|
| URL 编码 | url_encode | 对 URL 进行百分号编码 |
| URL 解码 | url_decode | 解码百分号编码 |
| 解析 URL 部分 | parse_url | 提取 URL 的 host/path/query 等 |
| 字符编码 | encode | 字符串按指定编码转二进制 |
| 字符解码 | decode | 二进制按指定编码转字符串 |
| 数字格式化 | format_number | 数字格式化(千分位等) |
💥 展开函数 (Generator / UDTF)
| 场景 | 函数 | 说明 |
|---|---|---|
| 数组展开 | explode, explode_outer | 数组每个元素生成一行(outer 保留 NULL) |
| 带位置展开 | posexplode, posexplode_outer | 展开并输出索引位置 |
| Struct数组展开 | inline, inline_outer | struct 数组展开为多列多行 |
| 多列转多行 | stack | 将多列转为 N 行(列转行) |
🔧 系统与元信息函数
| 场景 | 函数 | 说明 |
|---|---|---|
| 当前用户 | current_user, user | 返回当前用户名 |
| 当前数据库 | current_database, current_schema, current_catalog | 返回当前 database/catalog |
| Spark 版本 | version | 返回 Spark 版本号 |
| 输入文件名 | input_file_name | 当前行来自哪个文件 |
| 文件块信息 | input_file_block_start, input_file_block_length | 文件块起始位置和长度 |
| 分区ID | spark_partition_id | 当前行所在分区 ID |
| 数据类型 | typeof | 返回表达式的类型名 |
| 隐私 | privacy | 数据隐私相关 |
| Java 方法调用 | java_method, reflect | 调用 Java 静态方法 |
🗂️ XML (XPath) 函数
| 场景 | 函数 | 说明 |
|---|---|---|
| XPath 查询 | xpath | 返回匹配节点的字符串数组 |
| XPath 布尔 | xpath_boolean | XPath 表达式是否为真 |
| XPath 数值 | xpath_double, xpath_float, xpath_int, xpath_long, xpath_short, xpath_number | XPath 提取数值 |
| XPath 字符串 | xpath_string | XPath 提取字符串 |