All Products
Search
Document Center

MaxCompute:Ikhtisar fungsi lainnya

Last Updated:Aug 11, 2026

MaxCompute SQL menyediakan sejumlah fungsi umum tambahan. Topik ini menjelaskan sintaks, parameter, dan contoh penggunaan untuk fungsi seperti CAST, FAILIF, dan HASH.

Function

Feature

BETWEEN AND expression

Anda dapat memfilter data yang berada dalam rentang tertentu.

CASE WHEN expression

Mengembalikan nilai berdasarkan hasil evaluasi suatu ekspresi.

CAST

Mengonversi hasil suatu ekspresi ke tipe data yang ditentukan.

COALESCE

Mengembalikan nilai pertama yang tidak null dalam daftar parameter.

COMPRESS

Menggunakan algoritma GZIP untuk mengompres parameter input bertipe STRING atau BINARY.

CRC32

Menghitung nilai Pemeriksaan redundansi siklik dari nilai bertipe STRING atau BINARY.

DECOMPRESS

Menggunakan algoritma GZIP untuk mendekompres parameter input bertipe BINARY.

FAILIF

Mengembalikan true atau pesan error dengan informasi kustom berdasarkan hasil evaluasi suatu ekspresi.

GET_IDCARD_AGE

Mengembalikan usia dalam tahun berdasarkan nomor KTP.

GET_IDCARD_BIRTHDAY

Mengembalikan tanggal lahir berdasarkan nomor KTP.

GET_IDCARD_SEX

Mengembalikan jenis kelamin berdasarkan nomor KTP.

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 nama partisi hash terbesar dalam tabel partisi.

NULLIF

Memeriksa apakah nilai dua parameter input sama.

NVL

Menentukan nilai kembali untuk parameter yang bernilai null.

ORDINAL

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

PARTITION_EXISTS

Memeriksa apakah partisi tertentu ada dalam tabel.

SAFE_CAST

Mengonversi ekspresi (expr) ke tipe data target (type).

SAMPLE

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

SHA

Menghitung nilai hash SHA-1 dari nilai bertipe STRING atau BINARY.

SHA1

Menghitung nilai hash SHA-1 dari nilai bertipe STRING atau BINARY.

SHA2

Menghitung nilai hash SHA-2 dari nilai bertipe STRING atau BINARY.

STACK

Memisahkan grup parameter tertentu menjadi jumlah baris yang ditentukan.

STR_TO_MAP

Memisahkan string dengan delimiter tertentu dan mengembalikan pasangan kunci-nilai.

TABLE_EXISTS

Memeriksa apakah tabel tertentu ada.

TRANS_ARRAY

Memindahkan satu baris data menjadi beberapa baris. Fungsi ini adalah user-defined table-valued function (UDTF) yang memindahkan array yang dipisahkan oleh delimiter tetap dalam suatu kolom menjadi beberapa baris.

TRANS_COLS

User-defined table-valued function (UDTF) yang mengubah satu baris menjadi beberapa baris dengan memisahkan satu atau beberapa kolom.

UNIQUE_ID

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

UUID

Mengembalikan ID acak.

