MaxCompute memungkinkan Anda menulis fungsi bernilai tabel yang ditentukan pengguna (UDTF) dalam Java atau Python untuk memperluas kemampuan fungsi MaxCompute dan menyesuaikan dengan kebutuhan bisnis. Topik ini menjelaskan jenis, batasan, catatan penggunaan, serta proses pengembangan UDTF, termasuk cara menggunakannya.
Informasi latar belakang
| Jenis UDTF | Deskripsi |
| Java UDTF | MaxCompute memungkinkan Anda menulis UDTF dalam Java. Untuk informasi lebih lanjut, lihat Java UDTF. |
| Python UDTF | MaxCompute memungkinkan Anda menulis UDTF dalam Python 2 dan Python 3.
|
Fungsi bawaan MaxCompute mencakup beberapa UDTF seperti EXPLODE. Untuk informasi lebih lanjut tentang UDTF bawaan, lihat Fungsi lainnya atau Fungsi Tipe Kompleks.
Batasan
- Anda tidak dapat mengakses Internet menggunakan fungsi yang ditentukan pengguna (UDF). Jika diperlukan, isi formulir aplikasi koneksi jaringan sesuai kebutuhan bisnis Anda dan kirimkan aplikasi tersebut. Setelah disetujui, tim dukungan teknis MaxCompute akan menghubungi Anda untuk membantu membangun koneksi jaringan. Informasi lebih lanjut tentang pengisian formulir tersedia di Proses Koneksi Jaringan.
- Jika Anda menggunakan UDTF dalam pernyataan
SELECT, Anda tidak dapat menentukan kolom lain atau menggunakan ekspresi lain dalam pernyataan tersebut. Contoh kode sampel berikut menunjukkan pernyataan SQL yang salah.-- Pernyataan berisi UDTF dan kolom lain. select value, user_udtf(key) as mycol ... - UDTF tidak dapat bersarang. Contoh kode sampel berikut menunjukkan pernyataan SQL yang salah.
-- UDTF bernama user_udtf2 bersarang dalam UDTF bernama user_udtf1. select user_udtf1(user_udtf2(key)) as mycol...; - UDTF tidak dapat digunakan dengan klausa
GROUP BY,DISTRIBUTE BY, atauSORT BYdalam pernyataanSELECTyang sama. Contoh kode sampel berikut menunjukkan pernyataan SQL yang salah.-- UDTF digunakan bersama dengan klausa GROUP BY. select user_udtf(key) as mycol ... group by mycol;
Peringatan
Sebelum menggunakan UDF, perhatikan hal-hal berikut:
UDF tidak dapat bersaing dengan fungsi bawaan dalam hal performa. Kami merekomendasikan agar Anda memprioritaskan penggunaan fungsi bawaan untuk mengimplementasikan logika bisnis Anda.
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 tersebut. Informasi lebih lanjut tentang UDF tersedia di 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
Gambar berikut menunjukkan cara menulis MaxCompute UDTF dalam Java dan Python.
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 dari Proyek B di Proyek A. Contoh pernyataan:
select B:udf_in_other_project(arg0, arg1) as res from table_t;. Informasi lebih lanjut tentang berbagi lintas proyek tersedia di Akses Sumber Daya Lintas Proyek Berbasis Paket.