跳到主要内容

CREATE FUNCTION

引入或更新于:v1.2.339

创建外部函数(External Function),通过 Flight 协议调用远程处理程序(通常为 Python 或其他服务)。

支持语言

  • 由远程服务器实现决定(常见为 Python,只要实现了 Flight 接口,可以使用任意语言)

语法

CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS ] <function_name>
AS ( <input_param_types> ) RETURNS <return_type> LANGUAGE <language_name>
HANDLER = '<handler_name>' ADDRESS = '<udf_server_address>'
[DESC='<description>']
参数描述
<function_name>函数名称。
<lambda_expression>定义函数行为的 lambda 表达式或代码片段。
DESC='<description>'UDF 的描述。
<<input_param_names>输入参数名称列表,以逗号分隔。
<<input_param_types>输入参数类型列表,以逗号分隔。
<return_type>函数的返回类型。
LANGUAGE指定编写函数所用的语言。可选值:python
HANDLER = '<handler_name>'指定函数的处理程序名称。
ADDRESS = '<udf_server_address>'指定 UDF 服务器的地址。

示例

以下示例完整演示如何创建一个计算最大公约数(GCD)的外部函数。

第一步:启动 Python UDF 服务

安装 databend-udf 包:

pip install databend-udf

创建文件 udf_server.py

from databend_udf import udf, UDFServer

@udf(
input_types=["INT", "INT"],
result_type="INT",
skip_null=True,
)
def gcd(x: int, y: int) -> int:
while y != 0:
(x, y) = (y, x % y)
return x

if __name__ == '__main__':
server = UDFServer("0.0.0.0:8815")
server.add_function(gcd)
server.serve()

启动服务:

python udf_server.py

第二步:在 Databend 中注册函数

CREATE FUNCTION gcd AS (INT, INT)
RETURNS INT
LANGUAGE python
HANDLER = 'gcd'
ADDRESS = 'http://localhost:8815';

第三步:调用函数

SELECT gcd(48, 18);
-- 返回:6

SELECT gcd(100, 75);
-- 返回:25
欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验