BETWEEN AND expression

  • Sintaks

    <a> [NOT] between <b> and <c>
  • Deskripsi

    Memeriksa apakah nilai a berada dalam rentang b dan c, atau di luar rentang b dan c.

  • Parameter

    • a: Wajib. Bidang yang akan diperiksa.

    • b dan c: Wajib. Parameter ini menentukan batas rentang nilai. Tipe data b dan c harus sama dengan tipe data parameter a.

  • Nilai kembali

    Data yang memenuhi kondisi dikembalikan.

    Jika salah satu parameter a, b, atau c bernilai null, fungsi ini mengembalikan null.

  • Contoh

    Tabel emp berisi data berikut.

    | 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

    Kueri data di mana nilai sal berada di antara 1.000 dan 1.500. Contoh pernyataan:

    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

  • Sintaks

    MaxCompute menyediakan dua format berikut untuk ekspresi CASE WHEN:

    • 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 result berdasarkan evaluasi terhadap value atau _condition.

  • Parameter

    • value: Wajib. Nilai yang akan dibandingkan.

    • _condition: Wajib. Kondisi yang akan dievaluasi.

    • result: Wajib. Nilai yang akan dikembalikan.

  • Nilai kembali

    • Jika semua nilai result bertipe BIGINT atau DOUBLE, nilai-nilai tersebut dikonversi ke tipe DOUBLE sebelum dikembalikan.

    • Jika terdapat nilai result bertipe STRING, semua nilai result dikonversi ke tipe STRING sebelum dikembalikan. Error dikembalikan jika konversi tipe data tidak didukung—misalnya, data bertipe BOOLEAN tidak dapat dikonversi ke tipe STRING.

    • Konversi antar tipe data lainnya tidak didukung.

  • Contoh

    Tabel sale_detail berisi kolom shop_name string, customer_id string, total_price double. Tabel 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

  • Sintaks

    cast(<expr> as <type>)
  • Deskripsi

    Mengonversi nilai expr ke tipe data target type.

  • Parameter

    • expr: Wajib. Ekspresi yang akan dikonversi.

    • type: Wajib. Tipe data target. Contoh penggunaannya sebagai berikut:

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

      • cast(string as bigint): Mengonversi nilai bertipe STRING ke tipe BIGINT. Jika string hanya berisi bilangan bulat, nilai tersebut langsung dikonversi ke tipe BIGINT. Jika string berisi bilangan titik mengambang atau dalam bentuk eksponensial, nilai tersebut terlebih dahulu dikonversi ke tipe DOUBLE lalu ke tipe BIGINT.

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

  • Nilai kembali

    • Mengembalikan nilai bertipe data target.

    • Jika Anda menjalankan setproject odps.function.strictmode=false, awalan numerik dari string dikembalikan.

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

    • Saat mengonversi nilai ke tipe DECIMAL, nol trailing setelah koma desimal dihapus jika Anda mengatur odps.sql.decimal.tostring.trimzero=true. Nol trailing dipertahankan jika Anda mengatur odps.sql.decimal.tostring.trimzero=false.

      Penting

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

  • Contoh

    • Contoh 1: Penggunaan umum.

      --Mengembalikan 1.
      select cast('1' as bigint);
    • Contoh 2: Mengonversi nilai STRING ke nilai BOOLEAN. Jika STRING kosong, false dikembalikan; jika tidak, true dikembalikan.

      • STRING kosong.

        select cast("" as boolean);
        --Mengembalikan
        +------+
        | _c0  |
        +------+
        | false |
        +------+
      • STRING tidak kosong.

        select cast("false" as boolean);
        --Mengembalikan true
        +------+
        | _c0  |
        +------+
        | true |
        +------+
    • Contoh 3: Mengonversi string ke tanggal.

      --Mengonversi string ke tanggal.
      select cast("2022-12-20" as date);
      --Mengembalikan
      +------------+
      | _c0        |
      +------------+
      | 2022-12-20 |
      +------------+
      
      --Mengonversi string tanggal dengan bagian waktu ke tanggal.
      select cast("2022-12-20 00:01:01" as date);
      --Mengembalikan
      +------------+
      | _c0        |
      +------------+
      | NULL       |
      +------------+
      --Untuk memastikan nilai ditampilkan dengan benar, atur parameter berikut:
      set odps.sql.executionengine.enable.string.to.date.full.format= true;
      select cast("2022-12-20 00:01:01" as date);
      --Mengembalikan
      +------------+
      | _c0        |
      +------------+
      | 2022-12-20 |
      +------------+
      Catatan

      Secara default, parameter odps.sql.executionengine.enable.string.to.date.full.format bernilai false. Untuk mengonversi string tanggal yang mencakup bagian waktu, atur parameter ini ke true.

    • Contoh 4 (Contoh perintah salah): Penggunaan tidak valid. Exception dilempar jika konversi gagal atau tidak didukung. Perintah berikut merupakan contoh penggunaan salah.

      select cast('abc' as bigint);
    • Contoh 5: Contoh skenario dengan setproject odps.function.strictmode=false diatur.

      setprojectodps.function.strictmode=false;
      select cast('123abc'as bigint);
      --Mengembalikan
      +------------+
      |_c0|
      +------------+
      |123|
      +------------+
    • Contoh 6: Contoh skenario dengan setproject odps.function.strictmode=true diatur.

      setprojectodps.function.strictmode=true;
      select cast('123abc' as bigint);
      --Mengembalikan
      FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.
    • Contoh 7: Contoh skenario dengan odps.sql.decimal.tostring.trimzero diatur.

      --Membuat tabel.
      create table mf_dot (dcm1 decimal(38,18),
                           dcm2 decimal(38,18));
      --Memasukkan data.
      insert into table mf_dot values (12.45500BD,12.3400BD);
      
      --Saat flag bernilai true atau tidak diatur.
      set odps.sql.decimal.tostring.trimzero=true;
      --Menghapus nol trailing setelah koma desimal.
      select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
      --Nilai kembali
      +------------+------------+
      | _c0        | _c1        |
      +------------+------------+
      | 12.455     | 12.34      |
      +------------+------------+
      
      --Saat flag bernilai false.
      set odps.sql.decimal.tostring.trimzero=false;
      --Mempertahankan nol trailing setelah koma desimal.
      select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
      --Nilai kembali
      +------------+------------+
      | _c0        | _c1        |
      +------------+------------+
      | 12.455     | 12.340     |
      +------------+------------+
      
      --Parameter ini juga berlaku untuk nilai statis.
      set odps.sql.decimal.tostring.trimzero=false;
      select cast(round(12345.120BD,3) as string);
      --Mengembalikan:
      +------------+
      | _c0        |
      +------------+
      | 12345.120  |
      +------------+

