在MaxCompute项目中注册自定义函数。
前提条件
注册自定义函数前,请先使用add jar <localfile> [comment '<comment>'][-f];
命令将自定义函数添加至MaxCompute项目中。详情请参见ADD JAR。
使用限制
函数名称全局唯一,同名函数只能注册一次。
自定义函数无法覆盖系统内建函数。只有项目Owner才有权利覆盖内建函数。如果您使用了覆盖内建函数的自定义函数,在SQL执行结束后,会在作业相应Logview的Summary中打印出Warning信息。
命令格式
create function <function_name> as <'package_to_class'> using <'resource_list'>;
参数说明
function_name:必填。新建的自定义函数名称。
package_to_class:必填。自定义函数的类,区分大小写,需要用英文引号(' ')引起来。
Java UDF:此名称为从顶层包名一直到实现UDF类的类名。
Python UDF:此名称为Python脚本名.类名。
说明Python脚本名为底层唯一标识的资源名。MaxCompute的资源名大小写不敏感,例如第一次上传资源时资源名为pyudf_test.py,后续在DataStudio重命名资源或用MaxCompute客户端覆盖资源时将资源名重命名为PYUDF_TEST.py,此时底层唯一标识的资源名仍然为pyudf_test.py。因此注册自定义函数时,类名仍然需要填pyudf_test.SampleUDF。您可以通过
list resource;
命令查看所有资源在底层唯一标识的资源名。
resource_list:必填。自定义函数所用到的资源列表。
此资源列表必须包括自定义函数代码所在的资源,且资源已经上传至MaxCompute。
如果您的代码通过Distributed Cache接口读取资源文件,此列表中还要包括自定义函数所读取的资源文件列表。
资源列表由多个资源名组成,资源名之间用英文逗号(,)分隔,且资源列表必须用英文引号(' ')引起来。
如果需要指定资源所在的项目,格式为
<project_name>/resources/<resource_name>
。
使用示例
示例1:创建函数
my_lower
。假设Java UDF类org.alidata.odps.udf.examples.Lower
在my_lower.jar中。create function my_lower as 'org.alidata.odps.udf.examples.Lower' using 'my_lower.jar';
示例2:创建函数
my_lower
。假设Python UDF类MyLower在项目test_project
的脚本pyudf_test.py中。create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';
示例3:创建函数
test_udtf
。假设Java UDF类com.aliyun.odps.examples.udf.UDTFResource
是在udtfexample1.jar中,同时该函数还依赖FILE资源file_resource.txt、Table资源table_resource1以及Archive资源test_archive.zip。create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1, test_archive.zip';
相关命令
FUNCTION:如果您不需要把SQL语言定义函数存入MaxCompute的Meta系统,可以使用临时SQL语言定义函数。临时SQL语言定义函数只在当前脚本有效。
DELETE FUNCTION:删除函数。您可以编写自定义函数并在MaxCompute SQL中使用入口对象的delete_function()方法来删除函数。
DROP FUNCTION:在MaxCompute项目中注销已注册的自定义函数。
DESC FUNCTION:查看MaxCompute项目中指定自定义函数的信息,包含函数名称、所有者、创建时间、类名和资源列表信息。
LIST FUNCTIONS:查看MaxCompute项目中所有自定义函数的信息。
UPDATE FUNCTION:更新函数。您可以编写自定义函数并在MaxCompute SQL中对函数调用update方法来更新函数。