All Products
Search
Document Center

MaxCompute:Tipe data versi 2.0

Last Updated:Aug 27, 2026

Topik ini menjelaskan tipe data MaxCompute versi 2.0, mencakup definisi, kasus penggunaan, tipe data yang didukung, serta perbedaannya dengan versi tipe data lainnya.

Latar Belakang

Tipe data versi 2.0 merupakan salah satu dari tiga versi tipe data yang tersedia di MaxCompute.

Versi ini cocok untuk proyek MaxCompute yang tidak memiliki data sebelum April 2020, asalkan semua komponen produk dependen mendukung tipe data versi 2.0.

Mengaktifkan tipe data versi 2.0

Untuk menggunakan tipe data versi 2.0 dalam suatu proyek, atur properti berikut.

setproject odps.sql.type.system.odps2=true; -- Aktifkan tipe data MaxCompute versi 2.0.
setproject odps.sql.decimal.odps2=true; -- Aktifkan tipe data DECIMAL 2.0.
setproject odps.sql.hive.compatible=false; -- Nonaktifkan mode Hive-compatible.

Tipe data dasar

Type

Literal

Description

TINYINT

1Y, -127Y

  • Bilangan bulat bertanda 8-bit.

  • Rentang nilai: -128 hingga 127.

SMALLINT

32767S, -100S

  • Bilangan bulat bertanda 16-bit.

  • Rentang nilai: -32768 hingga 32767.

INT

1000, -15645787

  • Bilangan bulat bertanda 32-bit.

  • Rentang nilai: -231 hingga 231-1.

BIGINT

100000000000L, -1L

  • Bilangan bulat bertanda 64-bit.

  • Rentang nilai: -263 hingga 263-1.

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

  • Tipe data biner. Panjang maksimum: 8 MB.

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

  • Jika string memiliki jumlah digit ganjil, sistem menambahkan digit 0 di awal. Misalnya, X'616' setara dengan X'0616'.

  • Anda harus menggunakan tanda kutip tunggal ('). Tanda kutip ganda (") tidak didukung. Misalnya, X"616263" tidak diinterpretasikan sebagai literal BINARY.

FLOAT

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

  • Tipe floating-point biner 32-bit.

  • Tipe FLOAT dapat kehilangan presisi akibat cara komputer menyimpan dan melakukan perhitungan internal. Jika diperlukan presisi tinggi, konversikan nilai FLOAT ke tipe data DECIMAL.

DOUBLE

3.14D, 3.14159261E+7

  • Tipe floating-point biner 64-bit.

  • Tipe DOUBLE dapat kehilangan presisi akibat cara komputer menyimpan dan melakukan perhitungan internal. Jika diperlukan presisi tinggi, konversikan nilai DOUBLE ke tipe data DECIMAL.

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

  • Tipe numerik eksak. Anda dapat menentukan precision (jumlah total digit) dan scale (jumlah digit di sebelah kanan titik desimal).

    • Normal DECIMAL: Presisi berada dalam rentang [1, 38], dan skala berada dalam rentang [0, presisi].

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

    Untuk informasi lebih lanjut, lihat tipe data DECIMAL.

VARCHAR(n)

None

  • Tipe karakter panjang variabel, dengan n sebagai panjangnya.

  • Rentang nilai untuk n: 1 hingga 65535.

CHAR(n)

None

Tipe karakter panjang tetap dengan panjang n, dengan nilai maksimum 255. String yang lebih pendek diisi spasi hingga mencapai panjang yang ditentukan. Spasi tambahan ini diabaikan saat perbandingan.

STRING

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

  • Tipe string.

  • Panjang maksimum: 8 MB.

DATE

DATE'2017-11-11'

  • Tipe tanggal. Formatnya adalah yyyy-mm-dd.

  • Rentang nilai: 0001-01-01 hingga 9999-12-31.

DATETIME

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

  • Tipe datetime.

  • Rentang nilai: 0001-01-01 00:00:00.000 hingga 9999-12-31 23:59:59.999, dengan presisi milidetik.

  • Hasil kueri DATETIME tidak menampilkan milidetik. Anda dapat menggunakan opsi -dfp dalam perintah Tunnel untuk menentukan format yang mencakup milidetik, misalnya, 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.

  • Rentang nilai: 0001-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999, dengan presisi nanodetik.

  • Tipe TIMESTAMP tidak mempertimbangkan zona waktu. Tipe ini menyimpan titik waktu tertentu sebagai offset dari Unix epoch (1970-01-01 00:00:00 UTC). Gunakan fungsi bawaan untuk melakukan perhitungan yang mempertimbangkan zona waktu pada data TIMESTAMP. Misalnya, CAST(<a TIMESTAMP> AS STRING) mengonversi nilai TIMESTAMP ke STRING berdasarkan zona waktu sesi saat ini.

  • Literal TIMESTAMP juga mendukung format khusus yang mencakup informasi zona waktu, 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 tanpa zona waktu.

  • Rentang nilai: 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.

  • Rentang nilai: True atau 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 interval waktu antara dua tanggal atau waktu. Terdiri dari dua jenis: INTERVAL_YEAR_MONTH dan INTERVAL_DAY_TIME. Untuk informasi lebih lanjut, lihat tipe data INTERVAL.

Blob

None

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

VECTOR

[1.1, 2.2, 3.3]

Tipe vektor yang terdiri dari sejumlah elemen FLOAT tetap. Vektor ini merepresentasikan vektor embedding berdimensi tinggi, seperti fitur semantik teks atau gambar.

Jumlah dimensi dapat berkisar antara 1 hingga 4.096. Untuk informasi lebih lanjut, lihat tipe data VECTOR.

GEOGRAPHY

ST_GEOGPOINT(116.4, 39.9) ST_GEOGFROMTEXT('POINT (10 20)')

Tipe data geospasial. Digunakan untuk merepresentasikan objek geometris pada permukaan Bumi, seperti titik (Point), garis (LineString), dan poligon (Polygon).

  • Mendukung tipe komposit termasuk MultiPoint, MultiLineString, MultiPolygon, dan GeometryCollection.

  • Koordinat ditentukan dalam format (longitude, latitude) dalam satuan derajat, mengikuti sistem koordinat geografis WGS84, dan diimplementasikan berdasarkan pustaka S2 Geometry. Longitude harus berada dalam rentang [-180, 180], dan latitude harus berada dalam rentang [-90, 90].

  • Harus dikonstruksi melalui fungsi Geography. Input literal tidak didukung. Untuk informasi lebih lanjut, lihat tipe data GEOGRAPHY.

Catatan mengenai tipe data:

  • Semua tipe data yang tercantum di atas dapat bernilai NULL.

  • Kata kunci INT dalam SQL merepresentasikan bilangan bulat 32-bit.

    -- Konversi a menjadi bilangan bulat 32-bit.
    CAST(a AS INT)
  • Literal

    • Literal bilangan bulat secara default dianggap sebagai tipe INT. Misalnya, dalam SELECT 1 + a;, literal bilangan bulat 1 diproses sebagai INT. Jika literal melebihi rentang nilai INT tetapi masih dalam rentang BIGINT, maka dianggap sebagai BIGINT. Jika melebihi rentang BIGINT, maka dianggap sebagai DOUBLE.

    • Saat memasukkan literal ke kolom DECIMAL, literal tersebut harus sesuai dengan format yang ditentukan dalam definisinya. Misalnya, lihat literal 3.5BD dalam kode berikut.

      INSERT INTO test_tb(a) VALUES (3.5BD)
    • Literal STRING mendukung penggabungan. Saat dua atau lebih literal string ditempatkan bersebelahan, mereka secara otomatis digabung menjadi satu string. Misalnya, SELECT 'abc' 'efg' 'ddt'; menghasilkan abcefgddt.

  • Konversi implisit

    • Beberapa konversi implisit dinonaktifkan. Misalnya, konversi dari STRING ke BIGINT, STRING ke DATETIME, DOUBLE ke BIGINT, DECIMAL ke DOUBLE, dan DECIMAL ke BIGINT dinonaktifkan karena dapat menyebabkan kehilangan presisi atau error. Gunakan fungsi CAST untuk melakukan konversi tersebut secara eksplisit.

    • Literal VARCHAR dapat dikonversi secara implisit ke literal STRING.

  • Tabel, fungsi, dan UDF

    • Fungsi bawaan yang menerima parameter tipe data versi 2.0 berfungsi sebagaimana mestinya.

    • Tipe data dalam User-Defined Function (UDF) diselesaikan dan di-overload berdasarkan tipe data versi 2.0.

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

Tipe data kompleks

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

  • Ukuran tipe data kompleks tidak boleh melebihi 1 MB. Tipe data kompleks yang lebih besar dari 1 MB dapat menyebabkan error kehabisan memori (OOM) selama komputasi.

Type

Definition

Constructor

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)

  • <code code-type="xCode" data-tag="code" id="eee8ab88bdme3">NAMED_STRUCT('field1',100L,'field2', ARRAY(1, 2),'field3',MAP(1,100, 2, 200))