COALESCE

  • Sintaks

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

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

  • Parameter

    expr: Wajib. Nilai yang akan divalidasi.

  • Nilai kembali

    Nilai kembali memiliki tipe data yang sama dengan parameter.

  • Contoh

    • Contoh 1: Contoh penggunaan umum. Contoh pernyataan:

      -- Nilai kembali adalah 1.
      select coalesce(null,null,1,null,3,5,7);
    • Contoh 2: Error terjadi jika tipe nilai parameter tidak didefinisikan.

      • Pernyataan contoh salah

        -- Nilai abc tidak dapat diidentifikasi karena tipe data nilai abc tidak didefinisikan. Error dikembalikan.
        select coalesce(null,null,1,null,abc,5,7);
      • Pernyataan contoh benar

        select coalesce(null,null,1,null,'abc',5,7);
    • Contoh 3: Jika data tidak dibaca dari tabel dan semua parameter input bernilai null, error dikembalikan. Pernyataan contoh salah:

      --Error dikembalikan, menunjukkan bahwa setidaknya satu parameter harus tidak NULL.
      select coalesce(null,null,null,null);
    • Contoh 4: Jika data dibaca dari tabel dan semua parameter input bernilai null, fungsi ini mengembalikan null.

      Tabel data asli:

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

      Nilai bidang untuk toko tt dalam tabel sumber semuanya null. Saat pernyataan berikut dijalankan, null dikembalikan.

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

COMPRESS

  • Sintaks

    binary compress(string <str>)
    binary compress(binary <bin>)
  • Deskripsi

    Mengompres str atau bin menggunakan algoritma GZIP.

  • Parameter

    • str: Wajib. Nilai bertipe STRING.

    • bin: Wajib. Nilai bertipe BINARY.

  • Nilai kembali

    Mengembalikan nilai bertipe BINARY. Jika input bernilai null, nilai kembali adalah null.

  • Contoh

    • Contoh 1: Gunakan algoritma GZIP untuk mengompres string hello. Contoh pernyataan:

      -- 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. Contoh pernyataan:

      -- 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 bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select compress(null);

CRC32

  • Sintaks

    bigint crc32(string|binary <expr>)
  • Deskripsi

    Menghitung nilai Pemeriksaan redundansi siklik untuk expr. Nilai `expr` harus bertipe STRING atau BINARY.

  • Parameter

    expr: Wajib. Nilai bertipe STRING atau BINARY.

  • Nilai kembali

    Mengembalikan nilai bertipe BIGINT. Nilai kembali mengikuti aturan berikut:

    • Jika input bernilai null, nilai kembali adalah null.

    • Jika input adalah string kosong, nilai kembali adalah 0.

  • Contoh

    • Contoh 1: Hitung nilai Pemeriksaan redundansi siklik dari string ABC. Contoh pernyataan:

      -- Nilai kembali adalah 2743272264.
      select crc32('ABC');
    • Contoh 2: Parameter input bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select crc32(null);

DECOMPRESS

  • Sintaks

    binary decompress(binary <bin>)
  • Deskripsi

    Mendekompres bin menggunakan algoritma GZIP.

  • Parameter

    bin: Wajib. Nilai bertipe BINARY.

  • Nilai kembali

    Mengembalikan nilai bertipe BINARY. Jika input bernilai null, nilai kembali adalah null.

  • Contoh

    • Contoh 1: Dekompres string terkompresi hello, world dan konversi hasilnya ke string. Contoh pernyataan:

      -- Nilai kembali adalah hello, world.
      select cast(decompress(compress('hello, world')) as string);
    • Contoh 2: Parameter input bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select decompress(null);

GET_IDCARD_AGE

  • Sintaks

    get_idcard_age(<idcardno>)
  • Deskripsi

    Menghitung usia saat ini berdasarkan nomor KTP. Usia dihitung dengan mengurangkan tahun lahir dari tahun saat ini.

  • Parameter

    idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.

  • Nilai kembali

    Mengembalikan nilai bertipe BIGINT. Jika input bernilai null, nilai kembali adalah null.

