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
| Operasi | Izin yang diperlukan | Platform |
|---|---|---|
| Buat UDF | Izin tulis pada fungsi | Klien MaxCompute, Konsol DataWorks, MaxCompute Studio |
| Hapus UDF | Izin Hapus pada fungsi | — |
| Lihat UDF | Izin baca pada fungsi | — |
| Daftar semua UDF | Izin daftar pada objek proyek | — |
| Daftar semua fungsi bawaan | Izin 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
| Parameter | Wajib | Deskripsi |
|---|---|---|
function_name | Ya | Nama UDF yang akan dibuat. Harus unik dalam proyek. |
package_to_class | Ya | Path 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_list | Ya | Daftar 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>. |
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
| Parameter | Wajib | Deskripsi |
|---|---|---|
function_name | Ya | Nama 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
| Parameter | Wajib | Deskripsi |
|---|---|---|
function_name | Ya | Nama UDF yang akan diperiksa. |
Kolom output
| Bidang | Deskripsi |
|---|---|
Name | Nama UDF. |
Owner | Akun yang mendaftarkan UDF. |
Created Time | Waktu UDF dibuat. |
Class | Path kelas UDF. Sensitif terhadap huruf besar/kecil. |
Resources | Daftar 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.jarDaftar semua UDF
Menampilkan semua UDF yang terdaftar dalam Proyek MaxCompute.
Sintaks
Gunakan salah satu perintah berikut:
list functions [-p <project_name>];show functions;Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
project_name | Tidak | Nama 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.jarKolom output adalah:
| Kolom | Deskripsi |
|---|---|
Name | Nama UDF. |
Owner | Akun yang mendaftarkan UDF. |
Create Time | Waktu UDF dibuat. |
Class | Path kelas UDF. Kosong jika informasi kelas tidak tersedia. |
Resources | Resource 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.
Perintah ini memerlukan Klien MaxCompute versi V0.43.0 atau lebih baru.
Sintaks
show builtin functions [<function_name>];Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
function_name | Tidak | Nama 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.