CREATE SQL FUNCTION

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语言定义函数。