MaxCompute memungkinkan Anda menulis fungsi agregat yang didefinisikan pengguna (UDAF) dalam Java atau Python untuk memperluas kemampuan fungsi MaxCompute dan menyesuaikan dengan kebutuhan bisnis. Topik ini menjelaskan jenis, batasan, catatan penggunaan, proses pengembangan, serta cara menggunakan UDAF.
Informasi latar belakang
Pemetaan satu-ke-banyak dibuat antara data input dan output dari sebuah UDAF. Beberapa catatan input diagregasi untuk menghasilkan satu nilai output. MaxCompute mendukung penulisan UDAF dalam Java atau Python. Tabel berikut menggambarkan dua jenis UDAF.
Jenis UDAF | Deskripsi |
Java UDAF | Jenis UDAF ini ditulis dalam Java untuk mengimplementasikan logika fungsinya. Untuk informasi lebih lanjut, lihat Java UDAF. |
Python UDAF | Jenis UDAF ini ditulis dalam Python untuk mengimplementasikan logika fungsinya. Python UDAF diklasifikasikan menjadi Python 2 UDAF dan Python 3 UDAF.
|
Batasan
Akses Internet menggunakan UDF
Secara default, MaxCompute tidak mengizinkan akses Internet melalui UDF. Jika Anda perlu mengakses Internet menggunakan UDF, isi formulir aplikasi koneksi jaringan sesuai kebutuhan bisnis Anda dan ajukan aplikasi tersebut. Setelah disetujui, tim dukungan teknis MaxCompute akan menghubungi Anda untuk membantu membangun koneksi jaringan. Untuk informasi lebih lanjut tentang cara mengisi formulir aplikasi koneksi jaringan, lihat Proses Koneksi Jaringan.
Akses VPC menggunakan UDF
Secara default, MaxCompute tidak mengizinkan akses sumber daya dalam VPC melalui UDF. Untuk menggunakan UDF mengakses sumber daya dalam VPC, Anda harus membangun koneksi jaringan antara MaxCompute dan VPC. Untuk informasi lebih lanjut tentang operasi terkait, lihat Gunakan UDF untuk Mengakses Sumber Daya dalam VPC.
Membaca data tabel menggunakan UDF, UDAF, atau UDTF
Anda tidak dapat menggunakan UDF, UDAF, atau UDTF untuk membaca data dari jenis tabel berikut:
Tabel tempat evolusi skema dilakukan
Tabel yang berisi tipe data kompleks
Tabel yang berisi tipe data JSON
Tabel transaksional
Perhatian
Sebelum menggunakan UDF, perhatikan hal-hal berikut:
UDF tidak dapat bersaing dengan fungsi bawaan dalam hal performa. Kami menyarankan Anda memprioritaskan penggunaan fungsi bawaan untuk mengimplementasikan logika bisnis.
Saat menggunakan UDF dalam pernyataan SQL, penggunaan memori pekerjaan komputasi mungkin melebihi ukuran memori yang dialokasikan secara default jika sejumlah besar data dihitung dan terjadi skew data. Dalam kasus ini, jalankan perintah
set odps.sql.udf.joiner.jvm.memory=xxxx;pada tingkat sesi untuk menyelesaikan masalah. Untuk informasi lebih lanjut tentang UDF, lihat FAQ tentang MaxCompute UDF.Jika nama UDF sama dengan nama fungsi bawaan, UDF akan diprioritaskan untuk dipanggil. Sebagai contoh, jika UDF CONCAT dan fungsi bawaan CONCAT keduanya ada di MaxCompute, sistem secara otomatis memanggil UDF CONCAT alih-alih fungsi bawaan CONCAT. Jika Anda ingin memanggil fungsi bawaan, tambahkan simbol
::sebelum fungsi bawaan. Contohnya:select ::concat('ab', 'c');.
Proses pengembangan
Bagian ini menjelaskan proses pengembangan UDAF.
Menggunakan Java untuk mengembangkan UDF
Gambar berikut menunjukkan cara mengembangkan MaxCompute UDF dalam Java.

Prosedur | Deskripsi | Platform | Perhatian atau referensi | |
1 | Opsional | Sebelum Anda dapat menggunakan Maven untuk menulis kode, Anda harus menambahkan dependensi SDK terkait ke file POM. Ini memastikan bahwa kode dapat dikompilasi. Dependensi SDK berikut menunjukkan contohnya: Anda dapat mencari |
| Tidak ada. |
2 | Wajib | Tulis kode UDF berdasarkan kebutuhan bisnis Anda. |
| Saat Anda menggunakan Java untuk mengembangkan UDF, pastikan persyaratan spesifikasi pengembangan Java UDF terpenuhi. Untuk informasi lebih lanjut, lihat Spesifikasi pengembangan UDF dan proses umum (Java). |
3 | Wajib | Debug UDF dengan menjalankannya di mesin lokal Anda atau dengan melakukan pengujian unit untuk memeriksa apakah hasilnya sesuai harapan. | ||
4 | Wajib | Debug kode UDF untuk memastikan bahwa kode tersebut dikemas menjadi file JAR setelah berhasil dijalankan di mesin lokal Anda. | ||
5 | Wajib | Unggah file JAR sebagai sumber daya ke proyek MaxCompute Anda. | Anda dapat menggunakan tiga metode berikut untuk mengunggah sumber daya dan mendaftarkan fungsi:
| |
6 | Wajib | Buat UDF berdasarkan file JAR yang Anda unggah. | ||
7 | Opsional | Panggil UDF dalam kode kueri data. | Tidak ada. | |
Menggunakan Python untuk mengembangkan UDF
Gambar berikut menunjukkan cara mengembangkan MaxCompute UDF dalam Python.
Prosedur | Deskripsi | Platform | Perhatian atau referensi | |
1 | Wajib | Tulis UDF berdasarkan kebutuhan bisnis Anda. | Saat Anda menggunakan Python untuk mengembangkan UDF, pastikan persyaratan spesifikasi pengembangan Python UDF terpenuhi. Untuk informasi lebih lanjut, lihat Spesifikasi pengembangan UDF dan proses umum (Python 3) atau Spesifikasi pengembangan UDF dan proses umum (Python 2). | |
2 | Wajib | Debug UDF dengan menjalankannya di mesin lokal Anda atau dengan melakukan pengujian unit untuk memeriksa apakah hasilnya sesuai harapan. | ||
3 | Wajib | Unggah file Python atau sumber daya yang diperlukan, seperti sumber daya file, sumber daya tabel, dan paket pihak ketiga, ke proyek MaxCompute. | Anda dapat menggunakan tiga metode berikut untuk mengunggah sumber daya dan mendaftarkan fungsi:
| |
4 | Wajib | Buat UDF berdasarkan file Python yang diunggah atau sumber daya yang diperlukan. | ||
5 | Opsional | Panggil UDF dalam kode kueri data. | Tidak ada. | |
Panggil UDF
Setelah mengembangkan dan mendaftarkan UDF di MaxCompute, Anda dapat menggunakannya dalam proses pengembangan pekerjaan selanjutnya. Gunakan metode berikut untuk memanggil UDF:
Gunakan UDF dalam proyek MaxCompute: Metodenya mirip dengan penggunaan fungsi bawaan.
Gunakan UDF lintas proyek: Gunakan UDF Proyek B di Proyek A. Contohnya:
select B:udf_in_other_project(arg0, arg1) as res from table_t;. Untuk informasi lebih lanjut tentang berbagi lintas proyek, lihat Akses Sumber Daya Lintas Proyek Berbasis Paket.