用户自定义函数
Databend 中的用户自定义函数(User-Defined Function,UDF)允许您根据特定的数据处理需求创建自定义操作。本页将重点介绍常用命令,并帮助您选择适合您用例的函数类型。
函数管理命令
| 命令 | 描述 |
|---|---|
| CREATE SCALAR FUNCTION | 纯 SQL 标量函数(无外部语言) |
| CREATE AGGREGATE FUNCTION | 脚本 UDAF(JavaScript/Python 运行时) |
| CREATE EMBEDDED FUNCTION | 嵌入式函数(Python/JavaScript/WASM) |
| CREATE TABLE FUNCTION | 纯 SQL 表函数(返回结果集) |
| SHOW USER FUNCTIONS | 列出所有用户自定义函数 |
| ALTER FUNCTION | 修改现有函数 |
| DROP FUNCTION | 移除函数 |
函数类型对比
| 特性 | 标量 SQL(Scalar) | 聚合(脚本) | 表格 SQL(Tabular) | 嵌入式(Embedded) |
|---|---|---|---|---|
| 返回类型 | 单个值 | 单个值 | 表/结果集 | 单个值 |
| 语言 | SQL 表达式 | JavaScript/Python 运行时 | SQL 查询 | Python/JavaScript/WASM |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 需要企业版 | 否 | Python 运行时需要 | 否 | Python 运行时需要 |
| 包支持 | 否 | Python:支持 PACKAGES | 否 | Python:支持 PACKAGES |
| 最佳适用场景 | 数学计算 字符串操作 数据格式化 | 自定义聚合逻辑 需要脚本语言处理 | 复杂查询 多行结果 数据转换 | 高级算法 外部库 控制流逻辑 |
统一语法
所有本地 UDF 类型都使用一致的 $$ 语法:
-- 标量函数
CREATE FUNCTION func_name(param TYPE) RETURNS TYPE AS $$ expression $$;
-- 表格函数
CREATE FUNCTION func_name(param TYPE) RETURNS TABLE(...) AS $$ query $$;
-- 嵌入式函数
CREATE FUNCTION func_name(param TYPE) RETURNS TYPE LANGUAGE python
HANDLER = 'handler' AS $$ code $$;

