All Products
Search
Document Center

MaxCompute:Fungsi Lainnya

Last Updated:Jun 27, 2026

MaxCompute SQL menyediakan berbagai fungsi umum tambahan untuk pengembangan. Anda dapat memilih fungsi yang sesuai dengan kebutuhan Anda. Topik ini menjelaskan format perintah, parameter, dan contoh penggunaan fungsi seperti CAST, FAILIF, dan HASH yang didukung oleh MaxCompute SQL.

Function

Features

BETWEEN AND expression

Menyaring data yang memenuhi kondisi rentang tertentu.

CASE WHEN expression

Mengembalikan nilai berbeda berdasarkan hasil suatu ekspresi.

CAST

Mengonversi hasil suatu ekspresi ke tipe data target.

COALESCE

Mengembalikan nilai pertama yang tidak NULL dalam daftar parameter.

COMPRESS

Mengompres parameter input STRING atau BINARY menggunakan algoritma GZIP.

CRC32

Menghitung nilai Pemeriksaan redundansi siklik (CRC) dari string atau data biner.

DECOMPRESS

Mendekompres parameter input BINARY menggunakan algoritma GZIP.

FAILIF

Mengembalikan true atau pesan error kustom berdasarkan hasil suatu ekspresi.

GET_IDCARD_AGE

Mengembalikan usia saat ini berdasarkan nomor KTP Tiongkok.

GET_IDCARD_BIRTHDAY

Mengembalikan tanggal lahir berdasarkan nomor KTP Tiongkok.

GET_IDCARD_SEX

Mengembalikan jenis kelamin berdasarkan nomor KTP Tiongkok.

GET_USER_ID

Memperoleh ID akun saat ini.

HASH

Menghitung nilai hash berdasarkan parameter input.

IF

Memeriksa apakah kondisi tertentu bernilai true.

MAX_PT

Mengembalikan nilai maksimum partisi tingkat-1 dalam tabel partisi.

NULLIF

Menentukan apakah dua parameter input sama.

NVL

Menentukan nilai kembali untuk parameter yang bernilai NULL.

ORDINAL

Mengurutkan variabel input secara menaik dan mengembalikan nilai pada posisi tertentu.

PARTITION_EXISTS

Memeriksa apakah partisi tertentu ada.

SAMPLE

Mengambil sampel semua nilai kolom yang dibaca dan menyaring baris yang tidak memenuhi kondisi sampling.

SHA

Menghitung nilai hash SHA-1 dari string atau data biner.

SHA1

Menghitung nilai hash SHA-1 dari string atau data biner.

SHA2

Menghitung nilai hash SHA-2 dari string atau data biner.

STACK

Memisahkan sekelompok parameter tertentu menjadi jumlah baris tertentu.

STR_TO_MAP

Memisahkan string menjadi kunci dan nilai berdasarkan pemisah tertentu.

TABLE_EXISTS

Memeriksa apakah tabel tertentu ada.

TRANS_ARRAY

Fungsi user-defined table-valued function (UDTF) yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini mengonversi array yang disimpan dalam kolom dengan pemisah tetap menjadi beberapa baris.

TRANS_COLS

UDTF yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini memisahkan kolom berbeda menjadi baris berbeda.

UNIQUE_ID

Mengembalikan ID acak. Fungsi ini lebih efisien daripada fungsi UUID.

UUID

Mengembalikan ID acak.

BETWEEN AND expression

  • Format perintah

    <a> [NOT] BETWEEN <b> AND <c>
  • Deskripsi

    Menyaring data di mana nilai a berada di antara b dan c, atau tidak berada di antara b dan c.

  • Parameter

    • a: Wajib. Bidang yang akan disaring.

    • b dan c: Wajib. Rentang yang ditentukan. Tipe data b dan c harus sama dengan tipe data a.

  • Nilai kembali

    Mengembalikan data yang memenuhi kondisi.

    Jika a, b, atau c bernilai null, hasilnya adalah null.

  • Contoh

    Data berikut terdapat dalam tabel emp.

    | empno | ename | job | mgr | hiredate| sal| comm | deptno |
    7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
    7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
    7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
    7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
    7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
    7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
    7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
    7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
    7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
    7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
    7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
    7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
    7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
    7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
    7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
    7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
    7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

    Perintah berikut mencari data di mana nilai sal lebih besar atau sama dengan 1000 dan kurang dari atau sama dengan 1500.

    select * from emp where sal between 1000 and 1500;

    Hasil berikut dikembalikan.

    +-------+-------+-----+------------+------------+------------+------------+------------+
    | empno | ename | job | mgr        | hiredate   | sal        | comm       | deptno     |
    +-------+-------+-----+------------+------------+------------+------------+------------+
    | 7521  | WARD  | SALESMAN | 7698  | 1981-02-22 00:00:00 | 1250.0     | 500.0      | 30  |
    | 7654  | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.0     | 1400.0     | 30 |
    | 7844  | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.0     | 0.0        | 30 |
    | 7876  | ADAMS | CLERK | 7788  | 1987-05-23 00:00:00 | 1100.0     | NULL     | 20   |
    | 7934  | MILLER | CLERK | 7782  | 1982-01-23 00:00:00 | 1300.0     | NULL      | 10  |
    | 7956  | TEBAGE | CLERK | 7748  | 1982-12-30 00:00:00 | 1300.0     | NULL      | 10  |
    +-------+-------+-----+------------+------------+------------+------------+------------+

