全部產品
Search
文件中心

MaxCompute:函數操作

更新時間:Jun 19, 2024

您可以使用系統的內建函數或自訂函數(UDF)完成計算。內建函數可直接調用,自訂函數需要您自訂後才可調用。本文為您介紹如何註冊、登出及查看自訂函數等常用函數操作。

函數操作常用命令如下。

類型

功能

角色

操作入口

註冊函數

在MaxCompute專案中註冊自訂函數。

具備更新函數許可權(Write)的使用者。

本文中的命令您可以在如下工具平台執行:

登出函數

在MaxCompute專案中登出登入的自訂函數。

具備忘銷函數許可權(Delete)的使用者。

查看函數

查看MaxCompute專案中指定自訂函數的資訊。

具備查看函數許可權(Read)的使用者。

查看自訂函數列表

查看MaxCompute專案中所有自訂函數。

具備查看專案對象列表許可權(List)的使用者。

查看內建函數列表

查看MaxCompute專案中所有內建函數資訊。

具備查看專案對象列表許可權(List)的使用者。

註冊函數

在MaxCompute專案中註冊自訂函數。

  • 使用限制

    • 函數名稱全域唯一,同名函數只能註冊一次。

    • 自訂函數無法覆蓋系統內建函數。只有專案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 resources;命令查看所有資源在底層唯一標識的資源名。

    • resource_list:必填。自訂函數所用到的資源清單。

      • 此資源清單必須包括自訂函數代碼所在的資源,且資源已經上傳至MaxCompute。

      • 如果您的代碼通過Distributed Cache介面讀取資源檔,此列表中還要包括自訂函數所讀取的資源檔列表。

      • 資源清單由多個資源名組成,資源名之間用英文逗號(,)分隔,且資源清單必須用英文引號(' ')引起來。

      • 如果需要指定資源所在的專案,格式為<project_name>/resources/<resource_name>

  • 使用樣本

    • 樣本1:建立函數my_lower。假設Java UDF類org.alidata.odps.udf.examples.Lowermy_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';

登出函數

在MaxCompute專案中登出登入的自訂函數。

  • 命令格式

    drop function <function_name>;
  • 參數說明

    function_name:必填。登入的自訂函數名稱。

  • 使用樣本

    --登出my_lower函數。
    drop function my_lower;

查看函數

查看MaxCompute專案中指定自訂函數的資訊,包含函數名稱、所有者、建立時間、類名和資源清單資訊。

  • 命令格式

    desc function <function_name>;
  • 參數說明

    function_name:必填。已存在的函數名稱。

  • 傳回值說明

    • Name:自訂函數名稱。

    • Owner:自訂函數的所有者帳號。

    • Created Time:自訂函數的註冊時間。

    • Class:自訂函數的類,區分大小寫。

    • Resources:自訂函數所用到的資源清單。

  • 使用樣本

    --查看函數my_lower的資訊。
    desc function my_lower;

    返回結果如下。

    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

查看自訂函數列表

查看MaxCompute專案中所有自訂函數。

  • 命令格式。以下兩種命令格式含義相同,均可使用。

    • list functions [-p <project_name>];
    • show functions;
  • 參數說明

    project_name:可選。指定MaxCompute專案的名稱。

  • 使用樣本

    list functions;

    返回結果如下。

    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

查看內建函數列表

查看MaxCompute專案中所有內建函數資訊。

  • 命令格式

    show builtin functions [<function_name>];
  • 參數說明

    function_name:可選。MaxCompute專案中指定的內建函數名稱。

  • 使用樣本

    show builtin functions;

    返回結果如下。

    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及以上版本中執行。