SQL语言定义函数作为一种用户自定义函数(UDF),弥补了MaxCompute只能用Java或Python创建UDF的不足,还扩展了UDF入参的参数类型,可支持函数类型的入参参数,提升表达业务逻辑的灵活性。SQL UDF支持永久UDF和临时UDF,本文为您介绍通过CREATE SQL FUNCTION命令创建的永久SQL UDF详情。
注意事项
使用SQL定义UDF时,您需要使用SQL脚本模式进行操作,普通SQL编辑模式可能会发生定义报错的问题。
说明MaxCompute的SQL脚本模式介绍及使用指导请参见SQL脚本模式。
MaxCompute支持通过
create sql function
命令创建SQL UDF,且通过此命令创建的UDF为永久SQL UDF,即创建完成后会存入MaxCompute的Meta系统后(即可在MaxCompute的函数列表中查询到此UDF),后续所有的查询操作都可以调用该函数。说明创建临时SQL UDF的详情请参见FUNCTION。
使用SQL定义UDF时,UDF入参的参数类型需为MaxCompute支持的数据类型,支持的数据类型请参见2.0数据类型版本;在UDF创建完成后,在调用SQL UDF时,请确保调用时的入参与定义UDF的入参参数类型保持一致。
在创建、查询、调用、删除SQL自定义函数时,操作的阿里云账号需要具备Function级别的权限。更多Function权限及授权操作,请参见MaxCompute权限。
命令格式
create sql function <function_name>(@<parameter_in1> <datatype>[, @<parameter_in2> <datatype>...])
[returns @<parameter_out> <datatype>]
as [begin]
<function_expression>
[end];
参数说明
function_name:必填。新建的SQL语言定义函数的名称。函数名称需要在项目内唯一,同名函数只能注册一次,且不能与系统内建函数同名。您可以通过LIST FUNCTIONS命令查看项目下的全部函数,来检查是否有同名函数。
parameter_in:必填。函数的输入参数。入参支持函数类型参数(包括匿名函数)。入参为函数类型的示例详情请参见SQL UDF示例:入参为函数,匿名函数类型的入参示例详情请参见创建SQL UDF示例:入参为匿名函数。
datatype:必填。定义函数的输入参数的数据类型,支持的数据类型请参见2.0数据类型版本。
returns:可选。定义UDF的返回值变量。如果不指定,默认返回function_name的同名变量。
parameter_out:必填。定义UDF的返回参数。
function_expression:必填。定义UDF的表达式(实现逻辑)。
使用示例
UDF逻辑简单时,示例如下。
create sql function my_add(@a BIGINT) as @a + 1;
@a + 1
为函数实现逻辑,可直接写为表达式,支持内置操作符、内建函数和UDF。UDF逻辑复杂时,可以在定义中使用begin和end来标注UDF表达式的内容范围,在begin和end内可以编写多条语句作为UDF的表达式,示例如下。
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT as begin @temp := @a + @b; @my_sum := @temp + @c; end;
其中
returns指定返回值变量,如果不指定,默认返回function_name的同名变量。
begin和end内的两行表达式即为SQL UDF的函数实现逻辑。
SQL UDF的输入参数支持为函数,包括内置函数、UDF,相关示例可参见SQL UDF示例:入参为函数、创建SQL UDF示例:入参为匿名函数。
相关命令
FUNCTION:如果您不需要把SQL语言定义函数存入MaxCompute的Meta系统,可以使用临时SQL语言定义函数。
DESC FUNCTION:查看MaxCompute项目中指定自定义函数的信息,包含函数名称、所有者、创建时间、类名和资源列表信息。
LIST FUNCTIONS:查看MaxCompute项目中所有自定义函数的信息。
DROP FUNCTION:在MaxCompute项目中注销已注册的自定义函数。
SELECT FUNCTION:调用SQL语言定义函数。