函數(shù)操作
您可以使用系統(tǒng)的內(nèi)建函數(shù)或自定義函數(shù)(UDF)完成計算。內(nèi)建函數(shù)可直接調(diào)用,自定義函數(shù)需要您自定義后才可調(diào)用。本文為您介紹如何注冊、注銷及查看自定義函數(shù)等常用函數(shù)操作。
函數(shù)操作常用命令如下。
類型 | 功能 | 角色 | 操作入口 |
在MaxCompute項目中注冊自定義函數(shù)。 | 具備更新函數(shù)權(quán)限(Write)的用戶。 | 本文中的命令您可以在如下工具平臺執(zhí)行: | |
在MaxCompute項目中注銷已注冊的自定義函數(shù)。 | 具備注銷函數(shù)權(quán)限(Delete)的用戶。 | ||
查看MaxCompute項目中指定自定義函數(shù)的信息。 | 具備查看函數(shù)權(quán)限(Read)的用戶。 | ||
查看MaxCompute項目中所有自定義函數(shù)。 | 具備查看項目對象列表權(quán)限(List)的用戶。 | ||
查看MaxCompute項目中所有內(nèi)建函數(shù)信息。 | 具備查看項目對象列表權(quán)限(List)的用戶。 |
注冊函數(shù)
在MaxCompute項目中注冊自定義函數(shù)。
使用限制
函數(shù)名稱全局唯一,同名函數(shù)只能注冊一次。
自定義函數(shù)無法覆蓋系統(tǒng)內(nèi)建函數(shù)。只有項目Owner才有權(quán)利覆蓋內(nèi)建函數(shù)。如果您使用了覆蓋內(nèi)建函數(shù)的自定義函數(shù),在SQL執(zhí)行結(jié)束后,會在作業(yè)相應(yīng)Logview的Summary中打印出Warning信息。
命令格式
create function <function_name> as <'package_to_class'> using <'resource_list'>;
參數(shù)說明
function_name:必填。新建的自定義函數(shù)名稱。
package_to_class:必填。自定義函數(shù)的類,區(qū)分大小寫,需要用英文引號(' ')引起來。
Java UDF:此名稱為從頂層包名一直到實(shí)現(xiàn)UDF類的類名。
Python UDF:此名稱為Python腳本名.類名。
說明Python腳本名為底層唯一標(biāo)識的資源名。MaxCompute的資源名大小寫不敏感,例如第一次上傳資源時資源名為pyudf_test.py,后續(xù)在DataStudio重命名資源或用MaxCompute客戶端覆蓋資源時將資源名重命名為PYUDF_TEST.py,此時底層唯一標(biāo)識的資源名仍然為pyudf_test.py。因此注冊自定義函數(shù)時,類名仍然需要填pyudf_test.SampleUDF。您可以通過
list resources;
命令查看所有資源在底層唯一標(biāo)識的資源名。
resource_list:必填。自定義函數(shù)所用到的資源列表。
此資源列表必須包括自定義函數(shù)代碼所在的資源,且資源已經(jīng)上傳至MaxCompute。
如果您的代碼通過Distributed Cache接口讀取資源文件,此列表中還要包括自定義函數(shù)所讀取的資源文件列表。
資源列表由多個資源名組成,資源名之間用英文逗號(,)分隔,且資源列表必須用英文引號(' ')引起來。
如果需要指定資源所在的項目,格式為
<project_name>/resources/<resource_name>
。
使用示例
示例1:創(chuàng)建函數(shù)
my_lower
。假設(shè)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:創(chuàng)建函數(shù)
my_lower
。假設(shè)Python UDF類MyLower在項目test_project
的腳本pyudf_test.py中。create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';
示例3:創(chuàng)建函數(shù)
test_udtf
。假設(shè)Java UDF類com.aliyun.odps.examples.udf.UDTFResource
是在udtfexample1.jar中,同時該函數(shù)還依賴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';
注銷函數(shù)
在MaxCompute項目中注銷已注冊的自定義函數(shù)。
命令格式
drop function <function_name>;
參數(shù)說明
function_name:必填。已注冊的自定義函數(shù)名稱。
使用示例
--注銷my_lower函數(shù)。 drop function my_lower;
查看函數(shù)
查看MaxCompute項目中指定自定義函數(shù)的信息,包含函數(shù)名稱、所有者、創(chuàng)建時間、類名和資源列表信息。
命令格式
desc function <function_name>;
參數(shù)說明
function_name:必填。已存在的函數(shù)名稱。
返回值說明
Name:自定義函數(shù)名稱。
Owner:自定義函數(shù)的所有者賬號。
Created Time:自定義函數(shù)的注冊時間。
Class:自定義函數(shù)的類,區(qū)分大小寫。
Resources:自定義函數(shù)所用到的資源列表。
使用示例
--查看函數(shù)my_lower的信息。 desc function my_lower;
返回結(jié)果如下。
Name my_lower Owner ALIYUN$**** Created Time 2020-06-18 15:50:19 Class org.alidata.odps.udf.examples.Lower Resources project_name/my_lower.jar
查看自定義函數(shù)列表
查看MaxCompute項目中所有自定義函數(shù)。
命令格式。以下兩種命令格式含義相同,均可使用。
list functions [-p <project_name>];
show functions;
參數(shù)說明
project_name:可選。指定MaxCompute項目的名稱。
使用示例
list functions;
返回結(jié)果如下。
Name Owner Create Time Class Resources ipv4_ipv6_aton ALIYUN$****@aliyun.com 2021-11-15 13:42:14 com.aliyun.odps.udf.udfFunction.IpLocation ipv4.txt,ipv6.txt,udf-1.0-SNAPSHOT.jar Lower_test ALIYUN$****@aliyun.com 2021-08-25 15:51:22 com.aliyun.odps.udf.example.Lower udf-1.0-SNAPSHOT.jar my_add ALIYUN$****@aliyun.com 2021-05-08 11:26:02 my_index ALIYUN$****@aliyun.com 2021-08-25 12:01:05 com.aliyun.odps.examples.udf.UdfArray udf-1.0-SNAPSHOT.jar my_sum ALIYUN$****@aliyun.com 2021-05-08 10:24:58 my_udtf ALIYUN$****@aliyun.com 2021-02-23 11:37:30 com.aliyun.odps.examples.udf.UDTFResource udf-1.0-SNAPSHOT.jar numpy ALIYUN$****@aliyun.com 2020-11-11 14:12:50 numpy.TryImport numpy.py,numpy-1.19.4-cp37-cp37m-manylinux1_x86_64.zip ST_Aggr_ConvexHull ALIYUN$****@aliyun.com 2021-03-18 17:06:29 com.esri.hadoop.hive.ST_Aggr_ConvexHull esri-geometry-api.jar,spatial-sdk-hive.jar ST_Aggr_Intersection ALIYUN$****@aliyun.com 2021-03-18 17:06:29 com.esri.hadoop.hive.ST_Aggr_Intersection esri-geometry-api.jar,spatial-sdk-hive.jar ST_Aggr_Union ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_Aggr_Union esri-geometry-api.jar,spatial-sdk-hive.jar ST_Area ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_Area esri-geometry-api.jar,spatial-sdk-hive.jar ST_AsBinary ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_AsBinary esri-geometry-api.jar,spatial-sdk-hive.jar ST_AsGeoJson ALIYUN$****@aliyun.com 2021-03-18 17:06:49 com.esri.hadoop.hive.ST_AsGeoJson esri-geometry-api.jar,spatial-sdk-hive.jar ST_AsJson ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsJson esri-geometry-api.jar,spatial-sdk-hive.jar ST_AsShape ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsShape esri-geometry-api.jar,spatial-sdk-hive.jar ST_AsText ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsText esri-geometry-api.jar,spatial-sdk-hive.jar ST_Bin ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_Bin esri-geometry-api.jar,spatial-sdk-hive.jar ST_BinEnvelope ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_BinEnvelope esri-geometry-api.jar,spatial-sdk-hive.jar ST_Boundary ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Boundary esri-geometry-api.jar,spatial-sdk-hive.jar ST_Buffer ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Buffer esri-geometry-api.jar,spatial-sdk-hive.jar ST_Centroid ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Centroid esri-geometry-api.jar,spatial-sdk-hive.jar ST_Contains ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Contains esri-geometry-api.jar,spatial-sdk-hive.jar ST_ConvexHull ALIYUN$****@aliyun.com 2021-03-18 17:07:13 com.esri.hadoop.hive.ST_ConvexHull esri-geometry-api.jar,spatial-sdk-hive.jar ST_CoordDim ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_CoordDim esri-geometry-api.jar,spatial-sdk-hive.jar ST_Crosses ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Crosses esri-geometry-api.jar,spatial-sdk-hive.jar ST_Difference ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Difference esri-geometry-api.jar,spatial-sdk-hive.jar ST_Dimension ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Dimension esri-geometry-api.jar,spatial-sdk-hive.jar ST_Disjoint ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_Disjoint esri-geometry-api.jar,spatial-sdk-hive.jar ST_Distance ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_Distance esri-geometry-api.jar,spatial-sdk-hive.jar ST_EndPoint ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_EndPoint esri-geometry-api.jar,spatial-sdk-hive.jar ST_Envelope ALIYUN$****@aliyun.com 2021-03-18 17:07:32 com.esri.hadoop.hive.ST_Envelope esri-geometry-api.jar,spatial-sdk-hive.jar ST_EnvIntersects ALIYUN$****@aliyun.com 2021-03-18 17:07:32 com.esri.hadoop.hive.ST_EnvIntersects esri-geometry-api.jar,spatial-sdk-hive.jar ST_Equals ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_Equals esri-geometry-api.jar,spatial-sdk-hive.jar ST_ExteriorRing ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_ExteriorRing esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeodesicLengthWGS84 ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_GeodesicLengthWGS84 esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomCollection ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_GeomCollection esri-geometry-api.jar,spatial-sdk-hive.jar ST_Geometry ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_Geometry esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeometryN ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeometryN esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeometryType ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeometryType esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomFromGeoJson ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeomFromGeoJson esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomFromJson ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeomFromJson esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomFromShape ALIYUN$****@aliyun.com 2021-03-18 17:07:56 com.esri.hadoop.hive.ST_GeomFromShape esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomFromText ALIYUN$****@aliyun.com 2021-03-18 17:08:10 com.esri.hadoop.hive.ST_GeomFromText esri-geometry-api.jar,spatial-sdk-hive.jar ST_GeomFromWKB ALIYUN$****@aliyun.com 2021-03-18 17:08:10 com.esri.hadoop.hive.ST_GeomFromWKB esri-geometry-api.jar,spatial-sdk-hive.jar
查看內(nèi)建函數(shù)列表
查看MaxCompute項目中所有內(nèi)建函數(shù)信息。
命令格式
show builtin functions [<function_name>];
參數(shù)說明
function_name:可選。MaxCompute項目中指定的內(nèi)建函數(shù)名稱。
使用示例
show builtin functions;
返回結(jié)果如下。
ID = 20230307081023424gef2hwowr1 ::ABS SCALAR DECIMAL(?,?) ABS(DECIMAL(?,?) arg0),DOUBLE ABS(DOUBLE arg0),BIGINT ABS(BIGINT arg0),INT ABS(INT arg0) ::ACOS SCALAR DOUBLE ACOS(DOUBLE arg0),DOUBLE ACOS(DECIMAL(?,?) arg0) ::ADD_MONTHS SCALAR STRING ADD_MONTHS(DATE arg0, BIGINT arg1),STRING ADD_MONTHS(TIMESTAMP arg0, BIGINT arg1),STRING ADD_MONTHS(STRING arg0, BIGINT arg1) ::ALL_MATCH SCALAR BOOLEAN ALL_MATCH(ARRAY<T> arg0, java.util.function.Function<T, java.lang.Boolean> arg1) ::ANY_MATCH SCALAR BOOLEAN ANY_MATCH(ARRAY<T> arg0, java.util.function.Function<T, java.lang.Boolean> arg1) ::ANY_VALUE AGGREGATOR T ANY_VALUE([DISTINCT] T arg1) ::APPROX_DISTINCT AGGREGATOR BIGINT APPROX_DISTINCT([DISTINCT] P arg1, DOUBLE arg2),BIGINT APPROX_DISTINCT([DISTINCT] P arg1) ::ARG_MAX AGGREGATOR R ARG_MAX([DISTINCT] T arg1, R arg2) ::ARG_MIN AGGREGATOR R ARG_MIN([DISTINCT] T arg1, R arg2) ::ARRAY SCALAR ARRAY<STRING> ARRAY(),ARRAY<T> ARRAY(T arg0...) ::ARRAYS_OVERLAP SCALAR BOOLEAN ARRAYS_OVERLAP(ARRAY<T> arg0, ARRAY<T> arg1) ::ARRAYS_ZIP SCALAR null ::ARRAY_CONTAINS SCALAR BOOLEAN ARRAY_CONTAINS(ARRAY<T> arg0, T arg1) ::ARRAY_DISTINCT SCALAR ARRAY<T> ARRAY_DISTINCT(ARRAY<T> arg0) ::ARRAY_EXCEPT SCALAR ARRAY<T> ARRAY_EXCEPT(ARRAY<T> arg0, ARRAY<T> arg1) ::ARRAY_INTERSECT SCALAR null ::ARRAY_JOIN SCALAR STRING ARRAY_JOIN(ARRAY<STRING> arg0, STRING arg1, STRING arg2),STRING ARRAY_JOIN(ARRAY<STRING> arg0, STRING arg1) ::ARRAY_MAX SCALAR T ARRAY_MAX(ARRAY<T> arg0) ::ARRAY_MIN SCALAR T ARRAY_MIN(ARRAY<T> arg0) ::ARRAY_NORMALIZE SCALAR ARRAY<FLOAT> ARRAY_NORMALIZE(ARRAY<FLOAT> arg0, FLOAT arg1),ARRAY<DOUBLE> ARRAY_NORMALIZE(ARRAY<DOUBLE> arg0, DOUBLE arg1) ::ARRAY_POSITION SCALAR BIGINT ARRAY_POSITION(ARRAY<T> arg0, T arg1, BIGINT arg2),BIGINT ARRAY_POSITION(ARRAY<T> arg0, T arg1) ::ARRAY_REDUCE SCALAR OUT ARRAY_REDUCE(ARRAY<IN> arg0, BUF arg1, java.util.function.BiFunction<BUF, IN, BUF> arg2, java.util.function.Function<BUF, OUT> arg3) ::ARRAY_REMOVE SCALAR ARRAY<T> ARRAY_REMOVE(ARRAY<T> arg0, T arg1) ::ARRAY_REPEAT SCALAR ARRAY<T> ARRAY_REPEAT(T arg0, BIGINT arg1) ::ARRAY_SORT SCALAR ARRAY<T> ARRAY_SORT(ARRAY<T> arg0, java.util.function.BiFunction<T, T, java.lang.Long> arg1) ::ARRAY_UNION SCALAR ARRAY<T> ARRAY_UNION(ARRAY<T> arg0, ARRAY<T> arg1) ::ASCII SCALAR BIGINT ASCII(STRING arg0) ::ASIN SCALAR DOUBLE ASIN(DOUBLE arg0),DOUBLE ASIN(DECIMAL(?,?) arg0) ::ATAN SCALAR DOUBLE ATAN(DECIMAL(?,?) arg0),DOUBLE ATAN(DOUBLE arg0) ::ATAN2 SCALAR DOUBLE ATAN2(DECIMAL(?,?) arg0, DECIMAL(?,?) arg1),DOUBLE ATAN2(DOUBLE arg0, DOUBLE arg1) ::AVG AGGREGATOR DECIMAL(?,?) AVG([DISTINCT] DECIMAL(?,?) arg1),DOUBLE AVG([DISTINCT] DOUBLE arg1) ::AVG WINDOW DOUBLE AVG([DISTINCT] DOUBLE arg0),DECIMAL(?,?) AVG([DISTINCT] DECIMAL(?,?) arg0) ::BASE64 SCALAR STRING BASE64(BINARY arg0) ::BIN SCALAR STRING BIN(BIGINT arg0) ::BITAND SCALAR BIGINT BITAND(BIGINT arg0, BIGINT arg1) ::BITNOT SCALAR BIGINT BITNOT(BIGINT arg0) ::BITOR SCALAR BIGINT BITOR(BIGINT arg0, BIGINT arg1) ::BITWISE_AND_AGG AGGREGATOR BIGINT BITWISE_AND_AGG([DISTINCT] BIGINT arg1) ::BITWISE_OR_AGG AGGREGATOR BIGINT BITWISE_OR_AGG([DISTINCT] BIGINT arg1) ::BITXOR SCALAR BIGINT BITXOR(BIGINT arg0, BIGINT arg1) ::BROUND SCALAR DOUBLE BROUND(DOUBLE arg0, BIGINT arg1),DOUBLE BROUND(DOUBLE arg0) ......
show builtin functions;
命令需要在MaxCompute客戶端(odpscmd)0.43.0及以上版本中執(zhí)行。