跳到主要内容

Spark SQL 函数分类导航

不知道用哪个函数?按场景找 👇
点击函数名跳转到详细用法页面


🔍 快速定位指南

我想...去看
拼接/截取/替换字符串字符串函数
日期加减/格式化/提取日期时间函数
求和/计数/平均/统计聚合函数
排名/取前后行/累计窗口函数
IF/CASE/处理NULL条件与控制函数
类型互转类型转换函数
操作数组/Map集合函数
解析/生成JSONJSON 函数
加密/哈希/UUID加密与哈希函数
数组转多行展开函数
数学计算/三角函数数学函数
解析URL/XMLURL函数 / 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, ilikeSQL 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, charASCII 码转字符
反转字符串reverse反转字符串
选取第N个elt从多个字符串中选第N个

📅 日期时间函数

获取当前时间

场景函数说明
当前日期current_date, curdate返回当前日期(date 类型)
当前时间戳current_timestamp, now, localtimestamp返回当前时间戳
当前时区current_timezone返回会话时区

日期加减

场景函数说明
加/减天date_add, dateadd, date_sub日期加减指定天数
加月份add_months日期加减指定月数
下一个星期Xnext_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_unixtimeUnix 时间戳转格式化字符串
日期→天数unix_date日期转为距 epoch 天数
天数→日期date_from_unix_date天数转为日期
时间戳→秒/毫秒/微秒unix_seconds, unix_millis, unix_micros时间戳转为数值
秒/毫秒/微秒→时间戳timestamp_seconds, timestamp_millis, timestamp_micros数值转为时间戳

时区转换

场景函数说明
UTC→本地from_utc_timestampUTC 时间转为指定时区
本地→UTCto_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, powerx 的 y 次方
平方根sqrt平方根
立方根cbrt立方根
指数exp, expm1e 的 x 次方
自然对数ln, log自然对数
常用对数log10, log2, log1p以 10/2 为底的对数
斜边hypotsqrt(x²+y²)

三角函数

场景函数说明
正弦sin, asin, sinh, asinhsin / arcsin / 双曲
余弦cos, acos, cosh, acoshcos / arccos / 双曲
正切tan, atan, atan2, tanh, atanhtan / arctan / 双曲
余切/正割/余割cot, sec, csc其他三角函数
角度弧度互转degrees, radians弧度↔角度

常数与随机数

场景函数说明
圆周率pi返回 π
自然常数e返回 e
随机数rand, random均匀分布随机数 [0,1)
正态随机数randn标准正态分布随机数
阶乘factorialn!
自增IDmonotonically_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_distinctHyperLogLog 近似计数
近似百分位approx_percentile近似百分位数
直方图histogram_numeric数值直方图
Count-Min Sketchcount_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_numberbitmap 位操作
HLL 聚合hll_sketch_agg, hll_union_agg构建/合并 HLL sketch
HLL 查询hll_sketch_estimate, hll_unionHLL 基数估计

分组辅助

场景函数说明
分组标识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 WHENcase, when多条件分支判断
范围判断between值在范围内
成员判断in值在列表中

NULL 处理

场景函数说明
取第一个非NULLcoalesce从左到右取第一个非 NULL 值
NULL 则替换nvl, ifnull为 NULL 时返回默认值
三元 NULLnvl2非 NULL 返回 A,NULL 返回 B
相等则返回NULLnullif两值相等时返回 NULL
NULL安全比较equal_nullNULL=NULL 返回 true
判断是否NULLisnull, isnotnull判断 NULL
判断是否NaNisnan, 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数组元素去重
去NULLarray_compact移除数组中的 NULL
最大/最小array_max, array_min数组中的最大/最小值

Array 集合运算

场景函数说明
并集array_union两数组合并去重
交集array_intersect两数组共同元素
差集array_exceptA 有 B 没有的元素

Array 增删改

场景函数说明
头部添加array_prepend在数组头部插入元素
尾部添加array_append在数组尾部插入元素
指定位置插入array_insert在指定位置插入元素
删除元素array_remove删除所有匹配元素

Array 转换

场景函数说明
数组拼接为字符串array_join用分隔符连接数组元素
多数组配对arrays_zip, zip_with多个数组按位置组合

Map 创建

场景函数说明
创建 Mapmap从 key-value 对构建 map
两数组→Mapmap_from_arrayskeys 数组 + values 数组 → map
条目数组→Mapmap_from_entriesstruct 数组 → map
字符串→Mapstr_to_map按分隔符解析为 map

Map 查询与变换

场景函数说明
取值element_at按 key 取 value
获取所有 keymap_keys返回所有 key 的数组
获取所有 valuemap_values返回所有 value 的数组
转为条目数组map_entriesmap → struct 数组
是否包含 keymap_contains_key判断 key 是否存在
合并 Mapmap_concat合并多个 map
过滤 Mapmap_filter按条件过滤 key-value
变换 keytransform_keys对每个 key 应用函数
变换 valuetransform_values对每个 value 应用函数
配对变换map_zip_with两个 map 按 key 合并计算

Struct 操作

场景函数说明
创建 Structstruct, named_struct构建结构体

📋 JSON 函数

场景函数说明
提取JSON字段get_json_object用 JSONPath 提取值
JSON→Structfrom_jsonJSON 字符串解析为结构化类型
Struct→JSONto_json结构化数据转为 JSON 字符串
提取多字段json_tuple一次提取多个 JSON 字段
JSON数组长度json_array_length获取 JSON 数组的元素个数
JSON对象的keyjson_object_keys获取 JSON 对象的所有 key
推断JSON Schemaschema_of_json从 JSON 样本推断 schema

📄 CSV 函数

场景函数说明
CSV→Structfrom_csvCSV 字符串解析为结构化类型
Struct→CSVto_csv结构化数据转为 CSV 字符串
推断CSV Schemaschema_of_csv从 CSV 样本推断 schema

🔐 加密与哈希函数

场景函数说明
MD5md5128 位 MD5 哈希
SHA-1sha, sha1160 位 SHA-1 哈希
SHA-2sha2SHA-224/256/384/512 哈希
通用哈希hashMurmur3 哈希(返回 int)
xxHash64xxhash64xxHash64 哈希(返回 long)
CRC32crc32CRC32 校验和
AES 加密aes_encryptAES 对称加密
AES 解密aes_decryptAES 对称解密
Base64 编码base64二进制转 Base64 字符串
Base64 解码unbase64Base64 字符串转二进制
UUIDuuid生成随机 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_outerstruct 数组展开为多列多行
多列转多行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文件块起始位置和长度
分区IDspark_partition_id当前行所在分区 ID
数据类型typeof返回表达式的类型名
隐私privacy数据隐私相关
Java 方法调用java_method, reflect调用 Java 静态方法

🗂️ XML (XPath) 函数

场景函数说明
XPath 查询xpath返回匹配节点的字符串数组
XPath 布尔xpath_booleanXPath 表达式是否为真
XPath 数值xpath_double, xpath_float, xpath_int, xpath_long, xpath_short, xpath_numberXPath 提取数值
XPath 字符串xpath_stringXPath 提取字符串