All Products
Search
Document Center

MaxCompute:Edisi tipe data MaxCompute V2.0

Last Updated:Jun 02, 2026

Topik ini menjelaskan definisi, kasus penggunaan, tipe data yang didukung, serta perbedaan edisi tipe data MaxCompute V2.0 dibandingkan dengan edisi lainnya.

Latar Belakang

Edisi tipe data MaxCompute V2.0 merupakan salah satu dari tiga edisi tipe data di MaxCompute.

Edisi ini cocok untuk proyek MaxCompute yang tidak berisi data yang dihasilkan sebelum April 2020 dan komponen produk dependennya mendukung edisi tipe data V2.0.

Aktifkan edisi tipe data V2.0

Untuk menggunakan edisi tipe data V2.0 pada suatu proyek, konfigurasikan properti tipe data 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 V2.0.
setproject odps.sql.hive.compatible=false; -- Nonaktifkan mode Hive-compatible.

Tipe data dasar

Type

Contoh konstanta

Deskripsi

TINYINT

1Y, -127Y

  • Integer bertanda 8-bit.

  • Nilai valid: -128 hingga 127.

SMALLINT

32767S, -100S

  • Integer bertanda 16-bit.

  • Nilai valid: -32768 hingga 32767.

INT

1000, -15645787

  • Integer bertanda 32-bit.

  • Nilai valid: -231 hingga 231-1.

BIGINT

100000000000L, -1L

  • Integer bertanda 64-bit.

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

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

  • Tipe data biner. Panjang maksimum: 8 MB.

  • Dalam format X'num [...]', num adalah digit heksadesimal yang dapat berupa 0-9 atau A-F. Sebagai contoh, X'616263' merepresentasikan abc karena kode ASCII a adalah 0x61, kode ASCII b adalah 0x62, dan kode ASCII c adalah 0x63. X'616263' secara semantik setara dengan unhex('616263').

  • Jika string heksadesimal memiliki jumlah digit ganjil, 0 ditambahkan di awal. Sebagai contoh, X'616' setara dengan X'0616'.

  • Tanda kutip tunggal harus digunakan. Tanda kutip ganda tidak didukung. Sebagai contoh, X"616263" tidak diinterpretasikan sebagai konstanta BINARY.

FLOAT

3.14F, CAST(3.14159261E+7 AS FLOAT)

  • Floating point biner 32-bit.

  • Nilai FLOAT mengalami kehilangan presisi akibat cara penyimpanan dan perhitungan nilai floating-point. Jika diperlukan presisi tinggi, ubah tipe data FLOAT ke tipe DECIMAL.

DOUBLE

3.14D, 3.14159261E+7

  • Floating point biner 64-bit.

  • Nilai DOUBLE mengalami kehilangan presisi akibat cara penyimpanan dan perhitungan nilai floating-point. Jika diperlukan presisi tinggi, ubah tipe data DOUBLE ke tipe DECIMAL.

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

  • Tipe numerik eksak berbasis sistem desimal. Mendukung pengaturan precision (jumlah maksimum digit) dan scale (jumlah digit di sebelah kanan titik desimal).

    • DECIMAL biasa: rentang precision [1,38], dan rentang scale [0, precision].

    • DECIMAL256: rentang precision [39,76], dan rentang scale [0, precision].

    Untuk informasi lebih lanjut, lihat Tipe data DECIMAL.

VARCHAR(n)

N/A

  • Tipe karakter panjang variabel. n menentukan panjangnya.

  • Nilai valid n: 1 hingga 65535.

CHAR(n)

N/A

Tipe karakter panjang tetap. n menentukan panjangnya. Nilai maksimum n: 255. String yang lebih pendek dari n diisi spasi, tetapi spasi di akhir tidak termasuk dalam perbandingan.

STRING

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

  • Tipe string.

  • Panjang maksimum: 8 MB.

DATE

DATE'2017-11-11'

  • Tipe tanggal. Format: yyyy-mm-dd.

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

