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 |
| Sebuah angka biner. Panjang maksimum adalah 8 MB. Catatan
|
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
Catatan
|
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 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 |
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 |
| 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 adalahabcefgddt.Jika konstanta dimasukkan ke dalam bidang tipe DECIMAL, ekspresi konstanta harus sesuai dengan format dalam definisi konstanta. Contoh:
3.5BDdalam kode sampel berikut:INSERT INTO test_tb(a) VALUES (3.5BD)Nilai tipe DATETIME tidak termasuk komponen milidetik. Anda dapat menambahkan
-dfpke 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 |
|
|
MAP |
|
|
STRUCT |
|
|
JSON |
|
|
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 POWEdisi 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.