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 |
|
|
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) |
N/A |
|
|
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' |
|
|
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 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.5BDdalam 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';menghasilkanabcefgddt.
-
-
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 |
|
|
|
MAP |
|
|
|
STRUCT |
|
|
|
JSON |
|
|
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
+,-,*,/, danPOW: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 2V1.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.