DATETIME

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

  • Tipe tanggal dan waktu.

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

  • Nilai DATETIME tidak menyertakan komponen milidetik dalam hasil kueri. Gunakan parameter -dfp dalam perintah Tunnel untuk menampilkan tingkat milidetik. Contohnya, tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'. Untuk informasi lebih lanjut tentang perintah Tunnel, lihat Perintah Tunnel.

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. Presisi: nanodetik.

  • Tipe TIMESTAMP bersifat independen terhadap zona waktu. Di zona waktu apa pun, tipe TIMESTAMP menyimpan offset dari Epoch (UTC 1970-01-01 00:00:00). Fungsi bawaan dapat digunakan untuk melakukan perhitungan terkait zona waktu pada data TIMESTAMP. Contohnya, CAST(<a TIMESTAMP> AS STRING) mengonversi data TIMESTAMP ke tipe STRING berdasarkan zona waktu saat ini.

  • Konstanta TIMESTAMP dengan format spesifik zona waktu didukung, seperti: TIMESTAMP '2025-02-25T12:09:35' , TIMESTAMP '2025-02-25 12:09:35+07:00', dan TIMESTAMP '2025-02-25 12:09:35Z'.

TIMESTAMP_NTZ

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

  • Tipe timestamp yang independen dari zona waktu.

  • Nilai valid: 0000-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999. Untuk informasi lebih lanjut tentang tipe data TIMESTAMP_NTZ, lihat Tipe data TIMESTAMP_NTZ.

BOOLEAN

True, False

  • Tipe BOOLEAN.

  • Nilai valid: True, False.

INTERVAL

  • INTERVAL '2021' YEAR

  • INTERVAL '1' DAY

  • INTERVAL '2000-1' YEAR TO MONTH

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

Tipe data yang merepresentasikan periode waktu dan digunakan untuk menyatakan interval waktu antara dua tanggal atau waktu. Terdiri dari dua subtipe: INTERVAL_YEAR_MONTH dan INTERVAL_DAY_TIME. Untuk informasi lebih lanjut, lihat Tipe data INTERVAL.

Blob

N/A

Untuk informasi lebih lanjut, lihat Tipe data Blob dan penyimpanan multimodal.

Catatan penggunaan tipe data:

  • Semua tipe data yang tercantum di atas mendukung nilai NULL.

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

    -- Konversi a ke integer 32-bit.
    CAST(a AS INT)
  • Konstanta

    • Konstanta integer secara default bertipe INT. Misalnya, konstanta integer 1 dalam SELECT 1 + a; dianggap sebagai INT. Jika suatu konstanta melebihi rentang INT tetapi masih dalam rentang BIGINT, maka dianggap sebagai BIGINT. Jika melebihi rentang BIGINT, maka dianggap sebagai DOUBLE.

    • Saat memasukkan konstanta ke bidang DECIMAL, format konstanta harus sesuai dengan definisi konstanta. Misalnya, 3.5BD dalam contoh kode berikut.

      INSERT INTO test_tb(a) VALUES (3.5BD)
    • Konstanta STRING mendukung penggabungan. Dua atau lebih literal string yang berdekatan secara otomatis digabungkan. Misalnya, SELECT 'abc' 'efg' 'ddt'; menghasilkan abcefgddt.

  • Konversi implisit

    • Beberapa konversi tipe implisit dinonaktifkan. Misalnya, STRING->BIGINT, STRING->DATETIME, DOUBLE->BIGINT, DECIMAL->DOUBLE, dan DECIMAL->BIGINT dapat menyebabkan kehilangan presisi atau error. Gunakan fungsi CAST untuk secara eksplisit mengonversi tipe data yang dinonaktifkan untuk konversi implisit.

    • Konstanta VARCHAR dapat dikonversi secara implisit ke konstanta STRING.

  • Tabel, fungsi, dan UDF

    • Fungsi bawaan yang menggunakan tipe data V2.0 dapat digunakan dalam edisi tipe data V2.0.

    • Tipe data dalam UDF diurai dan di-overload berdasarkan tipe data V2.0.

    • Kolom kunci partisi mendukung tipe data STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT, dan BIGINT.

Tipe data kompleks

  • Tipe data kompleks di MaxCompute dapat disarangkan hingga 20 level. Untuk informasi tentang fungsi bawaan terkait, lihat ARRAY, MAP, STRUCT, atau JSON.

  • Ukuran maksimum nilai tipe data kompleks disarankan tidak lebih dari 1 MB. Nilai yang melebihi batas ini dapat menyebabkan error kehabisan memori (OOM) selama komputasi.

Type

Definisi

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'