CASE WHEN expression

  • Format perintah

    MaxCompute menyediakan dua format CASE WHEN berikut:

    • CASE <value>
      WHEN <value1> THEN <result1>
      WHEN <value2> THEN <result2>
      ...
      ELSE <resultn>
      END
    • CASE
      WHEN (<_condition1>) THEN <result1>
      WHEN (<_condition2>) THEN <result2>
      WHEN (<_condition3>) THEN <result3>
      ...
      ELSE <resultn>
      END
  • Deskripsi

    Mengembalikan nilai result berbeda berdasarkan hasil evaluasi value atau _condition.

  • Parameter

    • value: Wajib. Nilai yang akan dibandingkan.

    • _condition: Wajib. Kondisi yang akan dievaluasi.

    • result: Wajib. Nilai kembali.

  • Nilai kembali

    • Jika result hanya berisi tipe BIGINT dan DOUBLE, semua nilai dikonversi ke DOUBLE sebelum hasil dikembalikan.

    • Jika result mencakup tipe STRING, semua nilai dikonversi ke tipe STRING sebelum hasil dikembalikan. Jika konversi tipe data tidak didukung, error dikembalikan. Misalnya, data tipe BOOLEAN tidak dapat dikonversi ke tipe STRING.

    • Konversi tipe lainnya tidak diperbolehkan.

  • Contoh

    Tabel sale_detail memiliki bidang shop_name string, customer_id string, total_price double dan berisi data berikut.

    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+

    Berikut adalah contoh perintah.

    select 
    case  
    when region='china' then 'default_region'
    when region like 'shang%' then 'sh_region'
    end as region 
    from sale_detail;

    Hasil berikut dikembalikan.

    +------------+
    | region     |
    +------------+
    | default_region |
    | default_region |
    | default_region |
    | sh_region  |
    | sh_region  |
    | sh_region  |
    +------------+

