All Products
Search
Document Center

MaxCompute:Operasi fungsi

Last Updated:Mar 27, 2026

MaxCompute mendukung dua jenis fungsi: fungsi bawaan dan user-defined functions (UDF). Fungsi bawaan tersedia langsung tanpa memerlukan pengaturan tambahan, sedangkan UDF harus didaftarkan terlebih dahulu sebelum dapat dipanggil dalam Pernyataan SQL.

Topik ini mencakup operasi umum manajemen UDF: membuat, menghapus, dan melihat fungsi.

Ringkasan operasi

OperasiIzin yang diperlukanPlatform
Buat UDFIzin tulis pada fungsiKlien MaxCompute, Konsol DataWorks, MaxCompute Studio
Hapus UDFIzin Hapus pada fungsi
Lihat UDFIzin baca pada fungsi
Daftar semua UDFIzin daftar pada objek proyek
Daftar semua fungsi bawaanIzin daftar pada objek proyek

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Resource JAR atau Python yang berisi kode UDF, diunggah ke MaxCompute

  • Izin yang diperlukan untuk operasi tersebut (lihat tabel di atas)

Buat UDF

Mendaftarkan UDF ke dalam Proyek MaxCompute sehingga dapat dipanggil dalam Pernyataan SQL.

Batasan

  • Nama fungsi harus unik dalam satu proyek. Membuat fungsi dengan nama yang sama seperti fungsi yang sudah ada tidak diizinkan.

  • UDF tidak dapat menimpa fungsi bawaan. Hanya pemilik proyek yang dapat mendaftarkan UDF yang memiliki nama yang sama dengan fungsi bawaan. Jika UDF semacam itu dipanggil, peringatan akan muncul di Logview Summary setelah pekerjaan SQL selesai dijalankan.

Sintaks

create function <function_name> as '<package_to_class>' using '<resource_list>';

Parameter

ParameterWajibDeskripsi
function_nameYaNama UDF yang akan dibuat. Harus unik dalam proyek.
package_to_classYaPath kelas lengkap dari UDF. Sensitif terhadap huruf besar/kecil. Harus diapit tanda petik tunggal ('). Untuk UDF Java, tentukan path lengkap mulai dari nama package tingkat atas hingga nama kelas UDF. Untuk UDF Python, gunakan format script_name.ClassName.
resource_listYaDaftar nama resource yang dipisahkan koma, diapit tanda petik tunggal ('). Harus mencakup resource yang berisi kode UDF. Jika UDF memanggil Distributed Cache API untuk membaca file resource, sertakan juga file resource tersebut. Untuk mereferensikan resource dari proyek lain, gunakan format <project_name>/resources/<resource_name>.
Catatan

Nama resource Python tidak sensitif terhadap huruf besar/kecil di level dasar. Nama resource dasar ditentukan oleh nama yang digunakan saat pertama kali diunggah. Misalnya, jika Anda pertama kali mengunggah pyudf_test.py lalu menggantinya menjadi PYUDF_TEST.py, nama resource dasarnya tetap pyudf_test.py. Saat mendaftarkan UDF, nama kelas harus sesuai dengan nama dasar tersebut: pyudf_test.SampleUDF. Jalankan list resources; untuk memeriksa nama dasar semua resource.

Contoh

Contoh 1: UDF Java

Buat fungsi my_lower menggunakan kelas Java org.alidata.odps.udf.examples.Lower dalam my_lower.jar.

create function my_lower as 'org.alidata.odps.udf.examples.Lower' using 'my_lower.jar';

Contoh 2: UDF Python dari proyek lain

Buat fungsi my_lower menggunakan kelas Python MyLower dalam skrip pyudf_test.py, yang merupakan resource di test_project.

create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';

Contoh 3: user-defined table-valued function (UDTF) Java dengan beberapa resource

Buat test_udtf menggunakan kelas com.aliyun.odps.examples.udf.UDTFResource dalam udtfexample1.jar. Fungsi ini juga bergantung pada file resource, resource tabel, dan resource arsip.

create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1, test_archive.zip';

Hapus UDF

Menghapus UDF yang sudah ada dari Proyek MaxCompute.

Sintaks

drop function <function_name>;

Parameter

ParameterWajibDeskripsi
function_nameYaNama UDF yang akan dihapus.

Contoh

-- Hapus fungsi my_lower.
drop function my_lower;

Lihat UDF

Menampilkan metadata UDF tertentu: nama, pemilik, waktu pembuatan, kelas, dan daftar resource.

Sintaks

desc function <function_name>;

Parameter

ParameterWajibDeskripsi
function_nameYaNama UDF yang akan diperiksa.

Kolom output

BidangDeskripsi
NameNama UDF.
OwnerAkun yang mendaftarkan UDF.
Created TimeWaktu UDF dibuat.
ClassPath kelas UDF. Sensitif terhadap huruf besar/kecil.
ResourcesDaftar resource yang terkait dengan UDF.

Contoh

-- Lihat detail fungsi my_lower.
desc function my_lower;

Output:

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

Daftar semua UDF

Menampilkan semua UDF yang terdaftar dalam Proyek MaxCompute.

Sintaks

Gunakan salah satu perintah berikut:

list functions [-p <project_name>];
show functions;

Parameter

ParameterWajibDeskripsi
project_nameTidakNama Proyek MaxCompute yang akan diquery. Jika dihilangkan, proyek saat ini yang digunakan. Hanya didukung dengan list functions.

Contoh

list functions;

Output:

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

Kolom output adalah:

KolomDeskripsi
NameNama UDF.
OwnerAkun yang mendaftarkan UDF.
Create TimeWaktu UDF dibuat.
ClassPath kelas UDF. Kosong jika informasi kelas tidak tersedia.
ResourcesResource yang terkait dengan UDF. Kosong jika tidak ada resource yang tercatat.

Daftar semua fungsi bawaan

Menampilkan informasi tentang fungsi bawaan yang tersedia di MaxCompute, termasuk signature fungsi dan tipe data yang didukung.

Catatan

Perintah ini memerlukan Klien MaxCompute versi V0.43.0 atau lebih baru.

Sintaks

show builtin functions [<function_name>];

Parameter

ParameterWajibDeskripsi
function_nameTidakNama fungsi bawaan tertentu yang akan dicari. Jika dihilangkan, semua fungsi bawaan akan ditampilkan.

Contoh

show builtin functions;

Output (sebagian):

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)
......

Setiap baris dalam output mengikuti format: function_name function_type signature(s). Tipe fungsi adalah salah satu dari SCALAR, AGGREGATOR, atau WINDOW.