GET_IDCARD_BIRTHDAY

  • Sintaks

    get_idcard_birthday(<idcardno>)
  • Deskripsi

    Mengambil tanggal lahir dari nomor KTP.

  • Parameter

    idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.

  • Nilai kembali

    Mengembalikan nilai bertipe DATETIME. Jika input bernilai null, nilai kembali adalah null.

GET_IDCARD_SEX

  • Sintaks

    get_idcard_sex(<idcardno>)
  • Deskripsi

    Mengambil jenis kelamin dari nomor KTP. Nilai kembali yang valid adalah M (laki-laki) dan F (perempuan).

  • Parameter

    idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.

  • Nilai kembali

    Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.

GET_USER_ID

  • Sintaks

    get_user_id()
  • Deskripsi

    Mengambil ID akun saat ini, juga dikenal sebagai user ID (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

  • Sintaks

    • Jika proyek MaxCompute berada dalam mode kompatibel Hive, gunakan sintaks berikut.

      INT HASH(<value1>, <value2>[, ...]);
    • Jika proyek MaxCompute tidak berada dalam mode kompatibel Hive, gunakan sintaks berikut.

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

    Mengembalikan nilai hash berdasarkan value1 dan value2.

  • Parameter

    value1 dan value2: Wajib. Parameter yang akan di-hash. Parameter dapat memiliki tipe data berbeda. Tipe data yang didukung berbeda antara mode kompatibel Hive dan mode 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

    Jika dua parameter input identik, nilai hash yang dikembalikan juga identik. Namun, jika dua nilai hash yang dikembalikan identik, parameter input belum tentu identik karena kemungkinan terjadinya tabrakan hash (hash collisions).

  • Nilai kembali

    Mengembalikan nilai bertipe INT atau BIGINT. Jika parameter input adalah string kosong atau null, nilai kembali adalah 0.

  • Contoh

    • Contoh 1: Hitung nilai hash dari parameter input yang memiliki tipe data sama. Contoh pernyataan:

      -- Nilai kembali adalah 66.
      SELECT HASH(0L, 2L, 4L);
    • Contoh 2: Hitung nilai hash dari parameter input yang memiliki tipe data berbeda. Contoh pernyataan:

      -- Nilai kembali adalah 97.
      SELECT HASH(0L, 'a');
    • Contoh 3: Parameter input adalah string kosong atau null. Contoh pernyataan:

      -- Nilai kembali adalah 0.
      SELECT HASH(0L, null);
      -- Nilai kembali adalah 0.
      SELECT HASH(0L, '');

IF

  • Sintaks

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

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

  • Parameter

    • testCondition: Wajib. Ekspresi yang akan dievaluasi. Nilai harus bertipe BOOLEAN.

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

    • valueFalseOrNull: Nilai yang akan dikembalikan jika testCondition bernilai false. Anda dapat mengatur parameter ini ke null.

  • Nilai kembali

    Tipe data nilai kembali adalah tipe data umum dari valueTrue dan valueFalseOrNull.

  • Contoh

    -- Nilai kembali adalah 200.
    select if(1=2, 100, 200); 

MAX_PT

  • Sintaks

    MAX_PT(<table_full_name>)
  • Deskripsi

    Mengembalikan nama partisi terbesar yang berisi data dalam tabel partisi. Partisi diurutkan secara alfabetis. Fungsi ini biasanya digunakan dalam klausa `WHERE` untuk membaca data dari partisi terbaru.

  • Perhatian

    • Fungsi MAX_PT juga dapat diimplementasikan menggunakan pernyataan SQL standar. Misalnya, 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. Untuk menemukan partisi terkecil yang berisi data dalam tabel partisi, Anda tidak dapat menggunakan pernyataan SQL SELECT * FROM table WHERE pt=MIN_PT("table"); seperti yang Anda lakukan dengan fungsi MAX_PT. Sebagai gantinya, gunakan pernyataan SQL standar SELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table);.

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

    • Fungsi MAX_PT didukung untuk tabel eksternal OSS maupun Tabel internal. Perilaku fungsi ini sama untuk kedua jenis tabel.

  • Parameter

    table_full_name: Wajib. Nilai bertipe STRING yang menentukan nama tabel. Anda harus memiliki izin baca pada tabel tersebut.

  • Nilai kembali

    Mengembalikan nama partisi terbesar.

    Catatan

    Partisi yang dibuat menggunakan pernyataan ALTER TABLE tetapi tidak berisi data tidak dikembalikan.

  • Contoh

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

      SELECT * FROM tbl WHERE pt= MAX_PT('tbl');
      -- Pernyataan di atas setara dengan pernyataan berikut:
      SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);
    • Contoh 2: Jika tabel memiliki beberapa level partisi, gunakan pernyataan SQL standar untuk mengambil data dari partisi terbesar. Contoh pernyataan:

      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

  • Sintaks

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

    Membandingkan expr1 dan expr2. Jika nilainya sama, fungsi mengembalikan null. Jika nilainya berbeda, fungsi mengembalikan nilai expr1.

  • Parameter

    expr1 dan expr2: Wajib. Ekspresi dengan tipe data apa pun. T menentukan tipe data input, yang dapat berupa tipe data apa pun yang didukung MaxCompute.

  • Nilai kembali

    Mengembalikan nilai expr1 atau null.

  • Contoh

    -- Nilai kembali adalah 2.
    select nullif(2, 3);
    -- Nilai kembali adalah null.
    select nullif(2, 2);
    -- Nilai kembali adalah 3.
    select nullif(3, null);

NVL

  • Sintaks

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

    Mengembalikan default_value jika value bernilai null. Jika tidak, fungsi mengembalikan value. Parameter `value` dan `default_value` harus memiliki tipe data yang sama.

  • Parameter

    • value: Wajib. Parameter input. T menentukan tipe data input, yang dapat berupa tipe data apa pun yang didukung MaxCompute.

    • default_value: Wajib. Nilai yang akan digunakan sebagai pengganti null. Tipe data `default_value` harus sama dengan tipe data value.

  • Contoh

    Tabel bernama t_data berisi tiga kolom: c1 string, c2 bigint, dan c3 datetime. Tabel ini 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 |
    +----+------------+------------+

    Setelah fungsi nvl dipanggil, nilai null di c1 diganti dengan `00000`, nilai null di c2 diganti dengan `0`, dan nilai null di c3 diganti dengan tanda hubung (-). Contoh pernyataan:

    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

  • Sintaks

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

    Mengurutkan variabel input secara ascending dan mengembalikan nilai pada peringkat ke-nth.

  • Parameter

    • nth: Wajib. Nilai bertipe BIGINT yang menentukan peringkat nilai yang akan dikembalikan. Peringkat dimulai dari 1. Jika parameter ini bernilai null, fungsi mengembalikan null.

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

  • Nilai kembali

    • Mengembalikan nilai pada peringkat ke-nth. Jika tidak diperlukan konversi implisit, nilai kembali memiliki tipe data yang sama dengan parameter input.

    • Jika terjadi konversi tipe data antara tipe DOUBLE, BIGINT, dan STRING, nilai bertipe DOUBLE dikembalikan. Jika terjadi konversi tipe data antara tipe STRING dan DATETIME, nilai bertipe DATETIME dikembalikan. Konversi implisit tipe data lainnya tidak didukung.

    • Nilai null diperlakukan sebagai nilai minimum.

  • Contoh

    -- Nilai kembali adalah 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

  • Sintaks

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

    Memeriksa apakah partisi tertentu ada dalam tabel.

  • Parameter

    • table_name: Wajib. Nama tabel, bertipe STRING. Anda dapat menentukan nama proyek dalam nama tabel, seperti my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan.

    • partitions: Wajib. Nama partisi, bertipe STRING. Anda harus menentukan nilai kolom kunci partisi dalam urutan yang sama seperti yang didefinisikan dalam tabel. Jumlah nilai harus sesuai dengan jumlah kolom kunci partisi.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN. Fungsi mengembalikan `true` jika partisi yang ditentukan ada; jika tidak, fungsi mengembalikan `false`.

  • Contoh

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

SAFE_CAST

SAFE_CAST AS INT

  • Sintaks

    SAFE_CAST (<expr> AS INT)
  • Parameter

    expr: Wajib. Ekspresi yang akan dikonversi.

  • Nilai kembali

    Mengembalikan nilai INT. Jika konversi berhasil, fungsi mengembalikan nilai yang sesuai. Jika konversi gagal, fungsi mengembalikan NULL alih-alih menimbulkan error. Ini adalah perilaku inti yang membedakan SAFE_CAST dari CAST.

    • Untuk string dengan karakter non-numerik, seperti '123abc':

      • Dalam mode non-ketat (default, odps.sql.udf.strict.mode=false), operasi mengembalikan bagian numerik sebelum huruf.

      • Dalam mode ketat (odps.sql.udf.strict.mode=true), NULL dikembalikan.

    • Untuk string yang hanya berisi karakter non-numerik, seperti 'abc':

      • Dalam mode non-ketat (default) (odps.sql.udf.strict.mode=false), NULL dikembalikan.

      • Dalam mode ketat (odps.sql.udf.strict.mode=true), NULL dikembalikan.

  • Contoh

    -- Mode non-ketat (default)
    SELECT  SAFE_CAST('123abc' AS INT) AS toint
            ,SAFE_CAST('abc' AS INT) AS toint2
    ;
    
    -- Hasil
    +-------+--------+
    | toint | toint2 |
    +-------+--------+
    | 123   | NULL   |
    +-------+--------+
    
    -- Mode ketat
    SET odps.sql.udf.strict.mode=true;
    SELECT  SAFE_CAST('123abc' AS INT) AS toint
            ,SAFE_CAST('abc' AS INT) AS toint2
    ;
    
    -- Hasil
    +-------+--------+
    | toint | toint2 |
    +-------+--------+
    | NULL  | NULL   |
    +-------+--------+

SAFE_CAST AS BIGINT

  • Sintaks

    SAFE_CAST (<expr> AS BIGINT)
  • Parameter

    expr: Wajib. Ekspresi yang akan dikonversi.

  • Nilai kembali

    Mengembalikan nilai BIGINT. Jika konversi berhasil, fungsi mengembalikan nilai yang sesuai. Jika konversi gagal, fungsi mengembalikan NULL alih-alih menimbulkan error. Ini adalah perilaku inti yang membedakan SAFE_CAST dari CAST.

    • Untuk string dengan karakter non-numerik, seperti '123abc':

      • Dalam mode non-ketat (default) (odps.sql.udf.strict.mode=false), fungsi mengembalikan bagian numerik sebelum huruf.

      • Dalam mode ketat (odps.sql.udf.strict.mode=true), NULL dikembalikan.

    • Untuk string yang hanya berisi karakter non-numerik, seperti 'abc':

      • Dalam mode non-ketat (default) (odps.sql.udf.strict.mode=false), fungsi mengembalikan 0.

      • Dalam mode ketat (odps.sql.udf.strict.mode=true), NULL dikembalikan.

  • Contoh

    -- Mode non-ketat (default)
    SELECT  SAFE_CAST('123abc' AS BIGINT) AS tobigint
            ,SAFE_CAST('abc' AS BIGINT) AS tobigint2
    ;
    
    -- Hasil
    +------------+------------+
    | tobigint   | tobigint2  |
    +------------+------------+
    | 123        | 0          |
    +------------+------------+
    
    -- Mode ketat
    SET odps.sql.udf.strict.mode=true;
    SELECT  SAFE_CAST('123abc' AS BIGINT) AS tobigint
            ,SAFE_CAST('abc' AS BIGINT) AS tobigint2
    ;
    
    -- Hasil
    +------------+------------+
    | tobigint   | tobigint2  |
    +------------+------------+
    | NULL       | NULL       |
    +------------+------------+

SAMPLE

  • Sintaks

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

    Mengambil sampel semua nilai dari column_name berdasarkan x dan y, serta memfilter baris yang tidak memenuhi kondisi sampling.

  • Parameter

    • x dan y: x wajib. `x` dan `y` harus merupakan konstanta integer bertipe BIGINT yang lebih besar dari 0. Parameter ini menunjukkan bahwa nilai-nilai dibagi menjadi x bagian berdasarkan fungsi hash, dan bagian ke-y dipilih.

      y opsional. Jika y tidak ditentukan, bagian pertama dipilih secara default, dan Anda tidak perlu menentukan column_name.

      Error dikembalikan jika x atau y bertipe data lain, kurang dari atau sama dengan 0, atau jika y lebih besar dari x. Jika x atau y bernilai null, fungsi mengembalikan null.

    • column_name: Opsional. Nama kolom tempat sampling dilakukan. Jika parameter ini tidak ditentukan, sampling acak dilakukan berdasarkan nilai x dan y. Kolom dapat bertipe data apa pun, dan nilainya dapat bernilai null. Konversi implisit tidak dilakukan. Error dikembalikan jika column_name itu sendiri bernilai null.

      Catatan
      • Untuk mencegah kesenjangan data yang disebabkan oleh nilai null, hashing seragam dilakukan pada nilai null di column_name di seluruh x bagian. Jika column_name tidak ditentukan dan jumlah data kecil, output mungkin tidak seragam. Dalam kasus ini, kami menyarankan Anda menentukan column_name untuk mendapatkan output yang seragam.

      • Sampling acak hanya dapat dilakukan pada kolom bertipe data BIGINT, DATETIME, BOOLEAN, DOUBLE, STRING, BINARY, CHAR, dan VARCHAR.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN.

  • Contoh

    Tabel tbla berisi kolom cola.

    -- Nilai dalam kolom cola dibagi menjadi empat bagian berdasarkan fungsi hash, dan bagian pertama digunakan. True dikembalikan.
    select * from tbla where sample (4, 1 , cola);
    -- Nilai di setiap baris di-hash secara acak ke empat bagian, dan bagian kedua digunakan. True dikembalikan.
    select * from tbla where sample (4, 2);

SHA

  • Sintaks

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

    Menghitung nilai hash SHA-1 dari expr dan mengembalikan nilai hash tersebut sebagai string heksadesimal. Parameter `expr` harus bertipe STRING atau BINARY.

  • Parameter

    expr: Wajib. Nilai bertipe STRING atau BINARY.

  • Nilai kembali

    Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.

  • Contoh

    • Contoh 1: Hitung nilai hash SHA dari string ABC. Contoh pernyataan:

      -- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
      select sha('ABC');
    • Contoh 2: Parameter input bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select sha(null);

SHA1

  • Sintaks

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

    Menghitung nilai hash SHA-1 dari expr dan mengembalikan nilai hash tersebut sebagai string heksadesimal. Parameter `expr` harus bertipe STRING atau BINARY.

  • Parameter

    expr: Wajib. Nilai bertipe STRING atau BINARY.

  • Nilai kembali

    Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.

  • Contoh

    • Contoh 1: Hitung nilai hash SHA-1 dari string ABC. Contoh pernyataan:

      -- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
      select sha1('ABC');
    • Contoh 2: Parameter input bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select sha1(null);

SHA2

  • Sintaks

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

    Menghitung nilai hash SHA-2 dari expr dan mengembalikan nilai hash tersebut dalam format yang ditentukan oleh number. Parameter `expr` harus bertipe STRING atau BINARY.

  • Parameter

    • expr: Wajib. Nilai bertipe STRING atau BINARY.

    • number: Wajib. Nilai bertipe BIGINT yang menentukan panjang bit hash. Nilai yang valid adalah 224, 256, 384, 512, dan 0. Nilai kembali untuk 256 sama dengan nilai kembali untuk 0.

  • Nilai kembali

    Mengembalikan nilai bertipe STRING. Nilai kembali mengikuti aturan berikut:

    • Jika parameter input bernilai null, fungsi mengembalikan null.

    • Jika nilai number tidak berada dalam rentang yang valid, fungsi mengembalikan null.

  • Contoh

    • Contoh 1: Hitung nilai hash SHA-2 dari string ABC. Contoh pernyataan:

      -- Nilai kembali adalah b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78.
      select sha2('ABC', 256);
    • Contoh 2: Parameter input bernilai null. Contoh pernyataan:

      -- Nilai kembali adalah null.
      select sha2('ABC', null);

STACK

  • Sintaks

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

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

  • Parameter

    • n: Wajib. Jumlah baris yang akan dibuat.

    • expr: Wajib. Ekspresi yang akan dipisahkan. expr1, ..., exprk harus bertipe integer. Jumlah ekspresi harus merupakan kelipatan integer dari n agar dapat dipisahkan menjadi n baris lengkap. Jika tidak, error dikembalikan.

  • Nilai kembali

    Mengembalikan dataset berisi `n` baris. Jumlah kolom adalah jumlah total ekspresi dibagi `n`.

  • Contoh

    -- Memisahkan grup parameter 1, 2, 3, 4, 5, 6 menjadi tiga baris.
    select stack(3, 1, 2, 3, 4, 5, 6);
    -- Hasil berikut dikembalikan.
    +------+------+
    | col0 | col1 |
    +------+------+
    | 1    | 2    |
    | 3    | 4    |
    | 5    | 6    |
    +------+------+
    
    -- Memisahkan '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 |
    +------+------+------+
    
    -- Memisahkan a, b, c, dan d menjadi dua baris. Jika tabel sumber berisi beberapa baris, fungsi ini dipanggil untuk setiap 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 fungsi ini dengan klausa 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

  • Sintaks

    str_to_map([string <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])
  • Deskripsi

    Memisahkan text menjadi pasangan kunci-nilai menggunakan delimiter1, lalu memisahkan kunci dari nilai di setiap pasangan menggunakan delimiter2.

  • Parameter

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

      • exception: Error dikembalikan.

      • last_win: Kunci yang belakang menggantikan kunci yang depan.

      Anda juga dapat menentukan parameter odps.sql.map.key.dedup.policy pada tingkat session 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. String yang akan dipisahkan. Nilai harus bertipe STRING.

    • delimiter1: Delimiter opsional bertipe STRING. Jika parameter ini tidak ditentukan, koma (,) digunakan secara default.

    • delimiter2: Delimiter opsional bertipe STRING. Jika parameter ini tidak ditentukan, tanda sama dengan (=) digunakan secara default.

      Catatan

      Jika delimiter berupa ekspresi reguler atau karakter khusus, Anda harus melakukan escape dengan dua backslash (\\). Karakter khusus yang dapat digunakan sebagai delimiter meliputi titik dua (:), titik (.), tanda tanya (?), tanda plus (+), dan tanda bintang (*).

  • Nilai kembali

    Mengembalikan nilai bertipe map<string, string>. Fungsi memisahkan string text menggunakan delimiter1 dan delimiter2.

  • Contoh

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

TABLE_EXISTS

  • Sintaks

    boolean table_exists(string <table_name>)
  • Deskripsi

    Memeriksa apakah tabel tertentu ada.

  • Parameter

    table_name: Wajib. Nama tabel, bertipe STRING. Anda dapat menentukan nama proyek dalam nama tabel, seperti my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN. Fungsi mengembalikan `true` jika tabel yang ditentukan ada; jika tidak, fungsi mengembalikan `false`.

  • Contoh

    -- Gunakan fungsi ini untuk daftar dalam pernyataan SELECT.
    select if(table_exists('abd'), col1, col2) from src;

TRANS_ARRAY

  • Batasan

    • Semua kolom yang digunakan sebagai key harus ditempatkan sebelum kolom yang akan ditransposisikan.

    • Hanya satu user-defined table-valued function (UDTF) yang diizinkan dalam pernyataan select. Kolom lain tidak diizinkan.

    • Fungsi ini tidak dapat digunakan dengan klausa group by, cluster by, distribute by, atau sort by.

  • Sintaks

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

    Memindahkan satu baris data menjadi beberapa baris. UDTF ini memindahkan kolom yang berisi array yang dipisahkan oleh delimiter tetap menjadi beberapa baris.

  • Parameter

    • num_keys: Wajib. Konstanta bertipe BIGINT. Nilai harus lebih besar dari atau sama dengan 0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagai key saat memindahkan satu baris menjadi beberapa baris.

    • separator: Wajib. Konstanta bertipe STRING yang digunakan untuk memisahkan string menjadi beberapa elemen. Error dikembalikan jika parameter ini adalah string kosong.

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

    • cols: Wajib. Parameter ini menentukan array yang ingin Anda transposisikan menjadi baris. Semua kolom yang mengikuti keys dianggap sebagai array yang akan ditransposisikan. Nilai parameter ini harus bertipe STRING untuk menyimpan array dalam format string, seperti Hangzhou;Beijing;Shanghai. Nilai dalam array ini dipisahkan oleh titik koma (;).

  • Nilai kembali

    Mengembalikan baris yang telah ditransposisikan. Nama kolom baru ditentukan oleh as. Tipe data kolom yang digunakan sebagai key tetap tidak berubah. Semua kolom lain bertipe STRING. Jumlah baris yang ditransposisikan ditentukan oleh array yang memiliki elemen paling banyak. Jika array lain memiliki lebih sedikit elemen, null digunakan untuk nilai yang hilang.

  • 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
      -- Nilai null ditambahkan untuk melengkapi array yang datanya tidak mencukupi. 
      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 key, id dan name, untuk mentransposisikan 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 dipisah dan dikelompokkan berdasarkan key 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 key harus ditempatkan sebelum kolom yang akan ditransposisikan.

    • Hanya satu UDTF yang diizinkan dalam pernyataan select. Kolom lain tidak diizinkan.

  • Sintaks

    trans_cols (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) as (<idx>, <key1>,<key2>,…,<col1>, <col2>)
  • Deskripsi

    User-defined table-valued function (UDTF) yang mengubah satu baris menjadi beberapa baris dengan memisahkan kolom menjadi baris terpisah.

  • Parameter

    • num_keys: Wajib. Konstanta bertipe BIGINT. Nilai harus lebih besar dari atau sama dengan 0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagai key saat memindahkan satu baris menjadi beberapa baris.

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

    • idx: Wajib. Menentukan nomor baris yang telah ditransformasi.

    • cols: Wajib. Kolom yang ingin Anda transposisikan menjadi baris.

  • Nilai kembali

    Mengembalikan baris yang telah ditransposisikan. Nama kolom baru ditentukan oleh as. Kolom output pertama adalah subskrip yang telah ditransposisikan, yang dimulai dari 1. Tipe data kolom yang digunakan sebagai key tetap tidak berubah, dan tipe data kolom lain juga tetap tidak berubah.

  • 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

  • Sintaks

    string unique_id()
  • Deskripsi

    Mengembalikan ID unik, seperti 29347a88-1e57-41ae-bb68-a9edbdd9****_1. Fungsi ini lebih efisien daripada fungsi UUID. ID yang dikembalikan lebih panjang dan berisi sufiks, seperti _1, yang terdiri dari garis bawah (_) dan angka.

UUID

  • Sintaks

    string uuid()
  • Deskripsi

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

    Catatan

    Nilai kembali adalah identifier unik global (GUID) acak, yang unik dalam sebagian besar kasus.