CAST

  • Format perintah

    CAST(<expr> AS <type>)
  • Deskripsi

    Mengonversi hasil expr ke tipe data target type.

  • Parameter

    • expr: Wajib. Data sumber yang akan dikonversi.

    • type: Wajib. Tipe data target. Penggunaannya sebagai berikut:

      • cast(double as bigint): Mengonversi nilai tipe data DOUBLE ke tipe data BIGINT.

      • cast(string as bigint): Saat mengonversi string ke tipe data BIGINT, jika string berisi angka dalam bentuk bilangan bulat, nilai tersebut langsung dikonversi ke tipe BIGINT. Jika string berisi angka dalam bentuk floating-point atau eksponensial, nilai tersebut terlebih dahulu dikonversi ke tipe data DOUBLE lalu ke tipe BIGINT.

      • cast(string as datetime) atau cast(datetime as string): Format tanggal default yyyy-mm-dd hh:mi:ss digunakan.

  • Nilai kembali

    • Nilai kembali bertipe data target.

    • Jika Anda menjalankan setproject odps.function.strictmode=false, fungsi mengembalikan digit sebelum huruf.

    • Jika Anda menjalankan setproject odps.function.strictmode=true, error dikembalikan.

    • Saat mengonversi nilai ke tipe DECIMAL, jika Anda mengatur odps.sql.decimal.tostring.trimzero=true, nol di belakang koma dihapus. Jika Anda mengatur odps.sql.decimal.tostring.trimzero=false, nol di belakang koma dipertahankan.

      Penting

      Parameter odps.sql.decimal.tostring.trimzero berlaku baik untuk data yang diambil dari tabel maupun nilai statis.

  • Contoh

    COALESCE

    • Format perintah

      COALESCE(<expr1>, <expr2>, ...)
    • Deskripsi

      Mengembalikan nilai pertama yang tidak NULL dalam daftar <expr1>, <expr2>, ....

    • Parameter

      expr: Wajib. Nilai yang akan diperiksa.

    • Nilai kembali

      Tipe data nilai kembali sama dengan tipe data parameter.

    • Contoh

      • Contoh 1: Penggunaan umum. Berikut adalah contoh perintah.

        --Mengembalikan 1.
        select coalesce(null,null,1,null,3,5,7);
      • Contoh 2: Error dikembalikan jika tipe data nilai parameter tidak didefinisikan.

        • Perintah tidak valid

          -- Tipe data parameter abc tidak didefinisikan. Mesin sistem tidak dapat mengenalinya dan mengembalikan error.
          select coalesce(null,null,1,null,abc,5,7);
        • Perintah valid

          select coalesce(null,null,1,null,'abc',5,7);
      • Contoh 3: Jika semua nilai parameter null saat Anda tidak membaca data dari tabel, error dikembalikan. Berikut adalah perintah tidak valid.

        -- Error dikembalikan, menunjukkan bahwa setidaknya satu nilai parameter harus tidak NULL.
        select coalesce(null,null,null,null);
      • Contoh 4: Jika semua nilai parameter null saat Anda membaca data dari tabel, NULL dikembalikan.

        Tabel sumber:

        +-----------+-------------+------------+
        | shop_name | customer_id | toal_price |
        +-----------+-------------+------------+
        | ad        | 10001       | 100.0      |
        | jk        | 10002       | 300.0      |
        | ad        | 10003       | 500.0      |
        | tt        | NULL        | NULL       |
        +-----------+-------------+------------+

        Seperti yang ditunjukkan dalam tabel sumber, semua nilai untuk tt bernilai null. Setelah menjalankan pernyataan berikut, NULL dikembalikan.

        select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';

    COMPRESS

    • Format perintah

      BINARY COMPRESS(STRING <str>)
      BINARY COMPRESS(BINARY <bin>)
    • Deskripsi

      Mengompres str atau bin menggunakan algoritma GZIP.

    • Parameter

      • str: Wajib. Nilai tipe STRING.

      • bin: Wajib. Nilai tipe BINARY.

    • Nilai kembali

      Mengembalikan nilai tipe BINARY. Jika parameter input NULL, NULL dikembalikan.

    • Contoh

      • Contoh 1: Mengompres string hello menggunakan algoritma GZIP. Berikut adalah contoh perintah.

        -- Nilai kembali adalah =1F=8B=08=00=00=00=00=00=00=03=CBH=CD=C9=C9=07=00=86=A6=106=05=00=00=00.
        select compress('hello');
      • Contoh 2: Parameter input adalah string kosong. Berikut adalah contoh perintah.

        -- Nilai kembali adalah =1F=8B=08=00=00=00=00=00=00=03=03=00=00=00=00=00=00=00=00=00.
        select compress('');
      • Contoh 3: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select compress(null);

    CRC32

    • Format perintah

      BIGINT CRC32(STRING|BINARY <expr>)
    • Deskripsi

      Menghitung nilai Pemeriksaan redundansi siklik (CRC) dari ekspresi STRING atau BINARY expr.

    • Parameter

      expr: Wajib. Nilai tipe STRING atau BINARY.

    • Nilai kembali

      Mengembalikan nilai tipe BIGINT. Aturan berikut berlaku:

      • Jika parameter input NULL, NULL dikembalikan.

      • Jika parameter input adalah string kosong, 0 dikembalikan.

    • Contoh

      • Contoh 1: Menghitung nilai CRC dari string ABC. Berikut adalah contoh perintah.

        -- Mengembalikan 2743272264.
        select crc32('ABC');
      • Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select crc32(null);

    DECOMPRESS

    • Format perintah

      BINARY DECOMPRESS(BINARY <bin>)
    • Deskripsi

      Mendekompres bin menggunakan algoritma GZIP.

    • Parameter

      bin: Wajib. Nilai tipe BINARY.

    • Nilai kembali

      Mengembalikan nilai tipe BINARY. Jika parameter input NULL, NULL dikembalikan.

    • Contoh

      • Contoh 1: Mendekompres hasil kompresi string hello, world dan mengonversinya ke format STRING. Berikut adalah contoh perintah.

        -- Mengembalikan hello, world.
        select cast(decompress(compress('hello, world')) as string);
      • Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select decompress(null);

    GET_IDCARD_AGE

    • Format perintah

      get_idcard_age(<idcardno>)
    • Deskripsi

      Mengembalikan usia saat ini berdasarkan nomor KTP Tiongkok. Usia dihitung dengan mengurangkan tahun kelahiran dari nomor KTP dari tahun saat ini.

    • Parameter

      idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.

    • Nilai kembali

      Mengembalikan nilai tipe BIGINT. Jika input NULL, NULL dikembalikan.

    GET_IDCARD_BIRTHDAY

    • Format perintah

      get_idcard_birthday(<idcardno>)
    • Deskripsi

      Mengembalikan tanggal lahir berdasarkan nomor KTP Tiongkok.

    • Parameter

      idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.

    • Nilai kembali

      Mengembalikan nilai tipe DATETIME. Jika input NULL, NULL dikembalikan.

    GET_IDCARD_SEX

    • Format perintah

      get_idcard_sex(<idcardno>)
    • Deskripsi

      Mengembalikan jenis kelamin berdasarkan nomor KTP Tiongkok. Nilainya adalah M (laki-laki) atau F (perempuan).

    • Parameter

      idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.

    • Nilai kembali

      Mengembalikan nilai tipe STRING. Jika input NULL, NULL dikembalikan.

    GET_USER_ID

    • Format perintah

      get_user_id()
    • Deskripsi

      Memperoleh ID akun saat ini. Ini juga dikenal sebagai user ID atau UID.

    • Parameter

      Tidak ada parameter yang diperlukan.

    • Nilai kembali

      Mengembalikan ID akun saat ini.

    • Contoh

      select get_user_id();
      -- Hasil berikut dikembalikan.
      +------------+
      | _c0        |
      +------------+
      | 1117xxxxxxxx8519 |
      +------------+

    HASH

    • Format perintah

      • Jika proyek MaxCompute berada dalam mode kompatibel Hive, format perintahnya sebagai berikut.

        INT HASH(<value1>, <value2>[, ...]);
      • Jika proyek MaxCompute tidak dalam mode kompatibel Hive, format perintahnya sebagai berikut.

        BIGINT HASH(<value1>, <value2>[, ...]);
    • Deskripsi

      Menghitung nilai hash dari value1 dan value2.

    • Parameter

      value1 dan value2: Wajib. Parameter untuk menghitung nilai hash. Parameter dapat memiliki tipe data berbeda. Tipe data yang didukung berbeda antara mode kompatibel Hive dan non-kompatibel Hive:

      • Mode kompatibel Hive: TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, STRING, CHAR, VARCHAR, DATETIME, dan DATE.

      • Mode non-kompatibel Hive: BIGINT, DOUBLE, BOOLEAN, STRING, dan DATETIME.

      Catatan

      Untuk input yang sama, nilai hash yang dikembalikan selalu sama. Namun, jika dua nilai hash sama, hal ini tidak menjamin bahwa nilai inputnya sama. Tabrakan hash (hash collision) dapat terjadi.

    • Nilai kembali

      Mengembalikan nilai tipe INT atau BIGINT. Jika parameter input adalah string kosong atau NULL, 0 dikembalikan.

    • Contoh

      • Contoh 1: Hitung nilai hash parameter input dengan tipe data yang sama. Berikut adalah contoh perintah.

        -- Mengembalikan 66.
        SELECT HASH(0L, 2L, 4L);
      • Contoh 2: Hitung nilai hash parameter input dengan tipe data berbeda. Berikut adalah contoh perintah.

        -- Mengembalikan 97.
        SELECT HASH(0L, 'a');
      • Contoh 3: Parameter input adalah string kosong atau NULL. Berikut adalah contoh perintah.

        -- Mengembalikan 0.
        SELECT HASH(0L, null);
        -- Mengembalikan 0.
        SELECT HASH(0L, '');

    IF

    • Format perintah

      IF(<testCondition>, <valueTrue>, <valueFalseOrNull>)
    • Deskripsi

      Memeriksa apakah testCondition bernilai true. Jika true, fungsi mengembalikan nilai valueTrue. Jika tidak, fungsi mengembalikan nilai valueFalseOrNull.

    • Parameter

      • testCondition: Wajib. Ekspresi yang akan dievaluasi. Harus bertipe BOOLEAN.

      • valueTrue: Wajib. Nilai yang dikembalikan jika ekspresi testCondition bernilai true.

      • valueFalseOrNull: Nilai yang dikembalikan jika ekspresi testCondition bernilai false. Nilai ini dapat diatur ke NULL.

    • Nilai kembali

      Tipe data nilai kembali sama dengan tipe data parameter valueTrue atau valueFalseOrNull.

    • Contoh

      -- Mengembalikan 200.
      select if(1=2, 100, 200); 

    MAX_PT

    • Format perintah

      MAX_PT(<table_full_name>)
    • Deskripsi

      Mengembalikan nilai maksimum partisi tingkat-1 yang berisi data dalam tabel partisi. Nilai-nilai tersebut diurutkan secara alfabetis. Fungsi kemudian membaca data dari partisi tersebut.

    • Catatan

      • Fungsi MAX_PT juga dapat diimplementasikan menggunakan SQL standar. SELECT * FROM table WHERE pt=MAX_PT("table"); dapat ditulis ulang sebagai SELECT * FROM table WHERE pt = (SELECT MAX(pt) FROM table);.

        Catatan

        MaxCompute tidak menyediakan fungsi MIN_PT. Anda tidak dapat menggunakan pernyataan SQL SELECT * FROM table WHERE pt=MIN_PT("table"); untuk mencapai fungsi serupa seperti MAX_PT guna mengambil partisi minimum yang berisi data. Namun, Anda dapat menggunakan pernyataan SQL standar SELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table); untuk mencapai efek yang sama.

      • Jika semua partisi dalam tabel kosong, fungsi MAX_PT gagal. Pastikan setidaknya satu partisi tidak kosong.

      • Tabel eksternal OSS juga mendukung fungsi MAX_PT. Perilakunya sama seperti tabel internal.

    • Parameter

      table_full_name: Wajib. Nilai tipe STRING. Nama tabel. Anda harus memiliki izin baca pada tabel tersebut.

    • Nilai kembali

      Mengembalikan nilai partisi tingkat-1 terbesar.

      Catatan

      Jika Anda membuat partisi hanya menggunakan ALTER TABLE dan partisi tersebut tidak berisi data apa pun, partisi tersebut tidak dikembalikan.

    • Contoh

      • Contoh 1: Tabel tbl adalah tabel partisi. Partisinya adalah 20120901 dan 20120902, dan keduanya berisi data. Dalam pernyataan berikut, MAX_PT mengembalikan '20120902'. Pernyataan SQL MaxCompute membaca data dari partisi pt='20120902'. Berikut adalah contoh perintah.

        SELECT * FROM tbl WHERE pt= MAX_PT('tbl');
        -- Ini setara dengan pernyataan berikut.
        SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);
      • Contoh 2: Dalam skenario partisi multi-level, gunakan SQL standar untuk mendapatkan data dari partisi terbesar. Berikut adalah contoh perintah.

        SELECT * FROM table WHERE pt1 = (SELECT MAX(pt1) FROM table) AND pt2 = (SELECT MAX(pt2) FROM table WHERE pt1= (SELECT MAX(pt1) FROM table));

    NULLIF

    • Format perintah

      T NULLIF(T <expr1>, T <expr2>)
    • Deskripsi

      Membandingkan nilai expr1 dan expr2. Jika nilainya sama, fungsi mengembalikan NULL. Jika tidak, fungsi mengembalikan expr1.

    • Parameter

      expr1 dan expr2: Wajib. Ekspresi bertipe apa pun. T menunjukkan tipe data input. Dapat berupa tipe data apa pun yang didukung MaxCompute.

    • Nilai kembali

      Mengembalikan NULL atau expr1.

    • Contoh

      -- Mengembalikan 2.
      select nullif(2, 3);
      -- Mengembalikan NULL.
      select nullif(2, 2);
      -- Mengembalikan 3.
      select nullif(3, null);

    NVL

    • Format perintah

      nvl(T <value>, T <default_value>)
    • Deskripsi

      Jika nilai value adalah NULL, fungsi mengembalikan default_value. Jika tidak, fungsi mengembalikan value. Kedua parameter harus memiliki tipe data yang sama.

    • Parameter

      • value: Wajib. Parameter input. T menunjukkan tipe data input. Dapat berupa tipe data apa pun yang didukung MaxCompute.

      • default_value: Wajib. Nilai pengganti. Harus memiliki tipe data yang sama dengan value.

    • Contoh

      Tabel t_data memiliki tiga kolom: c1 string, c2 bigint, dan c3 datetime. Tabel berisi data berikut.

      +----+------------+------------+
      | c1 | c2 | c3 |
      +----+------------+------------+
      | NULL | 20 | 2017-11-13 05:00:00 |
      | ddd | 25 | NULL |
      | bbb | NULL | 2017-11-12 08:00:00 |
      | aaa | 23 | 2017-11-11 00:00:00 |
      +----+------------+------------+

      Anda dapat menggunakan fungsi nvl untuk menghasilkan 00000 untuk nilai NULL di c1, 0 untuk nilai NULL di c2, dan - untuk nilai NULL di c3. Berikut adalah contoh perintah.

      select nvl(c1,'00000'),nvl(c2,0),nvl(c3,'-') from nvl_test;
      -- Hasil berikut dikembalikan.
      +-----+------------+-----+
      | _c0 | _c1 | _c2 |
      +-----+------------+-----+
      | 00000 | 20 | 2017-11-13 05:00:00 |
      | ddd | 25 | - |
      | bbb | 0 | 2017-11-12 08:00:00 |
      | aaa | 23 | 2017-11-11 00:00:00 |
      +-----+------------+-----+

    ORDINAL

    • Format perintah

      ORDINAL(BIGINT <nth>, <var1>, <var2>[,...])
    • Deskripsi

      Mengurutkan variabel input secara menaik dan mengembalikan nilai pada posisi nth.

    • Parameter

      • nth: Wajib. Nomor posisi, dimulai dari 1. Nilai tipe BIGINT. Jika nilai pada posisi yang ditentukan adalah NULL, NULL dikembalikan.

      • var: Wajib. Nilai yang akan diurutkan. Dapat bertipe BIGINT, DOUBLE, DATETIME, atau STRING.

    • Nilai kembali

      • Nilai pada posisi nth. Jika tidak terjadi konversi implisit, tipe data nilai kembali sama dengan tipe data parameter input.

      • Jika terjadi konversi tipe, konversi antara DOUBLE, BIGINT, dan STRING menghasilkan tipe DOUBLE. Konversi antara STRING dan DATETIME menghasilkan tipe DATETIME. Konversi implisit lainnya tidak diperbolehkan.

      • NULL dianggap sebagai nilai minimum.

    • Contoh

      -- Mengembalikan 3. 
      SELECT ORDINAL(CAST(3 AS BIGINT), CAST(1 AS BIGINT), cast(3 AS BIGINT), cast(7 AS BIGINT), cast(5 AS BIGINT), cast(2 AS BIGINT), cast(4 AS BIGINT), cast(6 AS BIGINT));

    PARTITION_EXISTS

    • Format perintah

      boolean partition_exists(string <table_name>, string... <partitions>)
    • Deskripsi

      Memeriksa apakah partisi tertentu ada.

    • Parameter

      • table_name: Wajib. Nama tabel. Nilai tipe STRING. Nama tabel dapat mencakup nama proyek, seperti my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan secara default.

      • partitions: Wajib. Nama partisi. Nilai tipe STRING. Tentukan nilai partisi sesuai urutan kolom kunci partisi. Jumlah nilai partisi harus sama dengan jumlah kolom kunci partisi.

    • Nilai kembali

      Mengembalikan nilai tipe BOOLEAN. Fungsi mengembalikan True jika partisi yang ditentukan ada. Jika tidak, fungsi mengembalikan False.

    • Contoh

      -- Buat tabel partisi bernama foo.
      create table foo (id bigint) partitioned by (ds string, hr string);
      -- Tambahkan partisi ke tabel foo.
      alter table foo add partition (ds='20190101', hr='1');
      -- Periksa apakah partisi ds='20190101' dan hr='1' ada. Hasilnya True.
      select partition_exists('foo', '20190101', '1');

    SAMPLE

    • Format perintah

      boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])
    • Deskripsi

      Sistem mengambil sampel semua nilai column_name yang dibaca berdasarkan pengaturan x dan y, serta menyaring baris yang tidak memenuhi kondisi sampling.

    • Parameter

      • x dan y: x wajib. Konstanta BIGINT lebih besar dari 0. Ini menunjukkan bahwa data di-hash ke dalam x bagian, dan bagian ke-y dipilih.

        y opsional. Jika dihilangkan, bagian pertama dipilih secara default. Jika Anda menghilangkan parameter y, Anda juga harus menghilangkan column_name.

        Jika x atau y bertipe lain atau kurang dari atau sama dengan 0, exception dilemparkan. Jika y lebih besar dari x, exception juga dikembalikan. Jika salah satu dari x atau y bernilai NULL, NULL dikembalikan.

      • column_name: Opsional. Kolom target untuk sampling. Jika parameter ini dihilangkan, sampling acak dilakukan berdasarkan nilai x dan y. Parameter ini dapat bertipe data apa pun, dan nilainya dapat NULL. Tidak ada konversi tipe implisit yang dilakukan. Jika column_name adalah konstanta NULL, error dikembalikan.

        Catatan
        • Untuk mencegah kesenjangan data yang disebabkan oleh nilai NULL, nilai NULL dalam column_name di-hash secara merata ke dalam x bagian. Jika Anda tidak menentukan column_name, output mungkin tidak seragam ketika volume data kecil. Dalam kasus ini, Anda dapat menentukan column_name untuk mendapatkan hasil output yang lebih baik.

        • Saat ini, sampling acak hanya didukung untuk kolom dengan tipe data berikut: bigint, datetime, boolean, double, string, binary, char, dan varchar.

    • Nilai kembali

      Mengembalikan nilai tipe BOOLEAN.

    • Contoh

      Asumsikan tabel tbla berisi kolom bernama cola.

      -- Nilai di-hash ke dalam 4 bagian berdasarkan kolom cola, dan bagian ke-1 diambil. Nilai kembali adalah True.
      select * from tbla where sample (4, 1 , cola);
      -- Setiap baris data di-hash secara acak ke dalam 4 bagian, dan bagian ke-2 diambil. Nilai kembali adalah True.
      select * from tbla where sample (4, 2);

    SHA

    • Format perintah

      STRING SHA(STRING|BINARY <expr>)
    • Deskripsi

      Menghitung nilai hash SHA-1 dari ekspresi STRING atau BINARY expr dan mengembalikannya sebagai string heksadesimal.

    • Parameter

      expr: Wajib. Nilai tipe STRING atau BINARY.

    • Nilai kembali

      Mengembalikan nilai tipe STRING. Jika parameter input NULL, NULL dikembalikan.

    • Contoh

      • Contoh 1: Menghitung nilai hash SHA dari string ABC. Berikut adalah contoh perintah.

        -- Mengembalikan 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
        select sha('ABC');
      • Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select sha(null);

    SHA1

    • Format perintah

      string sha1(string|binary <expr>)
    • Deskripsi

      Menghitung nilai hash SHA-1 dari ekspresi STRING atau BINARY expr dan mengembalikannya sebagai string heksadesimal.

    • Parameter

      expr: Wajib. Nilai tipe STRING atau BINARY.

    • Nilai kembali

      Mengembalikan nilai tipe STRING. Jika parameter input NULL, NULL dikembalikan.

    • Contoh

      • Contoh 1: Menghitung nilai hash SHA-1 dari string ABC. Berikut adalah contoh perintah.

        -- Mengembalikan 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
        select sha1('ABC');
      • Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select sha1(null);

    SHA2

    • Format perintah

      string sha2(string|binary <expr>, bigint <number>)
    • Deskripsi

      Menghitung nilai hash SHA-2 dari ekspresi STRING atau BINARY expr dan mengembalikannya dalam format yang ditentukan oleh number.

    • Parameter

      • expr: Wajib. Nilai tipe STRING atau BINARY.

      • number: Wajib. Nilai tipe BIGINT. Panjang bit hash. Nilai harus 224, 256, 384, 512, atau 0 (yang sama dengan 256).

    • Nilai kembali

      Mengembalikan nilai tipe STRING. Aturan berikut berlaku:

      • Jika parameter input bernilai NULL, NULL dikembalikan.

      • Jika nilai number tidak berada dalam rentang yang diizinkan, NULL dikembalikan.

    • Contoh

      • Contoh 1: Menghitung nilai hash SHA-2 dari string ABC. Berikut adalah contoh perintah.

        -- Mengembalikan b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78.
        select sha2('ABC', 256);
      • Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.

        -- Mengembalikan NULL.
        select sha2('ABC', null);

    STACK

    • Format perintah

      stack(n, expr1, ..., exprk) 
    • Deskripsi

      Memisahkan expr1, ..., exprk menjadi n baris. Kecuali ditentukan lain, output menggunakan nama kolom default col0, col1, ....

    • Parameter

      • n: Wajib. Jumlah baris yang akan dibagi.

      • expr: Wajib. Parameter yang akan dibagi, expr1, ..., exprk, harus berupa bilangan bulat. Jumlah parameter harus merupakan kelipatan bulat dari n agar dapat dibagi menjadi n baris lengkap. Jika tidak, error dikembalikan.

    • Nilai kembali

      Mengembalikan dataset dengan n baris. Jumlah kolom adalah hasil bagi jumlah parameter dibagi n.

    • Contoh

      -- Mengatur 1, 2, 3, 4, 5, 6 menjadi 3 baris.
      select stack(3, 1, 2, 3, 4, 5, 6);
      -- Hasil berikut dikembalikan.
      +------+------+
      | col0 | col1 |
      +------+------+
      | 1    | 2    |
      | 3    | 4    |
      | 5    | 6    |
      +------+------+
      
      -- Mengatur 'A',10,date '2015-01-01','B',20,date '2016-01-01' menjadi dua baris.
      select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2);
      -- Hasil berikut dikembalikan.
      +------+------+------+
      | col0 | col1 | col2 |
      +------+------+------+
      | A    | 10   | 2015-01-01 |
      | B    | 20   | 2016-01-01 |
      +------+------+------+
      
      -- Mengatur a, b, c, d menjadi dua baris. Jika tabel sumber memiliki beberapa baris, operasi stack dilakukan baris demi baris.
      select stack(2,a,b,c,d) as (col,value)
      from values 
          (1,1,2,3,4),
          (2,5,6,7,8),
          (3,9,10,11,12),
          (4,13,14,15,null)
      as t(key,a,b,c,d);
      -- Hasil berikut dikembalikan.
      +------+-------+
      | col  | value |
      +------+-------+
      | 1    | 2     |
      | 3    | 4     |
      | 5    | 6     |
      | 7    | 8     |
      | 9    | 10    |
      | 11   | 12    |
      | 13   | 14    |
      | 15   | NULL  |
      +------+-------+
      
      -- Gunakan dengan LATERAL VIEW.
      select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20, date '2016-01-01') tf as col0,col1,col2;
      -- Hasil berikut dikembalikan.
      +------+------+------+
      | col0 | col1 | col2 |
      +------+------+------+
      | A    | 10   | 2015-01-01 |
      | B    | 20   | 2016-01-01 |
      +------+------+------+

    STR_TO_MAP

    • Format perintah

      STR_TO_MAP([STRING <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])
    • Deskripsi

      Menggunakan delimiter1 untuk memisahkan text menjadi pasangan kunci-nilai, lalu menggunakan delimiter2 untuk memisahkan setiap pasangan kunci-nilai menjadi kunci dan nilai.

    • Parameter

      • mapDupKeyPolicy: opsional. Nilai tipe STRING. Parameter ini menentukan metode yang digunakan untuk menangani kunci duplikat. Nilai yang valid:

        • exception: Error dikembalikan.

        • last_win: Kunci yang belakang menimpa kunci yang depan.

        Anda juga dapat menentukan parameter odps.sql.map.key.dedup.policy pada tingkat sesi untuk mengonfigurasi metode penanganan kunci duplikat. Misalnya, Anda dapat mengatur odps.sql.map.key.dedup.policy ke exception. Jika Anda tidak menentukan parameter ini, nilai default last_win digunakan.

        Catatan

        Implementasi perilaku MaxCompute ditentukan berdasarkan mapDupKeyPolicy. Jika Anda tidak menentukan mapDupKeyPolicy, nilai odps.sql.map.key.dedup.policy digunakan.

      • text: Wajib. Nilai tipe STRING. String yang akan dipisahkan.

      • delimiter1: Opsional. Nilai tipe STRING. Pemisah. Jika tidak ditentukan, nilai default adalah koma (,).

      • delimiter2: Opsional. Nilai tipe STRING. Pemisah. Jika tidak ditentukan, nilai default adalah tanda sama dengan (=).

        Catatan

        Jika pemisah adalah ekspresi reguler atau karakter khusus, Anda harus melakukan escape dengan dua backslash (\\). Karakter khusus meliputi titik dua (:), titik (.), tanda tanya (?), tanda plus (+), dan tanda bintang (*).

    • Nilai kembali

      Nilai kembali bertipe map<string, string>. Nilai kembali adalah hasil pemisahan text oleh delimiter1 dan delimiter2.

    • Contoh

      -- Mengembalikan {test1:1, test2:2}.
      select str_to_map('test1&1-test2&2','-','&');
      -- Mengembalikan {test1:1, test2:2}.
      select str_to_map("test1.1,test2.2", ",", "\\.");
      -- Mengembalikan {test1:1, test2:3}.
      select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");

    TABLE_EXISTS

    • Format perintah

      BOOLEAN TABLE_EXISTS(STRING <table_name>)
    • Deskripsi

      Memeriksa apakah tabel tertentu ada.

    • Parameter

      table_name: Wajib. Nama tabel. Nilai tipe STRING. Nama tabel dapat mencakup nama proyek, seperti my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan secara default.

    • Nilai kembali

      Mengembalikan nilai tipe BOOLEAN. Fungsi mengembalikan True jika tabel yang ditentukan ada. Jika tidak, fungsi mengembalikan False.

    • Contoh

      -- Digunakan dalam daftar SELECT.
      select if(table_exists('abd'), col1, col2) from src;

    TRANS_ARRAY

    • Batasan

      • Semua kolom yang digunakan sebagai keys harus ditempatkan di awal, dan kolom yang akan ditransposisi harus ditempatkan setelahnya.

      • Pernyataan SELECT hanya dapat berisi satu UDTF. Tidak boleh ada kolom lain.

      • Tidak dapat digunakan dengan GROUP BY, CLUSTER BY, DISTRIBUTE BY, atau SORT BY.

    • Format perintah

      TRANS_ARRAY (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) AS (<key1>,<key2>,...,<col1>, <col2>)
    • Deskripsi

      Fungsi user-defined table-valued function (UDTF) yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini mengonversi array yang disimpan dalam kolom dan dipisahkan oleh pemisah tetap menjadi beberapa baris.

    • Parameter

      • num_keys: Wajib. Konstanta BIGINT. Nilainya harus >=0. Jumlah kolom yang akan digunakan sebagai keys saat mengonversi menjadi beberapa baris.

      • separator: Wajib. Konstanta STRING. Pemisah yang digunakan untuk membagi string menjadi beberapa elemen. Jika parameter ini kosong, error dikembalikan.

      • keys: Wajib. Kolom yang akan digunakan sebagai keys selama transposisi. Jumlah kolom ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagai keys (yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.

      • cols: Wajib. Array yang akan dikonversi menjadi baris. Semua kolom setelah keys dianggap sebagai array yang akan ditransposisi. Kolom-kolom ini harus bertipe STRING dan menyimpan array dalam format string, seperti Hangzhou;Beijing;Shanghai, yaitu array yang dipisahkan oleh titik koma (;).

    • Nilai kembali

      Mengembalikan baris yang telah ditransposisi. Nama kolom baru ditentukan oleh AS. Tipe data kolom yang digunakan sebagai keys tetap tidak berubah. Semua kolom lain bertipe STRING. Jumlah baris hasil ditentukan oleh array yang memiliki elemen terbanyak. Array yang lebih pendek diisi dengan NULL.

    • Contoh

      • Contoh 1: Tabel t_table berisi data berikut.

        +----------+----------+------------+
        | login_id | login_ip | login_time |
        +----------+----------+------------+
        | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 |
        | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 |
        +----------+----------+------------+
        -- Jalankan pernyataan SQL.
        select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
        -- Hasil berikut dikembalikan.
        +----------+----------+------------+
        | login_id | login_ip | login_time |
        +----------+----------+------------+
        | wangwangB | 192.168.45.10 | 20120111010000 |
        | wangwangB | 192.168.67.22 | 20120112010000 |
        | wangwangB | 192.168.6.3 | 20120223080000 |
        | wangwangA | 192.168.0.1 | 20120101010000 |
        | wangwangA | 192.168.0.2 | 20120102010000 |
        +----------+----------+------------+
        
        -- Jika tabel berisi data berikut.
        Login_id LOGIN_IP LOGIN_TIME 
        wangwangA 192.168.0.1,192.168.0.2 20120101010000
        -- Data array yang tidak mencukupi diisi dengan NULL. 
        Login_id Login_ip Login_time 
        wangwangA 192.168.0.1 20120101010000
        wangwangA 192.168.0.2 NULL
      • Contoh 2: Tabel mf_fun_array_test_t berisi data berikut.

        +------------+------------+------------+------------+
        | id         | name       | login_ip   | login_time |
        +------------+------------+------------+------------+
        | 1          | Tom        | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 |
        | 2          | Jerry      | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 |
        +------------+------------+------------+------------+
        
        -- Gunakan dua keys, id dan name, untuk mengonversi menjadi array. Jalankan pernyataan SQL.
        select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
        -- Hasil berikut dikembalikan. Data dibagi dan dikelompokkan berdasarkan keys id dan name.
        +------------+------------+------------+------------+
        | id         | name       | login_ip   | login_time |
        +------------+------------+------------+------------+
        | 1          | Tom        | 192.168.100.1 | 20211101010101 |
        | 1          | Tom        | 192.168.100.2 | 20211101010102 |
        | 2          | Jerry      | 192.168.100.3 | 20211101010103 |
        | 2          | Jerry      | 192.168.100.4 | 20211101010104 |
        +------------+------------+------------+------------+

    TRANS_COLS

    • Batasan

      • Semua kolom yang digunakan sebagai keys harus ditempatkan di awal, dan kolom yang akan ditransposisi harus ditempatkan setelahnya.

      • Pernyataan SELECT hanya dapat berisi satu UDTF. Tidak boleh ada kolom lain.

    • Format perintah

      TRANS_COLS (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) AS (<idx>, <key1>,<key2>,…,<col1>, <col2>)
    • Deskripsi

      UDTF yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini memisahkan kolom berbeda menjadi baris berbeda.

    • Parameter

      • num_keys: Wajib. Konstanta BIGINT. Nilainya harus >=0. Jumlah kolom yang akan digunakan sebagai keys saat mengonversi menjadi beberapa baris.

      • keys: Wajib. Kolom yang akan digunakan sebagai keys selama transposisi. Jumlah kolom ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagai keys (yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.

      • idx: Wajib. Nomor baris setelah konversi.

      • cols: Wajib. Kolom yang akan dikonversi menjadi baris.

    • Nilai kembali

      Mengembalikan baris yang telah ditransposisi. Nama kolom baru ditentukan oleh AS. Kolom pertama output adalah indeks transposisi, yang dimulai dari 1. Tipe data kolom yang digunakan sebagai keys tetap tidak berubah. Semua kolom lain mempertahankan tipe data aslinya.

    • Contoh

      Tabel t_table berisi data berikut.

      +----------+----------+------------+
      | Login_id | Login_ip1 | Login_ip2 |
      +----------+----------+------------+
      | wangwangA | 192.168.0.1 | 192.168.0.2 |
      +----------+----------+------------+
      -- Jalankan pernyataan SQL.
      select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table;
      -- Hasil berikut dikembalikan.
      idx    login_id    login_ip
      1    wangwangA    192.168.0.1
      2    wangwangA    192.168.0.2

    UNIQUE_ID

    • Format perintah

      string unique_id()
    • Deskripsi

      Mengembalikan ID unik acak, seperti 29347a88-1e57-41ae-bb68-a9edbdd9****_1. Fungsi ini lebih efisien daripada fungsi UUID dan mengembalikan ID yang lebih panjang. Dibandingkan dengan UUID, ID ini mencakup garis bawah tambahan (_) dan angka, seperti _1.

    UUID

    • Format perintah

      string uuid()
    • Deskripsi

      Mengembalikan ID acak, seperti 29347a88-1e57-41ae-bb68-a9edbdd9****.

      Catatan

      UUID mengembalikan ID global acak yang memiliki probabilitas sangat rendah untuk berulang.