All Products
Search
Document Center

MaxCompute:Mengembangkan UDF Java

Last Updated:Jun 24, 2026

Jika fungsi bawaan MaxCompute tidak memenuhi kebutuhan Anda, gunakan alur kerja dalam topik ini untuk membuat user-defined function (UDF) di tool pengembangan seperti IntelliJ IDEA (Maven) atau MaxCompute Studio. UDF tersebut kemudian dapat dipanggil di MaxCompute untuk mendukung berbagai kasus penggunaan. Topik ini menjelaskan cara menulis UDF dalam Java.

Batasan ketat

Akses Internet — Secara default, UDF tidak dapat mengakses Internet. 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 — Secara default, UDF tidak dapat mengakses resource di virtual private cloud (VPC). Untuk mengaktifkan akses VPC, buat koneksi jaringan antara MaxCompute dan VPC tersebut. Untuk detailnya, lihat Use UDFs to access resources in VPCs.

Tipe tabel yang tidak didukung — UDF, UDAF, dan UDTF tidak dapat membaca data dari tipe tabel berikut:

  • Tabel yang telah menjalani schema evolution

  • Tabel yang berisi tipe data kompleks

  • Tabel yang berisi tipe data JSON

  • Tabel transaksional

Catatan penggunaan

Sebelum menulis UDF Java, Anda harus memahami struktur kode UDF serta pemetaan antara tipe data UDF Java dan tipe data MaxCompute. Untuk informasi lebih lanjut tentang pemetaan tersebut, lihat Lampiran: Tipe data.

Saat menulis UDF Java, perhatikan hal-hal berikut:

  • Hindari menyertakan kelas dengan nama yang sama tetapi logika berbeda di file JAR UDF yang berbeda. Misalnya, asumsikan bahwa UDF1 dan UDF2 masing-masing berkorespondensi dengan file resource JAR udf1.jar dan udf2.jar, dan kedua file JAR tersebut berisi kelas bernama com.aliyun.UserFunction.class tetapi dengan logika berbeda. Jika Anda memanggil UDF1 dan UDF2 dalam satu pernyataan SQL yang sama, MaxCompute akan memuat salah satu kelas secara acak. Hal ini dapat menyebabkan hasil eksekusi yang tidak terduga atau bahkan kegagalan kompilasi.

  • Dalam UDF Java, tipe data parameter input dan nilai kembali harus berupa tipe objek (misalnya, String, Long), bukan tipe primitif (misalnya, int, long).

  • Nilai NULL dalam SQL dipetakan ke NULL dalam Java. Tipe primitif Java tidak dapat merepresentasikan nilai NULL dalam SQL dan tidak diperbolehkan.

Alur kerja pengembangan UDF

Pengembangan UDF mencakup beberapa langkah: menyiapkan lingkungan, menulis kode UDF, mengunggah file JAR, mendaftarkan UDF, dan debugging. Bagian-bagian berikut menjelaskan alur kerja ini menggunakan MaxCompute Studio, DataWorks, dan odpscmd.

Gunakan MaxCompute Studio

