跳到主要内容

Databend 中的用户自定义函数(UDF)

用户自定义函数(UDF)允许您根据特定的数据处理需求创建自定义操作。为了保持一致性,Databend 在所有函数类型中都使用了统一的 $$ 语法

快速入门指南

根据您需要返回的内容选择函数类型:

需要返回函数类型文档
单个值(数字、字符串等)标量 SQLCREATE SCALAR FUNCTION
多行/多列表函数 SQLCREATE TABLE FUNCTION
使用 Python/JS/WASM 实现复杂逻辑嵌入式CREATE EMBEDDED FUNCTION

所有函数类型都使用相同的统一语法模式:

CREATE FUNCTION name(params) RETURNS type AS $$ logic $$;

标量 SQL 函数

使用 SQL 表达式返回单个值。非常适合用于计算、格式化和简单的转换。

-- 计算 BMI
CREATE FUNCTION calculate_bmi(weight FLOAT, height FLOAT)
RETURNS FLOAT
AS $$ weight / (height * height) $$;

-- 格式化全名
CREATE FUNCTION full_name(first VARCHAR, last VARCHAR)
RETURNS VARCHAR
AS $$ concat(first, ' ', last) $$;

-- 使用函数
SELECT
full_name('John', 'Doe') AS name,
calculate_bmi(70.0, 1.75) AS bmi;

表函数(UDTF)

返回包含多行和多列的结果集。非常适合用于封装带参数的复杂查询。

-- 按部门获取员工
CREATE FUNCTION get_dept_employees(dept_name VARCHAR)
RETURNS TABLE (id INT, name VARCHAR, salary DECIMAL)
AS $$
SELECT id, name, salary
FROM employees
WHERE department = dept_name
$$;

-- 部门统计
CREATE FUNCTION dept_stats()
RETURNS TABLE (department VARCHAR, count INT, avg_salary DECIMAL)
AS $$
SELECT department, COUNT(*), AVG(salary)
FROM employees
GROUP BY department
$$;

-- 使用表函数
SELECT * FROM get_dept_employees('Engineering');
SELECT * FROM dept_stats();

嵌入式函数

对于无法用 SQL 轻松表达的复杂逻辑,可以使用 Python、JavaScript 或 WASM。

语言需要企业版包支持
PythonPyPI 包
JavaScript
WASM

Python 示例

-- 带有类型安全的简单计算
CREATE FUNCTION py_calc(INT, INT)
RETURNS INT
LANGUAGE python HANDLER = 'calculate'
AS $$
def calculate(x, y):
return x * y + 10
$$;

SELECT py_calc(5, 3); -- 返回:25

JavaScript 示例

-- 字符串处理
CREATE FUNCTION js_format(VARCHAR, INT)
RETURNS VARCHAR
LANGUAGE javascript HANDLER = 'formatPerson'
AS $$
export function formatPerson(name, age) {
return `${name} is ${age} years old`;
}
$$;

SELECT js_format('Alice', 25); -- 返回:"Alice is 25 years old"

函数管理

命令文档
CREATE 函数标量嵌入式
ALTER 函数ALTER FUNCTION
DROP 函数DROP FUNCTION
SHOW 函数SHOW USER FUNCTIONS

有关用户自定义函数(UDF)的完整概述和比较,请参阅 用户自定义函数命令

开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册