全部产品
Search
文档中心

MaxCompute:Edisi tipe data yang kompatibel dengan Hive

更新时间:Sep 16, 2025

Topik ini menjelaskan edisi tipe data yang kompatibel dengan Hive, termasuk definisi, tipe data yang didukung, serta perbedaannya dengan edisi tipe data lainnya. Edisi ini merupakan salah satu dari tiga edisi tipe data MaxCompute.

Deskripsi

Untuk menggunakan edisi tipe data yang kompatibel dengan Hive di proyek Anda, jalankan kode berikut untuk mengaktifkan tipe data yang diperlukan:

setproject odps.sql.type.system.odps2=true; -- Aktifkan tipe data MaxCompute V2.0.
setproject odps.sql.decimal.odps2=true; -- Aktifkan tipe data DECIMAL di MaxCompute V2.0.
setproject odps.sql.hive.compatible=true; -- Aktifkan tipe data yang kompatibel dengan Hive.

Skenario

Edisi tipe data yang kompatibel dengan Hive cocok untuk proyek MaxCompute yang bermigrasi dari Hadoop, dengan komponen dependen yang mendukung edisi tipe data MaxCompute V2.0.

Tipe data dasar

Tipe data dasar dalam edisi ini serupa dengan yang didefinisikan dalam edisi tipe data MaxCompute V2.0, kecuali pada tipe DECIMAL.

Tipe Data

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

100000000000L dan -1L

Tipe integer bertanda 64-bit.

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

BINARY

unhex('FA34E10293CB42848573A4E39937F479')

Angka biner. Panjang maksimum adalah 8 MB.

FLOAT

cast(3.14159261E+7 as float)

Tipe titik floating biner 32-bit.

DOUBLE

3.14159261E+7

Tipe titik floating biner 64-bit.

DECIMAL(presisi,skala)

3.5BD dan 99999999999.9999999BD

Tipe numerik eksak berdasarkan sistem desimal. Ekspresi default dari tipe data ini adalah decimal(10,0). Anda dapat menentukan nilai presisi dan skala.

  • presisi: menunjukkan jumlah digit maksimum dalam suatu nilai. Nilai valid: 1 hingga 38.

  • skala: menunjukkan jumlah digit di sebelah kanan titik desimal dalam suatu nilai. Nilai valid: 0 hingga 18.

    Jika skala yang lebih tinggi diperlukan, Anda dapat menjalankan perintah set odps.sql.decimal2.extended.scale.enable=true; untuk memperluas rentang nilai skala. Setelah Anda mengatur parameter flag ini ke true, rentang nilai skala menjadi 0 hingga 38.

VARCHAR(n)

Tidak ada

Tipe karakter panjang variabel, di mana n menentukan panjang.

Nilai valid: 1 hingga 65535.

CHAR(n)

Tidak ada

Tipe karakter panjang tetap, di mana n menentukan panjang. Nilai maksimum 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 DATE. Nilainya dalam format yyyy-mm-dd.

Nilai valid: 0000-01-01 hingga 9999-12-31.

DATETIME

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

Tipe DATETIME.

Nilai valid: 0000-01-01 00:00:00.000 hingga 9999-12-31 23:59:59.999. Nilainya akurat hingga milidetik.

TIMESTAMP

TIMESTAMP'2017-11-11 00:00:00.123456789'

Tipe TIMESTAMP. Timestamp independen dari zona waktu.

Nilai valid: 0000-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999. Nilainya akurat hingga nanodetik.

Catatan

Untuk beberapa fungsi terkait zona waktu, seperti cast(<a timestamp> as string), data dari tipe TIMESTAMP yang independen dari zona waktu harus ditampilkan berdasarkan zona waktu saat ini.

BOOLEAN

True dan False

Tipe BOOLEAN.

Nilai valid: True dan False.

Berikut adalah penjelasan tentang tipe data:

  • Semua tipe data dapat berisi nilai NULL.

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

    -- Konversikan nilai a menjadi integer 32-bit.
    cast(a as INT)
  • Secara default, konstanta integer diproses sebagai tipe INT. Misalnya, 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 tertentu dinonaktifkan. Misalnya, 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. Gunakan fungsi CAST untuk memaksa konversi tipe data.

    • Konstanta VARCHAR dapat secara implisit dikonversi menjadi konstanta STRING.

  • Tabel, Fungsi Bawaan, dan Fungsi yang Ditentukan Pengguna (UDF)

    • Fungsi bawaan yang memerlukan edisi tipe data MaxCompute V2.0 dapat digunakan.

    • Tipe data yang didefinisikan dalam UDF diurai dan dimuat ulang berdasarkan tipe data yang kompatibel dengan Hive.

    • Tipe data kolom kunci partisi dapat berupa STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT, atau BIGINT.

    • Fungsi tertentu tidak mendukung pemangkasan partisi dalam mode yang kompatibel dengan Hive. Untuk informasi lebih lanjut, lihat Pemetaan antara fungsi bawaan MaxCompute dan fungsi bawaan Hive, MySQL, dan Oracle.

  • Konstanta STRING dapat digabungkan. Misalnya, abc dan xyz dapat digabungkan menjadi abcxyz.

  • Jika konstanta disisipkan ke dalam bidang tipe DECIMAL, ekspresi konstanta harus sesuai dengan format dalam definisi konstanta. Misalnya, 3.5BD digunakan dalam kode sampel berikut.

    insert into test_tb(a) values (3.5BD)
  • Nilai waktu dari tipe DATETIME tidak termasuk komponen milidetik. Anda dapat menambahkan -dfp ke perintah Tunnel untuk menampilkan milidetik dalam nilai waktu, seperti 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

Definisi

Konstruktor

ARRAY

  • array<int>

  • array<struct<a:int, b:string>>

  • array(1, 2, 3)

  • array(array(1, 2), array(3, 4))

MAP

  • map<string, string>

  • map<smallint, array<string>>

  • map("k1", "v1", "k2", "v2")

  • map(1S, array('a', 'b'), 2S, array('x', '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))

Catatan

Tipe data kompleks MaxCompute dapat bersarang. Untuk informasi lebih lanjut tentang fungsi bawaan terkait, lihat ARRAY, MAP, atau STRUCT.

Perbedaan antara edisi tipe data yang kompatibel dengan Hive dan edisi tipe data lainnya

  • 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 yang kompatibel dengan Hive tetapi gagal dalam mode lain:
      create table t (a bigint);
      insert into table select 1.5;
  • Perilaku fungsi berbeda.

    • +, -, *, /, dan fungsi POW

      • Edisi 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 input 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 input adalah tipe DECIMAL, nilai tipe DECIMAL dikembalikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika parameter input 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 input yang terhubung adalah NULL, string tersebut diabaikan.

      • Edisi tipe data MaxCompute V1.0 dan MaxCompute V2.0: Jika string input yang terhubung adalah NULL, NULL dikembalikan.

    • FIND_IN_SET

      • Edisi tipe data yang kompatibel dengan Hive: String kosong dianggap cocok dengan ekor string.

        -- Mode yang 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 default 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.