更新时间:2026-07-03 GMT+08:00
SQL自定义函数
功能描述
SQL自定义函数允许使用SQL表达式定义函数逻辑,支持标量函数(返回单个值)和表值函数(返回表结果集)。
语法格式
- 创建标量函数
CREATE [OR REPLACE] FUNCTION function_name ([parameter_name data_type [{ DEFAULT | = } default_value]] [, ...]) RETURNS return_data_type RETURN expression;
- 创建表值函数
CREATE [OR REPLACE] FUNCTION function_name ([parameter_name data_type [{ DEFAULT | = } default_value]] [, ...]) RETURNS TABLE (col_name col_type [, ...]) RETURN query_statement;
- 删除函数
DROP FUNCTION [IF EXISTS] function_name;
- 查看函数定义
DESCRIBE FUNCTION [EXTENDED] function_name;
关键字
- OR REPLACE:如果函数已存在则替换。
- RETURNS:指定返回值类型。
- RETURN:函数体,SQL表达式或查询语句。
- DEFAULT / =:指定参数默认值。
参数说明
| 参数 | 是否必选 | 描述 |
|---|---|---|
| function_name | 是 | 函数名称 |
| parameter_name | 否 | 参数名称 |
| data_type | 否 | 参数数据类型,若省略时,系统从默认值推断类型 |
| default_value | 否 | 参数默认值 |
| return_data_type | 是 | 返回值数据类型 |
| expression | 是 | 标量函数体,SQL表达式 |
| query_statement | 是 | 表值函数体,SELECT查询语句 |
示例
- 创建简单标量函数
CREATE FUNCTION hello() RETURNS STRING RETURN 'Hello World'; SELECT hello(); -- 输出: Hello World
- 创建带参数的标量函数
CREATE FUNCTION add_tax(price DOUBLE) RETURNS DOUBLE RETURN price * 1.13; SELECT add_tax(100.0); -- 输出: 113.0
- 创建带默认参数的函数
CREATE FUNCTION greet(name STRING DEFAULT 'World') RETURNS STRING RETURN CONCAT('Hello, ', name, '!'); SELECT greet(); -- 输出: Hello, World! SELECT greet('Spark'); -- 输出: Hello, Spark! - 创建表值函数
CREATE FUNCTION range_n(n INT) RETURNS TABLE (id INT, value STRING) RETURN SELECT id, CONCAT('val_', id) FROM EXPLODE(SEQUENCE(1, n)) AS t(id); SELECT * FROM range_n(3); -- 输出: (1, val_1), (2, val_2), (3, val_3) - 替换已有函数
CREATE OR REPLACE FUNCTION add_tax(price DOUBLE) RETURNS DOUBLE RETURN price * 1.2;
- 删除函数
DROP FUNCTION IF EXISTS add_tax;
注意事项
- SQL自定义函数在Spark 4.0中为新增功能
- 标量函数的RETURN后跟单个SQL表达式
- 表值函数的RETURN后跟SELECT查询语句
- 带DEFAULT参数的函数,调用时可省略该参数
- 函数体内可引用已声明的会话变量
父主题: 函数语法