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 |
|
SMALLINT | 32767S, -100S |
|
INT | 1000, -15645787 |
|
BIGINT | 100000000000L, -1L |
|
BINARY |
|
|
FLOAT | 3.14F, CAST(3.14159261E+7 AS FLOAT) |
|
DOUBLE | 3.14D, 3.14159261E+7 |
|
DECIMAL(precision,scale) | 3.5BD, 99999999999.9999999BD |
|
VARCHAR(n) | None |
|
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' |
|
DATE | DATE'2017-11-11' |
|
DATETIME | DATETIME'2017-11-11 00:00:00' |
|
TIMESTAMP | TIMESTAMP'2017-11-11 00:00:00.123456789' |
|
TIMESTAMP_NTZ | TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789' |
|
BOOLEAN | True, False |
|
INTERVAL |
| 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 |
| Tipe data geospasial. Digunakan untuk merepresentasikan objek geometris pada permukaan Bumi, seperti titik (Point), garis (LineString), dan poligon (Polygon).
|
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.5BDdalam 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';menghasilkanabcefgddt.
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 |
|
|
MAP |
|
|
STRUCT |
|
|
JSON |
|
|
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
+,-,*,/, danPOW: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 2V1.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.