All Products
Search
Document Center

MaxCompute:ARRAY_SORT

Last Updated:Jul 02, 2025

Mengurutkan elemen-elemen dalam Array a berdasarkan komparator.

Sintaksis

array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)

Parameter

  • a: Wajib. Menentukan array. T dalam array<T> menunjukkan tipe data elemen-elemen dalam array, yang dapat berupa tipe data apa pun.

  • komparator: Wajib. Menentukan fungsi bawaan, fungsi yang ditentukan pengguna (UDF), atau ekspresi untuk membandingkan dua elemen dalam array.

    Logika pemrosesan komparator(a, b): Jika a sama dengan b, nilai 0 dikembalikan. Jika a kurang dari b, bilangan bulat negatif dikembalikan. Jika a lebih besar dari b, bilangan bulat positif dikembalikan. Jika komparator(a, b) mengembalikan null, kesalahan akan diberikan.

    Penting

    Fungsi perbandingan dalam ARRAY_SORT harus konsisten secara mandiri. Contoh:

    • Jika compare(a, b) > 0, maka compare(b, a) < 0 juga harus terpenuhi.

    • Jika compare(a, b) = 0, maka compare(b, a) = 0 juga harus terpenuhi.

    • Jika compare(a, b) < 0, maka compare(b, a) > 0 juga harus terpenuhi.

    Contoh fungsi yang tidak konsisten secara mandiri:

    • (left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:

      Jika a = 1 dan b = 1, fungsi compare(a, b) mengembalikan -1, dan fungsi compare(b, a) juga mengembalikan -1. Hasil ini bertentangan, sehingga fungsi tersebut tidak konsisten secara mandiri.

    • (left, right) -> CASE WHEN left < right THEN -1L WHEN left = right THEN 0L ELSE 1L END:

      Jika a = NULL dan b = 1, fungsi compare(a, b) mengembalikan 1 dan fungsi compare(b, a) juga mengembalikan 1. Hasil ini bertentangan, sehingga fungsi tersebut tidak konsisten secara mandiri.

Nilai kembali

Nilai yang dikembalikan adalah tipe ARRAY.

Contoh

  • Contoh 1: Mengurutkan elemen-elemen dalam array(5,6,1).

    SELECT array_sort(array(5,6,1),(left,right)->
                      CASE 
                       WHEN left<right THEN-1L 
                       WHEN left>right THEN 1L 
                       ELSE 0L 
                      END
                     );

    Hasil berikut dikembalikan:

    +------------+
    | _c0        |
    +------------+
    | [1,5,6]    |
    +------------+
  • Contoh 2:

    SELECT array_sort(a, (a,b)-> 
                      CASE 
                       WHEN a.a>b.a THEN 1L 
                       WHEN a.a<b.a THEN -1L 
                       ELSE 0L 
                      END)
     FROM VALUES (
      ARRAY(named_struct('a', 1, 'b', 10),
            named_struct('a', 3, 'b', 11),
            named_struct('a', 2, 'b', 12)))
      AS t(a);

    Hasil berikut dikembalikan:

    +------+
    | _c0 |
    +------+
    | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] |
    +------+

Fungsi terkait

  • ARRAY_SORT merupakan fungsi tipe kompleks. Untuk informasi lebih lanjut tentang fungsi-fungsi yang digunakan untuk memproses data dari tipe data kompleks seperti ARRAY, MAP, STRUCT, dan JSON, lihat Fungsi Tipe Kompleks.

  • Dalam contoh-contoh di atas, kombinasi tanda hubung dan tanda sudut penutup (->) digunakan. Untuk informasi lebih lanjut tentang cara menggunakan kombinasi tanda hubung dan tanda sudut penutup (->) dalam fungsi Lambda, lihat Fungsi Lambda.