Contoh berikut menunjukkan cara mengembangkan dan memanggil UDF Java yang mengonversi karakter menjadi huruf kecil di MaxCompute Studio.

  1. Siapkan lingkungan.

    Sebelum mengembangkan dan melakukan debugging UDF di MaxCompute Studio, Anda harus menginstal MaxCompute Studio dan menghubungkannya ke proyek MaxCompute. Untuk informasi lebih lanjut, lihat topik-topik berikut:

    1. Install MaxCompute Studio

    2. Connect to a MaxCompute project

    3. Create a MaxCompute Java module

  2. Tulis kode UDF.

    1. Pada explorer Project, klik kanan direktori kode sumber modul (src > main > java) dan pilih New > MaxCompute Java.新建Java Class

    2. Pada kotak dialog Create new MaxCompute java class, klik UDF, masukkan nama kelas pada bidang Name, lalu tekan Enter.

      选择类型填写名称

      Name menentukan nama MaxCompute Java Class yang akan dibuat. Jika Anda belum membuat package, Anda dapat memasukkan packagename.classname untuk membuatnya secara otomatis. Dalam contoh ini, Java Class diberi nama Lower.

    3. Tulis kode UDF di editor kode. 代码编辑区域Contohnya:

      package com.aliyun.odps.udf.example;
      import com.aliyun.odps.udf.UDF;
      public final class Lower extends UDF {
          public String evaluate(String s) {
              if (s == null) { 
                 return null; 
              }
                 return s.toLowerCase();
          }
      }
      Catatan

      Untuk melakukan debugging UDF Java secara lokal, lihat Develop and debug UDFs.

  3. Unggah dan daftarkan UDF.

    Klik kanan file Java UDF dan pilih Deploy to server.... Pada kotak dialog Package a jar, submit resource and register function, konfigurasikan parameter dan klik OK.注册UDF

    • MaxCompute project: Nama proyek MaxCompute tempat UDF berada. Karena UDF ditulis di proyek MaxCompute yang telah terhubung, Anda dapat mempertahankan nilai default.

    • Resource file: Jalur file resource yang digunakan oleh UDF. Anda dapat mempertahankan nilai default.

    • Resource name: Resource yang digunakan oleh UDF. Anda dapat mempertahankan nilai default.

    • Function name: Nama yang digunakan untuk memanggil UDF dalam pernyataan SQL. Contohnya, Lower_test.

  4. Lakukan debugging UDF.

    Pada panel navigasi kiri, klik Project Explore. Klik kanan proyek MaxCompute tujuan dan pilih Open Console. Di konsol, masukkan pernyataan SQL yang memanggil UDF dan tekan Enter untuk menjalankannya. 调用UDFContohnya:

    select lower_test('ABC');

    Hasil berikut dikembalikan.

    +-----+
    | _c0 |
    +-----+
    | abc |
    +-----+

Gunakan DataWorks

  1. Siapkan lingkungan.

    Sebelum mengembangkan dan melakukan debugging UDF di DataWorks, Anda harus mengaktifkan DataWorks dan mengikat proyek MaxCompute ke dalamnya. Untuk informasi lebih lanjut, lihat Use DataWorks.

  2. Tulis kode UDF.

    Anda dapat menulis kode UDF di tool pengembangan Java apa pun dan mengemasnya ke dalam file JAR. Contohnya:

    package com.aliyun.odps.udf.example;
    import com.aliyun.odps.udf.UDF;
    public final class Lower extends UDF {
        public String evaluate(String s) {
            if (s == null) { 
               return null; 
            }
               return s.toLowerCase();
        }
    }
  3. Unggah dan daftarkan UDF.

    Anda dapat mengunggah kode yang telah dikemas ke DataWorks dan mendaftarkan UDF tersebut. Untuk informasi lebih lanjut, lihat topik-topik berikut:

    1. Create and use MaxCompute resources

    2. Create and use a MaxCompute function

  4. Lakukan debugging UDF.

    Setelah mendaftarkan UDF, buat node ODPS SQL dan jalankan perintah SQL di dalam node tersebut untuk melakukan debugging UDF. Untuk informasi lebih lanjut tentang cara membuat node ODPS SQL, lihat Create an ODPS SQL node. Berikut adalah contoh perintah debugging.

    select lower_test('ABC');

Gunakan odpscmd

  1. Siapkan lingkungan.

    Untuk mengembangkan dan men-debug UDF menggunakan odpscmd, Anda perlu menginstal klien tersebut serta mengonfigurasi koneksi ke Proyek MaxCompute. Untuk informasi selengkapnya, lihat Menggunakan klien MaxCompute (odpscmd).

  2. Tulis kode UDF.

    Anda dapat menulis kode UDF di tool pengembangan Java apa pun dan mengemasnya ke dalam file JAR. Contohnya:

    package com.aliyun.odps.udf.example;
    import com.aliyun.odps.udf.UDF;
    public final class Lower extends UDF {
        public String evaluate(String s) {
            if (s == null) { 
               return null; 
            }
               return s.toLowerCase();
        }
    }
  3. Unggah dan daftarkan UDF.

    Anda dapat mengunggah kode yang telah dikemas menggunakan odpscmd dan mendaftarkan UDF tersebut. Untuk informasi lebih lanjut, lihat topik-topik berikut:

    1. ADD JAR

    2. CREATE FUNCTION

  4. Lakukan debugging UDF.

    Setelah mendaftarkan UDF, Anda dapat menulis dan menjalankan perintah SQL untuk melakukan debugging UDF. Berikut adalah contoh perintah debugging.

    select lower_test('ABC');