JSON

JSON

JSON '123'

Perbedaan dengan versi tipe data lainnya

  • Perbedaan perilaku sintaks DML

    • Perilaku klausa LIMIT dalam operasi set

      Sebagai contoh, pertimbangkan kueri SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10;:

      • Pada tipe data versi 1.0, ini setara dengan SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;.

      • Pada tipe data versi 2.0, ini setara dengan SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;.

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

    • Resolusi tipe untuk ekspresi IN

      Sebagai contoh, dalam ekspresi a in (1, 2, 3):

      • Pada tipe data versi 1.0, semua nilai dalam daftar setelah IN harus memiliki tipe data yang sama.

      • Pada tipe data versi 2.0, nilai-nilai tersebut hanya perlu dapat dikonversi secara implisit ke tipe data umum.

    • Aturan konversi tipe INSERT

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

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

        Kode berikut berhasil pada mode Hive-compatible tetapi gagal pada mode V1.0 dan V2.0:

        CREATE TABLE t (a BIGINT);
        INSERT INTO TABLE SELECT 1.5;
  • Perbedaan perilaku operator dan fungsi antar edisi tipe data

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

      • Hive-compatible: Mengembalikan nilai awal

      • V1.0 dan V2.0: Mengembalikan error; pada 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: Mengembalikan nilai INT.

      • V1.0 dan V2.0: Mengembalikan nilai BIGINT.

    • FLOOR, CEIL

      • Hive-compatible: Jika parameter input bertipe DECIMAL, nilai DECIMAL dikembalikan.

      • V1.0 dan V2.0: Jika parameter input bertipe DECIMAL, nilai BIGINT dikembalikan.

    • FROM_UNIXTIME

      • Hive-compatible: Mengembalikan nilai STRING.

      • V1.0 dan V2.0: Mengembalikan nilai 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_(EXTRACT/REPLACE)

      • Hive-compatible: Spesifikasi ekspresi reguler Java

      • V1.0 dan V2.0: Spesifikasi MaxCompute

    • SUBSTR

      STRING SUBSTR(STRING <string>, BIGINT <start_position>[, BIGINT <length>])

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

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

      • Edisi tipe data 1.0 dan 2.0: Saat start_position bernilai 0, string kosong dikembalikan.

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

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