MaxCompute は、ビルトイン関数とユーザー定義関数 (UDF) の2種類の関数をサポートしています。ビルトイン関数はすぐに利用可能で、セットアップは不要です。UDF は、SQL ステートメントで呼び出す前に登録する必要があります。
このトピックでは、UDF の一般的な管理操作である関数の作成、削除、表示について説明します。
操作概要
| 操作 | 必要な権限 | プラットフォーム |
|---|---|---|
| UDF の作成 | 関数に対する書き込み権限 | MaxCompute クライアント、DataWorks コンソール、MaxCompute Studio |
| UDF の削除 | 関数に対する削除権限 | — |
| UDF の表示 | 関数に対する読み取り権限 | — |
| すべての UDF のリスト | プロジェクトオブジェクトに対するリスト権限 | — |
| すべてのビルトイン関数のリスト | プロジェクトオブジェクトに対するリスト権限 | — |
前提条件
開始する前に、以下を確認してください。
UDF コードを含む JAR または Python リソースが MaxCompute にアップロードされていること
操作に必要な権限があること (上記の表を参照)
UDF の作成
MaxCompute プロジェクトに UDF を登録し、SQL ステートメントで呼び出せるようにします。
制限事項
関数名はプロジェクト内で一意である必要があります。既存の関数と同じ名前の関数を作成することはできません。
UDF はビルトイン関数を上書きできません。プロジェクトオーナーのみが、ビルトイン関数と名前を共有する UDF を登録できます。このような UDF が呼び出されると、SQL ジョブの実行後に Logview Summary に警告が表示されます。
構文
create function <function_name> as '<package_to_class>' using '<resource_list>';パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
function_name | はい | 作成する UDF の名前。プロジェクト内で一意である必要があります。 |
package_to_class | はい | `UDF の完全修飾クラスパス。大文字と小文字を区別します。シングルクォーテーション (`'`) で囲む必要があります。Java UDF の場合は、トップレベルのパッケージ名から UDF クラス名までの完全なパスを指定します。Python UDF の場合は、script_name.ClassName 形式を使用します。 |
resource_list | はい | 'カンマ区切りのリソース名のリスト。シングルクォーテーション (`'`) で囲みます。UDF コードを含むリソースを含める必要があります。UDF が Distributed Cache API を呼び出してリソースファイルを読み取る場合は、それらのリソースファイルも含まれます。別のプロジェクトからリソースを参照するには、<project_name>/resources/<resource_name> 形式を使用します。 |
Python リソース名は大文字と小文字を区別しません。基盤となるリソース名は、最初のアップロード時に使用された名前によって決定されます。たとえば、最初に pyudf_test.py をアップロードし、後で PYUDF_TEST.py に名前を変更しても、基盤となるリソース名は pyudf_test.py のままです。UDF を登録する際には、クラス名が基盤となる名前に一致する必要があります (pyudf_test.SampleUDF)。すべてのリソースの基盤となる名前を確認するには、list resources; を実行します。
例
例 1: Java UDF
my_lower 関数を、my_lower.jar 内の Java クラス org.alidata.odps.udf.examples.Lower を使用して作成します。
create function my_lower as 'org.alidata.odps.udf.examples.Lower' using 'my_lower.jar';例 2: 別のプロジェクトからの Python UDF
test_project 内のリソースである pyudf_test.py スクリプト内の Python クラス MyLower を使用して、my_lower 関数を作成します。
create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';例 3: 複数のリソースを持つ Java ユーザー定義テーブル関数 (UDTF)
udtfexample1.jar 内のクラス com.aliyun.odps.examples.udf.UDTFResource を使用して test_udtf を作成します。この関数は、ファイルリソース、テーブルリソース、およびアーカイブリソースにも依存します。
create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1, test_archive.zip';UDF の削除
既存の UDF を MaxCompute プロジェクトから削除します。
構文
drop function <function_name>;パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
function_name | はい | 削除する UDF の名前。 |
例
-- my_lower 関数を削除します。
drop function my_lower;UDF の表示
特定の UDF のメタデータ (名前、所有者、作成時間、クラス、リソースリスト) を返します。
構文
desc function <function_name>;パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
function_name | はい | 検査する UDF の名前。 |
出力フィールド
| フィールド | 説明 |
|---|---|
Name | UDF の名前。 |
Owner | UDF を登録したアカウント。 |
Created Time | UDF が作成された時間。 |
Class | UDF のクラスパス。大文字と小文字を区別します。 |
Resources | UDF に関連付けられたリソースリスト。 |
例
-- 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すべての UDF のリスト
MaxCompute プロジェクトに登録されているすべての UDF を返します。
構文
以下のいずれかのコマンドを使用します。
list functions [-p <project_name>];show functions;パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
project_name | いいえ | クエリする MaxCompute プロジェクトの名前。省略した場合、現在のプロジェクトが使用されます。list functions でのみサポートされます。 |
例
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出力列は次のとおりです。
| 列 | 説明 |
|---|---|
Name | UDF の名前。 |
Owner | UDF を登録したアカウント。 |
Create Time | UDF が作成された時間。 |
Class | UDF のクラスパス。クラス情報が利用できない場合は空です。 |
Resources | UDF に関連付けられたリソース。リソースが記録されていない場合は空です。 |
すべてのビルトイン関数のリスト
MaxCompute で利用可能なビルトイン関数に関する情報 (関数シグネチャやサポートされているデータの型を含む) を返します。
このコマンドには、MaxCompute クライアント V0.43.0 以降が必要です。
構文
show builtin functions [<function_name>];パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
function_name | いいえ | 検索する特定のビルトイン関数の名前。省略した場合、すべてのビルトイン関数が返されます。 |
例
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)
......出力の各行は、function_name function_type signature(s) の形式に従います。関数タイプは、SCALAR、AGGREGATOR、または WINDOW のいずれかです。