Perbedaan dari edisi tipe data lainnya

  • Perbedaan perilaku sintaks DML

    • Klausa LIMIT berperilaku berbeda dalam operasi himpunan.

      Misalnya, untuk SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10;:

      • Edisi tipe data V1.0: SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;.

      • Edisi tipe data V2.0: SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;.

      Klausa ORDER BY, DISTRIBUTE BY, SORT BY, dan CLUSTER BY juga menunjukkan perilaku yang sama.

    • Resolusi tipe dalam ekspresi IN berbeda.

      Misalnya, untuk a in (1, 2, 3):

      • Edisi tipe data V1.0: semua nilai dalam tanda kurung setelah IN harus bertipe sama.

      • Edisi tipe data V2.0: nilai dalam tanda kurung setelah IN dapat bertipe berbeda selama mendukung konversi tipe implisit ke tipe umum.

    • Aturan konversi tipe INSERT

      • Dalam mode Hive-compatible, jika tipe data sumber dapat dikonversi secara eksplisit ke tipe kolom target, MaxCompute secara otomatis menyisipkan fungsi konversi dan menjalankannya.

      • Dalam mode V1.0 dan V2.0, tipe sumber harus dapat dikonversi secara implisit; jika tidak, error akan dikembalikan.

        Contoh berikut berhasil dalam mode Hive-compatible tetapi gagal dalam mode V1.0 dan V2.0:

        create table t (a bigint);
        insert into table select 1.5;
  • Perbedaan perilaku operator dan fungsi di berbagai edisi tipe data

    • Untuk operator +, -, *, /, dan POW:

      • Hive-compatible:Mengembalikan nilai awal

      • V1.0 dan V2.0:Mengembalikan error; dalam mode lain, NULL dikembalikan

    • Untuk operator >, >=, =, <, dan <= yang diterapkan pada nilai DOUBLE:

      • Hive-compatible:Membandingkan semua digit secara langsung

      • V1.0 dan V2.0:Hanya membandingkan 15 digit pertama di sebelah kanan titik desimal; digit sisanya diabaikan

    • Untuk operator &, |, dan ^:

      • Hive-compatible: Tipe sama dengan input

      • V1.0 dan V2.0: Selalu BIGINT

    • Untuk fungsi seperti: LENGTH、LENGTHB、FIND_IN_SET、INSTR、SIZE、HASH、SIGN

      • Hive-compatible:

        • LENGTH, LENGTHB, FIND_IN_SET, INSTR, SIZE, HASH, SIGN:INT

        • FLOOR, CEIL (ketika input adalah DECIMAL):DECIMAL

        • FROM_UNIXTIME:STRING

      • V1.0 dan V2.0:

        • LENGTH, LENGTHB, FIND_IN_SET, INSTR, SIZE, HASH, SIGN:BIGINT

        • FLOOR, CEIL (ketika input adalah DECIMAL):BIGINT

        • FROM_UNIXTIME:DATETIME

    • CONCAT_WS

      • Hive-compatible: String input NULL diabaikan; string yang tersisa digabungkan

      • V1.0 dan V2.0: Jika ada string input bernilai NULL, maka NULL dikembalikan

    • FIND_IN_SET

      • Hive-compatible: String kosong cocok dengan akhir string pencarian:

        find_in_set("","")    -- Mengembalikan 1
        find_in_set("", "a,") -- Mengembalikan 2
      • V1.0 dan V2.0: String kosong dianggap tidak cocok dan mengembalikan 0.

    • REGEXP

      • Hive-compatible: Spesifikasi ekspresi reguler Java

      • V1.0 dan V2.0: Spesifikasi MaxCompute

    • SUBSTR

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

      start_position: Wajib diisi. Tipe BIGINT. Posisi awal default adalah 1.

      • Edisi tipe data Hive-compatible: Ketika start_position adalah 0, perilakunya sama seperti posisi awal 1.

      • Edisi tipe data V1.0 dan V2.0: Ketika start_position adalah 0, string kosong dikembalikan.

      • Edisi tipe data BigQuery-compatible: Ketika start_position adalah 0, perilakunya sama seperti posisi awal 1.

      • Edisi tipe data BigQuery-compatible: Ketika start_position kurang dari panjang negatif string, perilakunya sama seperti posisi awal 1.