Memanggil UDF

Setelah mengembangkan UDF Java seperti yang dijelaskan dalam alur kerja pengembangan UDF sebelumnya, Anda dapat memanggilnya di MaxCompute SQL. Metode berikut tersedia:

    Contoh UDF

    Lampiran: Struktur kode UDF

    UDF Java terdiri dari bagian-bagian berikut:

    • Package Java: Opsional.

      Anda dapat mengelompokkan kelas Java Anda ke dalam sebuah package agar lebih mudah ditemukan dan digunakan kembali.

    • Mewarisi kelas UDF: Wajib.

      Kelas dasar yang wajib digunakan adalah com.aliyun.odps.udf.UDF. Jika Anda memerlukan kelas UDF lain atau tipe data kompleks, tambahkan kelas yang diperlukan dari MaxCompute SDK. Misalnya, kelas untuk tipe data STRUCT adalah com.aliyun.odps.data.Struct.

    • Anotasi @Resolve: Opsional.

      Formatnya adalah @Resolve(<signature>), di mana signature mendefinisikan tipe data parameter input dan nilai kembali. Saat Anda menggunakan tipe data STRUCT dalam UDF, refleksi tidak dapat mengambil nama field dan tipe field dari com.aliyun.odps.data.Struct. Dalam kasus ini, Anda harus menggunakan anotasi @Resolve untuk mengambilnya. Jika Anda menggunakan STRUCT dalam UDF, tambahkan anotasi @Resolve ke kelas UDF. Anotasi ini hanya berpengaruh pada overload yang parameternya atau nilai kembalinya mengandung com.aliyun.odps.data.Struct. Contoh: @Resolve("struct<a:string>,string->string"). Untuk contoh lengkap, lihat UDF Example: Complex Data Types.

    • Kelas Java kustom: Wajib.

      Ini adalah unit yang mengorganisasi kode UDF Anda. Kelas ini mendefinisikan variabel dan metode yang mengimplementasikan logika bisnis Anda.

    • Metode evaluate: Wajib.

      Kelas Java kustom Anda harus menyertakan metode evaluate publik non-statis. Tipe data parameter input dan nilai kembalinya menentukan signature SQL UDF tersebut.

      Anda dapat mengimplementasikan beberapa metode evaluate. Saat Anda memanggil UDF, MaxCompute memilih metode evaluate yang tepat berdasarkan tipe argumennya.

      Saat menulis UDF Java, Anda dapat menggunakan tipe Java atau tipe Java Writable. Untuk pemetaan lengkap antara tipe data MaxCompute dan tipe data Java, lihat Lampiran: Tipe data.

    • Inisialisasi dan pembersihan UDF: Opsional. Anda dapat mengimplementasikan inisialisasi dan pembersihan menggunakan void setup(ExecutionContext ctx) dan void close(). Metode void setup(ExecutionContext ctx) dipanggil sekali sebelum metode evaluate dan dapat digunakan untuk menginisialisasi resource atau objek anggota yang diperlukan untuk komputasi. Metode void close() dipanggil sekali setelah semua pemanggilan evaluate selesai dan digunakan untuk tugas pembersihan, seperti menutup file.

    Contoh berikut menunjukkan dua jenis UDF.

    • Gunakan tipe Java

      // Mengorganisasi kelas Java dalam package org.alidata.odps.udf.examples.
      package org.alidata.odps.udf.examples;  
      // Mewarisi kelas UDF.
      import com.aliyun.odps.udf.UDF;         
      // Mendefinisikan kelas Java kustom.
      public final class Lower extends UDF { 
      // Metode evaluate mendefinisikan logika UDF. Metode ini menerima String dan mengembalikan String.
          public String evaluate(String s) { 
              if (s == null) { 
              return null; 
          } 
              return s.toLowerCase(); 
        } 
      }
    • Gunakan tipe Java Writable

      // Mengorganisasi kelas Java dalam package com.aliyun.odps.udf.example.
      package com.aliyun.odps.udf.example;
      // Menambahkan kelas yang diperlukan untuk tipe Java Writable.
      import com.aliyun.odps.io.Text;
      // Mewarisi kelas UDF.
      import com.aliyun.odps.udf.UDF;
      // Mendefinisikan kelas Java kustom.
      public class MyConcat extends UDF {
        private Text ret = new Text();
      // Mendefinisikan metode evaluate. `Text` menentukan tipe data parameter input, dan nilai `return` juga berupa objek Text.
        public Text evaluate(Text a, Text b) {
            if (a == null || b == null) {
            return null;
          }
            ret.clear();
            ret.append(a.getBytes(), 0, a.getLength());
            ret.append(b.getBytes(), 0, b.getLength());
            return ret;
        }
      }

    MaxCompute juga mendukung UDF yang dikembangkan untuk versi Hive yang kompatibel dengannya. Untuk informasi lebih lanjut, lihat Hive UDF compatibility.

    Lampiran: Tipe data

    Pemetaan tipe data

    Untuk memastikan tipe data yang digunakan dalam UDF Java konsisten dengan tipe data yang didukung oleh MaxCompute, gunakan pemetaan berikut.

    Catatan

    Tipe data yang didukung oleh MaxCompute bervariasi berdasarkan edisi tipe data. Mulai dari MaxCompute 2.0, lebih banyak tipe data ditambahkan, termasuk tipe data kompleks seperti ARRAY, MAP, dan STRUCT. Untuk informasi lebih lanjut tentang edisi tipe data MaxCompute, lihat Data type editions.

    Tipe MaxCompute

    Tipe Java

    Tipe Java Writable

    TINYINT

    java.lang.Byte

    ByteWritable

    SMALLINT

    java.lang.Short

    ShortWritable

    INT

    java.lang.Integer

    IntWritable

    BIGINT

    java.lang.Long

    LongWritable

    FLOAT

    java.lang.Float

    FloatWritable

    DOUBLE

    java.lang.Double

    DoubleWritable

    DECIMAL

    java.math.BigDecimal

    BigDecimalWritable

    BOOLEAN

    java.lang.Boolean

    BooleanWritable

    STRING

    java.lang.String

    Text

    VARCHAR

    com.aliyun.odps.data.Varchar

    VarcharWritable

    BINARY

    com.aliyun.odps.data.Binary

    BytesWritable

    DATE

    java.sql.Date

    DateWritable

    DATETIME

    java.util.Date

    DatetimeWritable

    TIMESTAMP

    java.sql.Timestamp

    TimestampWritable

    INTERVAL_YEAR_MONTH

    N/A

    IntervalYearMonthWritable

    INTERVAL_DAY_TIME

    N/A

    IntervalDayTimeWritable

    ARRAY

    java.util.List

    N/A

    MAP

    java.util.Map

    N/A

    STRUCT

    com.aliyun.odps.data.Struct

    N/A

    Tipe Java byte[] tidak termasuk dalam daftar tipe Java yang didukung. Jika Anda menggunakan byte[] sebagai parameter input atau nilai kembali metode evaluate, kesalahan ODPS-0130071 akan dilaporkan. Untuk memproses data biner dalam UDF, gunakan tipe Java yang sesuai dengan tipe BINARY MaxCompute: com.aliyun.odps.data.Binary untuk tipe Java standar, atau com.aliyun.odps.io.BytesWritable untuk tipe Writable. Anda juga dapat mengonversi data biner menjadi string yang dienkode Base64 dan menggunakan tipe String sebagai nilai kembali.

    Kompatibilitas UDF Hive

    Jika proyek MaxCompute Anda menggunakan edisi tipe data 2.0, MaxCompute mendukung UDF bergaya Hive. Anda dapat langsung menggunakan UDF Hive yang dikembangkan pada versi Hive yang kompatibel dengan MaxCompute.

    Versi Hive yang kompatibel adalah 2.1.0, yang sesuai dengan Hadoop 2.7.2. Jika UDF Anda dikompilasi dengan versi Hive atau Hadoop yang berbeda, kompilasi ulang file JAR UDF menggunakan Hive 2.1.0 atau Hadoop 2.7.2.

    Untuk contoh lengkap penggunaan UDF Hive di MaxCompute, lihat UDF Example: Hive Compatibility.