函数

自定义函数(Function)用于扩展 Lakehouse 的 SQL 计算能力,允许用户根据业务需求创建可复用的函数,在 SQL 查询中像内置函数一样调用。

函数类型

Lakehouse 支持两种自定义函数:

SQL Function

使用 SQL 表达式定义的函数,在 Lakehouse 引擎内部执行。

  • 标量函数:对输入行中的一个或多个列进行处理,每行返回单个结果值
  • 表函数:接收一个或多个输入参数,返回多行多列的结果集

SQL Function 适合实现简单的计算逻辑,如格式化、条件判断、数学运算等。

External Function

通过 Python 或 Java 语言编写,在远程函数计算服务(阿里云 FC、腾讯云 SCF、AWS Lambda)中执行的自定义函数。

  • UDF(用户自定义函数):每行返回单个值
  • UDAF(用户自定义聚合函数):对多行数据进行聚合计算,返回单个值(仅 Java 支持)
  • UDTF(用户自定义表函数):返回多行多列结果集(仅 Java 支持)

External Function 适合调用外部服务(如 LLM、图像识别)或实现复杂业务逻辑。

函数对比

维度SQL FunctionExternal Function
开发语言SQLPython 3.10 / Java 8
执行位置Lakehouse 引擎内部远程函数计算服务
适用场景简单计算、格式化、条件判断复杂逻辑、AI 模型调用、非结构化数据处理
性能高(本地执行)受网络延迟影响
依赖管理需打包上传依赖
支持类型标量函数、表函数UDF、UDAF(Java)、UDTF(Java)

快速开始

创建 SQL 标量函数

CREATE FUNCTION public.area(x DOUBLE, y DOUBLE) RETURNS DOUBLE RETURN x * y; -- 使用函数 SELECT public.area(3, 4); -- 输出:12.0

创建 SQL 表函数

CREATE FUNCTION public.generate_series(start_val INT, end_val INT) RETURNS TABLE(val INT) AS SELECT generate_series(start_val, end_val);

创建 External Function

CREATE EXTERNAL FUNCTION public.upper_udf AS 'com.example.GenericUdfUpper' USING FILE 'volume://my_vol/upper.jar' CONNECTION my_fc_connection WITH PROPERTIES ( 'remote.udf.api' = 'java8.hive2.v0', 'remote.udf.protocol' = 'http.arrow.v0' ); -- 使用函数 SELECT public.upper_udf('hello'); -- 输出:HELLO

函数权限

权限点说明
CREATE FUNCTION
CREATE FUNCTION
在 Schema 下创建函数
ALTER FUNCTION
ALTER FUNCTION
修改函数属性
USE FUNCTION
USE FUNCTION
在 SQL 中调用函数
DROP FUNCTION
DROP FUNCTION
删除函数
READ METADATA
READ METADATA
查看函数元数据

相关文档

联系我们
预约咨询
微信咨询
电话咨询