SQL语言定义函数作为一种用户自定义函数(UDF),弥补了MaxCompute只能用Java或Python创建UDF的不足,还扩展了UDF入参的参数类型,可支持函数类型的入参参数,提升表达业务逻辑的灵活性。SQL UDF支持永久UDF和临时UDF,本文为您介绍通过FUNCTION命令创建的临时SQL UDF详情。
注意事项
使用SQL定义UDF时,您需要使用SQL脚本模式进行操作,普通SQL编辑模式可能会发生定义报错的问题。
说明MaxCompute的SQL脚本模式介绍及使用指导请参见SQL脚本模式。
MaxCompute支持通过
function
命令创建SQL UDF,且通过此命令创建的UDF为临时SQL UDF,即创建完成后不会存入MaxCompute的Meta系统后(即无法在MaxCompute的函数列表中查询到此UDF),后续仅支持在当前SQL脚本中调用此临时UDF,其他环境中无法直接调用此UDF。说明创建永久SQL UDF的详情请参见CREATE SQL FUNCTION。
使用SQL定义UDF时,UDF入参的参数类型需为MaxCompute支持的数据类型,支持的数据类型请参见2.0数据类型版本;在UDF创建完成后,在调用SQL UDF时,请确保调用时的入参与定义UDF的入参参数类型保持一致。
在创建、查询、调用、删除SQL自定义函数时,操作的阿里云账号需要具备Function级别的权限。更多Function权限及授权操作,请参见MaxCompute权限。
命令格式
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的表达式(实现逻辑)。
使用示例
function my_add(@a BIGINT) as @a + 1;
相关命令
CREATE SQL FUNCTION:创建永久SQL UDF并存入Meta系统后,所有的查询操作都可以调用该函数。
DESC FUNCTION:通过FUNCTION命令创建的临时SQL UDF无法通过DESC FUNCTION来查看,DESC FUNCTION可以查看MaxCompute项目中永久存储的自定义函数的信息,包含函数名称、所有者、创建时间、类名和资源列表信息。
DROP FUNCTION:在MaxCompute项目中注销已注册的自定义函数。
SELECT FUNCTION:调用SQL UDF,临时SQL UDF仅支持在同脚本中调用,其他查询环境无法调用临时SQL UDF。