全部产品
Search
文档中心

MaxCompute:Ikhtisar

更新时间:Jul 02, 2025

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

UDTF dapat digunakan untuk mengembalikan beberapa nilai dari satu input data. Data masukan dan keluaran UDTF memiliki hubungan satu-ke-banyak. Setiap kali UDTF membaca satu baris data, UDTF mengembalikan beberapa nilai yang dianggap sebagai tabel. MaxCompute mendukung penulisan UDTF dalam Java atau Python.
Jenis UDTFDeskripsi
Java UDTFMaxCompute memungkinkan Anda menulis UDTF dalam Java. Untuk informasi lebih lanjut, lihat Java UDTF.
Python UDTFMaxCompute memungkinkan Anda menulis UDTF dalam Python 2 dan Python 3.
  • Python 2 UDTF: Versi Python adalah 2.7. Untuk informasi lebih lanjut, lihat Python 2 UDTF.
  • Python 3 UDTF: Versi Python adalah CPython-3.7.3. Untuk informasi lebih lanjut, lihat Python 3 UDTF.

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, atau SORT BY dalam pernyataan SELECT yang 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.