MaxCompute menyediakan fungsi bawaan untuk tugas pemrosesan data umum. Jika fungsi bawaan tidak dapat merepresentasikan logika Anda, perluas MaxCompute dengan user-defined function (UDF).
Fungsi bawaan memiliki performa lebih baik dibandingkan UDF. Gunakan fungsi bawaan sebisa mungkin dan buat UDF hanya jika fungsi bawaan tidak mencakup logika yang Anda butuhkan.
Kapan menggunakan UDF
Gunakan UDF ketika logika transformasi Anda tidak dapat diekspresikan dengan fungsi bawaan. Skenario umum meliputi:
-
Penguraian string kustom atau transformasi spesifik bisnis
-
Analisis data spasial
-
Pipa pemrosesan data lintas proyek
Untuk agregasi standar, operasi string, dan aritmetika, gunakan fungsi bawaan sebagai gantinya karena tidak memerlukan penerapan dan berkinerja jauh lebih baik dalam skala besar.
Jika UDF dan fungsi bawaan memiliki nama yang sama, MaxCompute akan memanggil UDF tersebut. Untuk memanggil fungsi bawaan, tambahkan awalan::. Contohnya:select ::concat('ab', 'c');
Jenis UDF
Dalam arti luas, UDF mencakup user-defined scalar function (UDF), user-defined aggregate function (UDAF), dan user-defined table-valued function (UDTF). Dalam arti sempit, UDF hanya merujuk pada user-defined scalar function.
MaxCompute mendukung tiga jenis inti UDF.
| Type | Pemetaan input ke output | Perilaku |
|---|---|---|
| UDF (user-defined scalar function) | Satu ke satu | Setiap baris input menghasilkan satu nilai output |
| UDTF (user-defined table-valued function) | Satu ke banyak | Setiap baris input menghasilkan beberapa nilai dalam bentuk tabel |
| UDAF (user-defined aggregate function) | Banyak ke satu | Beberapa baris input diagregasi menjadi satu nilai output |
MaxCompute juga menyediakan jenis UDF khusus untuk skenario tertentu.
| Type | Kasus penggunaan |
|---|---|
| Code-embedded UDFs | Menyematkan kode Java atau Python langsung dalam skrip SQL untuk menyederhanakan pengembangan dan meningkatkan keterbacaan |
| SQL UDFs | Mengenkapsulasi logika SQL yang dapat digunakan ulang untuk mengurangi duplikasi kode |
| Geospatial UDFs | Menerapkan fungsi geospasial Hive untuk menganalisis data spasial di MaxCompute |
Batasan dan pertimbangan
Batasan keras
Akses Internet — UDF tidak dapat mengakses Internet secara default. Untuk mengaktifkan akses Internet, ajukan permohonan koneksi jaringan. Setelah disetujui, tim dukungan teknis MaxCompute akan menghubungi Anda untuk menyiapkan koneksi tersebut. Untuk detailnya, lihat Network Connection Request FormNetwork connection process.
Akses VPC — UDF tidak dapat mengakses resource di virtual private cloud (VPC) secara default. Untuk mengaktifkan akses VPC, buat koneksi jaringan antara MaxCompute dan VPC tersebut. Untuk detailnya, lihat Use UDFs to access resources in VPCs.
Jenis tabel yang tidak didukung — UDF, UDAF, dan UDTF tidak dapat membaca data dari jenis tabel berikut:
-
Tabel yang telah menjalani schema evolution
-
Tabel yang berisi tipe data kompleks
-
Tabel yang berisi tipe data JSON
-
Tabel transaksional
Pertimbangan
Penggunaan memori — Saat UDF memproses dataset besar dengan kesenjangan data, pekerjaan komputasi mungkin melebihi alokasi memori JVM default. Untuk menaikkan batas memori, jalankan perintah berikut pada tingkat sesi:
set odps.sql.udf.joiner.jvm.memory=xxxx;
Untuk informasi lebih lanjut, lihat FAQ about MaxCompute UDFs.
Kembangkan UDF
Proses pengembangan untuk code-embedded UDFs, SQL UDFs, dan Geospatial UDFs berbeda dari alur kerja standar UDF, UDTF, dan UDAF. Lihat dokumentasi terkait untuk jenis-jenis tersebut.
Java
Gambar berikut menunjukkan alur kerja pengembangan UDF Java.
| Langkah | Wajib | Aksi | Platform | Catatan |
|---|---|---|---|---|
| 1 | Opsional | Tambahkan dependensi odps-sdk-udf ke file POM Anda |
IntelliJ IDEA (Maven) | Cari odps-sdk-udf di repositori Maven untuk mendapatkan versi terbaru. Contoh: 0.29.10-public |
| 2 | Wajib | Tulis kode UDF | IntelliJ IDEA (Maven), MaxCompute Studio | Ikuti Spesifikasi dan proses umum pengembangan UDF (Java) |
| 3 | Wajib | Debug di mesin lokal Anda atau jalankan pengujian unit | — | Verifikasi bahwa output sesuai ekspektasi |
| 4 | Wajib | Paket kode menjadi file JAR | — | — |
| 5 | Wajib | Unggah JAR tersebut sebagai resource ke proyek MaxCompute Anda | Konsol DataWorks, Klien MaxCompute, MaxCompute Studio | Tersedia tiga metode: Konsol DataWorks (visual), Klien MaxCompute (SQL), atau MaxCompute Studio (kode). Lihat panduan spesifik platform yang ditautkan. |
| 6 | Wajib | Buat UDF dari JAR yang diunggah | — | — |
| 7 | Opsional | Panggil UDF dalam kueri | — | — |
Python
Gambar berikut menunjukkan alur kerja pengembangan UDF Python.
| Langkah | Wajib | Aksi | Platform | Catatan |
|---|---|---|---|---|
| 1 | Wajib | Tulis kode UDF | MaxCompute Studio | Ikuti Spesifikasi dan proses umum pengembangan UDF (Python 3) atau Python 2 |
| 2 | Wajib | Debug di mesin lokal Anda atau jalankan pengujian unit | — | Verifikasi bahwa output sesuai ekspektasi |
| 3 | Wajib | Unggah file Python dan resource yang diperlukan (file resource, table resource, paket pihak ketiga) ke proyek MaxCompute Anda | Konsol DataWorks, Klien MaxCompute, MaxCompute Studio | Tersedia tiga metode: Konsol DataWorks (visual), Klien MaxCompute (SQL), atau MaxCompute Studio (kode). Lihat panduan spesifik platform yang ditautkan. |
| 4 | Wajib | Buat UDF dari file yang diunggah | — | — |
| 5 | Opsional | Panggil UDF dalam kueri | — | — |
Referensi SDK
SDK berikut mendukung pengembangan UDF Java. Untuk detail paket dan kelas, lihat MaxCompute SDK.
| SDK | Deskripsi |
|---|---|
| odps-sdk-core | Mengelola resource dasar MaxCompute |
| odps-sdk-commons | Utilitas umum untuk Java |
| odps-sdk-udf | API UDF |
| odps-sdk-mapred | API MapReduce |
| odps-sdk-graph | API graf |
Panggil UDF
Setelah mendaftarkan UDF, panggil seperti halnya fungsi bawaan.
Dalam satu proyek — Panggil UDF secara langsung, seperti fungsi bawaan lainnya.
Lintas proyek — Untuk menggunakan UDF dari proyek B di proyek A, rujuk dengan awalan nama proyek:
select B:udf_in_other_project(arg0, arg1) as res from table_t;
Untuk penyiapan berbagi lintas proyek, lihat Cross-project resource access based on packages.
Langkah selanjutnya
Jelajahi contoh end-to-end untuk melihat praktik pengembangan UDF: