全部产品
Search
文档中心

MaxCompute:Edisi tipe data MaxCompute V2.0

更新时间:Sep 16, 2025

Topik ini menjelaskan definisi, skenario, dan tipe data yang didukung oleh Edisi tipe data MaxCompute V2.0, serta perbedaannya dengan edisi tipe data lainnya.

Definisi

Jika Edisi tipe data MaxCompute V2.0 digunakan dalam proyek Anda, tipe data didefinisikan berdasarkan kode berikut:

setproject odps.sql.type.system.odps2=true; -- Aktifkan edisi tipe data MaxCompute V2.0. 
setproject odps.sql.decimal.odps2=true; -- Aktifkan tipe data DECIMAL di MaxCompute V2.0. 
setproject odps.sql.hive.compatible=false; -- Nonaktifkan edisi tipe data yang kompatibel dengan Hive.

Skenario

Edisi tipe data MaxCompute V2.0 cocok untuk skenario di mana proyek Anda tidak berisi data yang dihasilkan sebelum April 2020 dan bergantung pada komponen yang mendukung Edisi tipe data MaxCompute V2.0.

Tipe data dasar

Tipe data

Contoh konstanta

Deskripsi

TINYINT

1Y dan -127Y

Tipe integer bertanda 8-bit.

Nilai valid: -128 hingga 127.

SMALLINT

32767S dan -100S

Tipe integer bertanda 16-bit.

Nilai valid: -32768 hingga 32767.

INT

1000 dan -15645787

Tipe integer bertanda 32-bit.

Nilai valid: -231 hingga 231 -1.

BIGINT

100000000000 L dan -1L

Tipe integer bertanda 64-bit.

Nilai valid: -263 + 1 hingga 263 -1.

BINARY

  • unhex('FA34E10293CB42848573A4E39937F479')

  • X'616263'

Sebuah angka biner. Panjang maksimum adalah 8 MB.

Catatan
  • num dalam X'num [...]' adalah nilai heksadesimal, yang bisa berupa 0 hingga 9 atau A hingga F. Sebagai contoh, X'616263' merepresentasikan abc karena a adalah 0x61, b adalah 0x62, dan c adalah 0x63 dalam ASCII. X'616263' secara semantik setara dengan unhex('616263').

  • Jika panjang string bukan bilangan genap, sistem menambahkan 0 di depan string. Sebagai contoh, X'616' setara dengan X'0616'.

  • Anda harus mengapit string dengan tanda kutip tunggal (') bukan tanda kutip ganda ("). Sebagai contoh, X"616263" tidak ditafsirkan sebagai konstanta tipe BINARY.

FLOAT

3.14F dan cast(3.14159261E+7 as float)

Tipe floating point biner 32-bit.

Catatan

Kehilangan presisi terjadi saat data tipe FLOAT dihitung karena penyimpanan komputer dan logika komputasi internal. Dalam skenario yang membutuhkan presisi tinggi, Anda dapat mengonversi data tipe FLOAT menjadi data tipe DECIMAL.

DOUBLE

3.14D dan 3.14159261E+7

Tipe floating point biner 64-bit.

Catatan

Kehilangan presisi terjadi saat data tipe DOUBLE dihitung karena penyimpanan komputer dan logika komputasi internal. Dalam skenario yang membutuhkan presisi tinggi, Anda dapat mengonversi data tipe DOUBLE menjadi data tipe DECIMAL.

DECIMAL(presisi,skala)

3.5BD dan 99999999999.9999999BD

Tipe numerik presisi berbasis sistem desimal. Ekspresi default dari tipe data ini adalah decimal(38,18). Anda dapat menentukan nilai presisi dan skala.

  • presisi: menunjukkan jumlah maksimum digit dalam sebuah nilai. Nilai valid: 1 hingga 38.

  • skala: menunjukkan jumlah digit di sebelah kanan titik desimal dalam sebuah nilai. Nilai valid: 0 hingga 18.

    Jika skala yang lebih tinggi diperlukan, Anda dapat menjalankan perintah set odps.sql.decimal2.extended.scale.enable=true; untuk memperluas rentang nilai skala. Setelah Anda mengatur parameter flag ini ke true, rentang nilai skala menjadi 0 hingga 38.

Catatan
  • DECIMAL dari edisi lama dan baru tidak dapat ada dalam tabel yang sama.

  • Edisi tipe data yang kompatibel dengan Hive diaktifkan dengan menjalankan perintah setproject odps.sql.hive.compatible=true;. Dalam hal ini, jika jumlah digit di sebelah kanan titik desimal dalam nilai tipe Decimal(presisi,skala) melebihi nilai parameter skala selama pengunggahan data berbasis Tunnel atau operasi SQL, nilai tersebut dibulatkan. Jika bagian integer melebihi batas, tidak ada kesalahan yang dilaporkan, tetapi data masukan menjadi nilai NULL.

  • Jika parameter odps.sql.decimal.tostring.trimzero diatur ke true, nol tambahan setelah titik desimal dihapus. Jika parameter ini diatur ke false, nol tambahan setelah titik desimal dipertahankan. Nilai defaultnya adalah true. Parameter ini hanya berlaku saat data dibaca dari tabel. Parameter ini tidak berlaku pada nilai statis.

VARCHAR(n)

Tidak ada nilai default

Tipe karakter panjang variabel, di mana n menentukan panjang.

Nilai valid: 1 hingga 65535.

CHAR(n)

Tidak ada nilai default

Tipe karakter panjang tetap, di mana n menentukan panjang. Nilai maksimumnya adalah 255. Jika panjang tidak mencapai nilai yang ditentukan, spasi tambahan akan otomatis diisi tetapi tidak terlibat dalam perbandingan.

STRING

"abc", 'bcd', "alibaba", dan 'inc'

Tipe string. Panjang maksimum adalah 8 MB.

DATE

DATE'2017-11-11'

Tipe tanggal dalam format yyyy-mm-dd.

Nilai valid: 0001-01-01 hingga 9999-12-31.

DATETIME

DATETIME'2017-11-11 00:00:00'

Tipe DATETIME.

Nilai valid: 0001-01-01 00:00:00.000 hingga 9999-12-31 23:59:59.999, akurat hingga milidetik.

TIMESTAMP

TIMESTAMP'2017-11-11 00:00:00.123456789'

Tipe TIMESTAMP.

Nilai valid: 0001-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999, akurat hingga nanodetik.

Catatan

Timestamp independen dari zona waktu. Di zona waktu apa pun, timestamp menyimpan nilai offset tanggal dari Epoch (UTC 1970-01-01 00:00:00). Anda dapat menggunakan fungsi bawaan untuk melakukan komputasi terkait zona waktu pada data tipe TIMESTAMP. Sebagai contoh, Anda dapat menggunakan cast(<a timestamp> as string) untuk mengonversi data tipe TIMESTAMP menjadi tipe STRING berdasarkan zona waktu saat ini.

TIMESTAMP_NTZ

TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789'

Tipe data TIMESTAMP, yang independen dari zona waktu.

Nilai valid: 0000-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999.

BOOLEAN

True dan False

Tipe BOOLEAN.

Nilai valid: True dan False.

INTERVAL

  • INTERVAL '2021' YEAR

  • INTERVAL '1' DAY

  • INTERVAL '2000-1' YEAR TO MONTH

  • INTERVAL '-1 23:59:59.999' DAY TO SECOND

Tipe INTERVAL mewakili periode waktu dan digunakan untuk mengekspresikan interval antara dua tanggal atau waktu. Ini mencakup dua jenis: INTERVAL_YEAR_MONTH dan INTERVAL_DAY_TIME.

Saat menggunakan Edisi tipe data MaxCompute V2.0, perhatikan poin-poin berikut:

  • Semua tipe data di atas mendukung nilai NULL.

  • Kata kunci INT dalam pernyataan SQL merujuk pada tipe integer 32-bit.

    -- Konversi a menjadi integer 32-bit. 
    CAST(a AS INT)
  • Secara default, konstanta integer diproses sebagai tipe INT. Sebagai contoh, konstanta integer 1 dalam SELECT 1 + a; diproses sebagai tipe INT. Jika konstanta melebihi rentang nilai tipe INT tetapi tidak melebihi rentang nilai tipe BIGINT, konstanta tersebut diproses sebagai tipe BIGINT. Jika konstanta melebihi rentang nilai tipe BIGINT, konstanta tersebut diproses sebagai tipe DOUBLE.

  • Konversi Implisit

    • Beberapa konversi implisit dinonaktifkan. Jika tipe data dikonversi dari STRING ke BIGINT, dari STRING ke DATETIME, dari DOUBLE ke BIGINT, dari DECIMAL ke DOUBLE, atau dari DECIMAL ke BIGINT, presisi mungkin berkurang, atau kesalahan mungkin terjadi. Anda dapat menggunakan fungsi CAST untuk memaksa konversi tipe data.

    • Konstanta tipe VARCHAR dapat dikonversi secara implisit menjadi tipe STRING.

  • Tabel, Fungsi Bawaan, dan Fungsi yang Ditentukan Pengguna (UDF)

    • Fungsi bawaan yang memerlukan Edisi tipe data MaxCompute V2.0 dapat dijalankan.

    • Tipe data yang didefinisikan dalam UDF diuraikan dan dimuat ulang berdasarkan Edisi tipe data MaxCompute V2.0.

    • Tipe data kolom kunci partisi dapat berupa STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT, atau BIGINT.

  • Konstanta tipe STRING mendukung penggabungan. Dua atau lebih string secara otomatis digabungkan menjadi satu string. Sebagai contoh, jika Anda mengeksekusi select 'abc' 'efg' 'ddt';, nilai yang dikembalikan adalah abcefgddt.

  • Jika konstanta dimasukkan ke dalam bidang tipe DECIMAL, ekspresi konstanta harus sesuai dengan format dalam definisi konstanta. Contoh: 3.5BD dalam kode sampel berikut:

    INSERT INTO test_tb(a) VALUES (3.5BD)
  • Nilai tipe DATETIME tidak termasuk komponen milidetik. Anda dapat menambahkan -dfp ke perintah Tunnel untuk menentukan format waktu yang akurat hingga milidetik. Contoh: tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'. Untuk informasi lebih lanjut tentang perintah Tunnel, lihat Perintah Tunnel.

Tipe data kompleks

Tipe data

Metode kustom

Metode konstruksi

ARRAY

  • array<int>

  • array<struct<a:int, b:string>>

  • array(1, 2, 3)

  • array(struct(1, 2), struct(3, 4))

MAP

  • map<string, string>

  • map<smallint, array<string>>

  • map("k1", "v1","k2","v2")

  • map(1S, array("a", "b"), 2S, array('z','y'))

STRUCT

  • struct<x:int, y:int>

  • struct<field1:bigint, field2:array<int>, field3:map<int, int>>

  • named_struct('x', 1,'y',2)

  • named_struct('field1',100L,'field2', array(1, 2),'field3',map(1,100, 2, 200))

JSON

JSON

JSON '123'

Catatan
  • Data tipe data kompleks di MaxCompute dapat bersarang, mendukung hingga 20 level sarang. Untuk informasi lebih lanjut tentang fungsi bawaan terkait, lihat ARRAY, MAP, STRUCT, atau JSON.

  • Kami merekomendasikan agar ukuran maksimum data tipe data kompleks di MaxCompute tidak melebihi 1 MB. Jika tidak, kesalahan kehabisan memori (OOM) mungkin terjadi selama proses komputasi.

Perbedaan antara edisi tisi tipe data MaxCompute V2.0 dan edisi tipe data lainnya

  • Aturan eksekusi DML berbeda.

    • Aturan eksekusi pernyataan LIMIT dalam operasi SET berbeda.

      Dalam contoh ini, pernyataan SELECT * FROM t1 UNION ALL SELECT * FROM t2 10; digunakan.

      • Jika Edisi tipe data MaxCompute V1.0 digunakan, pernyataan tersebut dinyatakan sebagai SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 10) t2;.

      • Jika Edisi tipe data MaxCompute V2.0 digunakan, pernyataan tersebut dinyatakan sebagai SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t 10;.

      Perbedaan ini juga berlaku untuk klausa ORDER BY, DISTRIBUTE BY, SORT BY, dan CLUSTER BY.

    • Penguraian tipe data dalam ekspresi IN berbeda.

      Untuk ekspresi a in (1, 2, 3):

      • Jika Edisi tipe data MaxCompute V1.0 digunakan, semua nilai yang diapit tanda kurung () harus memiliki tipe yang sama.

      • Jika Edisi tipe data MaxCompute V2.0 digunakan, semua nilai yang diapit tanda kurung () dapat dikonversi secara implisit menjadi tipe yang sama.

    • Aturan konversi untuk pernyataan INSERT berbeda.

      • Edisi tipe data yang kompatibel dengan Hive: Jika tipe data sumber dapat dikonversi secara eksplisit ke tipe data tabel, MaxCompute secara otomatis menyisipkan fungsi konversi dan menjalankannya.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Tipe data sumber harus dikonversi secara implisit ke tipe data tabel. Jika tidak, kesalahan akan dikembalikan.

        -- Operasi berikut berhasil dalam mode kompatibel dengan Hive tetapi gagal dalam mode lain: 
        create table t (a bigint); 
        insert into table select 1.5; 
  • Perilaku fungsi berbeda.

    • +, -, *, /, dan fungsi POW

      • Edisi tipe data yang kompatibel dengan Hive: Jika data melebihi rentang nilai tipe data, nilai awal dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika data melebihi rentang nilai tipe data, kesalahan dikembalikan. Dalam mode lain, nilai null dikembalikan.

    • >, >=, =, <, dan <=

      • Edisi tipe data yang kompatibel dengan Hive: Nilai tipe DOUBLE dibandingkan secara langsung.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika nilai tipe DOUBLE dibandingkan, mereka dianggap sama jika 15 digit pertama di sebelah kanan titik desimal sama. Digit lain setelah titik desimal tidak dibandingkan.

    • Operator bitwise: &, |, dan ^

      • Edisi tipe data yang kompatibel dengan Hive: Nilai dengan tipe data yang sama dengan parameter masukan dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Nilai tipe BIGINT dikembalikan.

    • Fungsi LENGTH, LENGTHB, FIND_IN_SET, INSTR, SIZE, HASH, dan SIGN

      • Edisi tipe data yang kompatibel dengan Hive: Nilai tipe INT dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Nilai tipe BIGINT dikembalikan.

    • FLOOR dan CEIL

      • Edisi tipe data yang kompatibel dengan Hive: Jika parameter masukan adalah tipe DECIMAL, nilai tipe DECIMAL dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika parameter masukan adalah tipe DECIMAL, nilai tipe BIGINT dikembalikan.

    • FROM_UNIXTIME

      • Edisi tipe data yang kompatibel dengan Hive: Nilai tipe STRING dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Nilai tipe DATETIME dikembalikan.

    • CONCAT_WS

      • Edisi tipe data yang kompatibel dengan Hive: Jika string masukan yang terhubung adalah NULL, string tersebut diabaikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika string masukan yang terhubung adalah NULL, NULL dikembalikan.

    • FIND_IN_SET

      • Edisi tipe data yang kompatibel dengan Hive: String kosong dianggap cocok dengan ekor string.

        -- Mode kompatibel dengan Hive 
        find_in_set("","")  1 dikembalikan. 
        find_in_set("", "a,") 2 dikembalikan. 
      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: String kosong dianggap tidak cocok, dan 0 dikembalikan.

    • REGEXP_(EXTRACT/REPLACE)

      • Edisi tipe data yang kompatibel dengan Hive: Skema REGEXP sesuai dengan spesifikasi ekspresi reguler Java.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Skema REGEXP sesuai dengan spesifikasi MaxCompute.

    • SUBSTR

      string substr(string <str>, bigint <start_position>[, bigint <length>])

      start_position: wajib. Nilai tipe BIGINT. Nilai defaultnya adalah 1.

      • Edisi tipe data yang kompatibel dengan Hive: Jika start_position diatur ke 0, nilai yang dikembalikan sama dengan ketika parameter ini diatur ke 1.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika start_position diatur ke 0, null dikembalikan.