全部产品
Search
文档中心

MaxCompute:Tabel Eksternal ORC

更新时间:Feb 07, 2026

Topik ini menjelaskan cara membuat, membaca, dan menulis tabel eksternal OSS berformat ORC.

Cakupan

Buat Tabel Eksternal

Sintaksis

Jika skema file ORC tidak konsisten dengan skema tabel eksternal:

  • Jumlah kolom tidak sesuai: Jika file ORC memiliki jumlah kolom lebih sedikit daripada tabel eksternal, sistem akan mengisi kolom yang hilang dengan nilai NULL saat membaca data. Jika file memiliki lebih banyak kolom, kolom tambahan tersebut akan diabaikan.

  • Tipe kolom tidak sesuai: MaxCompute mendukung penggunaan tipe STRING untuk membaca data INT dari file ORC, tetapi hal ini tidak disarankan. Saat menggunakan tipe INT untuk membaca data STRING, sistem akan mengonversi nilai string menjadi NULL dan hanya menerima nilai numerik.

Sintaksis Sederhana

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED AS orc
LOCATION '<oss_location>';

Sintaksis Lengkap

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
WITH serdeproperties(
    'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
STORED AS orc 
LOCATION '<oss_location>' 
tblproperties (
    '<xxx>'='<yyy>'
);

Parameter Umum

Untuk informasi selengkapnya tentang parameter umum, lihat Parameter sintaksis dasar.

Parameter Unik

Dengan properti serdeproperties

Nama Properti

Skenario

Deskripsi

Nilai Properti

Nilai Default

mcfed.orc.schema.resolution

Tambahkan properti ini jika skema data dalam tabel eksternal OSS yang sama tidak konsisten.

Menetapkan metode penguraian file ORC. name menunjukkan penguraian berdasarkan nama kolom.

name

Mengurai berdasarkan nomor kolom secara default.

Setara dengan: 'mcfed.orc.schema.resolution'='position'.

Properti tblproperties

Nama Properti

Skenario

Deskripsi

Nilai Properti

Nilai Default

mcfed.orc.compress

Tambahkan properti ini untuk menulis data ORC ke OSS dalam format terkompresi.

Properti kompresi ORC. Tentukan metode kompresi untuk data ORC.

  • SNAPPY

  • ZLIB

None

io.compression.codecs

Tambahkan properti ini jika file data OSS berada dalam format Raw-Snappy.

Jika Anda menyetel parameter ini ke True, MaxCompute dapat membaca data terkompresi secara normal. Jika tidak, MaxCompute tidak dapat membaca data tersebut.

com.aliyun.odps.io.compress.SnappyRawCodec

None

odps.external.data.output.prefix

(Kompatibel dengan odps.external.data.prefix)

Tambahkan properti ini untuk menambahkan awalan kustom pada file output.

  • Hanya berisi angka, huruf, dan garis bawah (a-z, A-Z, 0-9, _).

  • Panjang antara 1 hingga 10 karakter.

Kombinasi karakter yang valid, seperti 'mc_'.

None

odps.external.data.enable.extension

Tambahkan properti ini untuk menampilkan ekstensi file output.

True menampilkan ekstensi file output. False menyembunyikannya.

  • True

  • False

False

odps.external.data.output.suffix

Tambahkan properti ini untuk menambahkan akhiran kustom pada file output.

Hanya berisi angka, huruf, dan garis bawah (a-z, A-Z, 0-9, _).

Kombinasi karakter yang valid, seperti '_hangzhou'.

None

odps.external.data.output.explicit.extension

Tambahkan properti ini untuk menambahkan ekstensi kustom pada file output.

  • Hanya berisi angka, huruf, dan garis bawah (a-z, A-Z, 0-9, _).

  • Panjang antara 1 hingga 10 karakter.

  • Parameter ini memiliki prioritas lebih tinggi daripada odps.external.data.enable.extension.

Kombinasi karakter yang valid, seperti "jsonl".

None

mcfed.orc.batch.size

Mengontrol jumlah record yang diproses setiap kali, memengaruhi penggunaan memori dan efisiensi pemrosesan.

Properti penyetelan ORC. Menentukan ukuran batch ORC default dalam baris.

Bilangan bulat non-negatif

1000

Menulis data

Untuk informasi selengkapnya tentang sintaksis penulisan MaxCompute, lihat Sintaksis penulisan.

Analisis kueri

  • Untuk informasi selengkapnya tentang sintaksis SELECT, lihat Sintaksis kueri.

  • Untuk informasi selengkapnya tentang optimasi rencana kueri, lihat Optimasi kueri.

  • Anda dapat mengoptimalkan kueri pada tabel eksternal ORC dengan mengaktifkan Predicate Pushdown (PPD). Untuk melakukannya, tambahkan parameter berikut sebelum pernyataan SQL Anda:

    Parameter PPD harus digunakan dalam mode Native. Artinya, sakelar Native harus disetel ke true.

    -- Aktifkan pembaca native ORC.
    SET odps.ext.oss.orc.native=true;
    
    -- Aktifkan PPD ORC.
    SET odps.storage.orc.use.predicate.pushdown=true; 

Contoh skenario

Contoh ini menunjukkan cara membuat tabel ORC eksternal yang menggunakan kompresi SNAPPY, lalu membaca dan menulis data ke tabel tersebut.

  1. Prasyarat

    1. Anda telah membuat proyek MaxCompute.

    2. Anda telah menyiapkan bucket OSS dan direktori OSS. Untuk informasi selengkapnya, lihat Buat bucket dan Kelola folder.

      Karena MaxCompute hanya tersedia di wilayah tertentu, masalah konektivitas lintas wilayah mungkin terjadi. Disarankan untuk menggunakan bucket OSS di wilayah yang sama dengan proyek MaxCompute Anda.
    3. Otorisasi

      1. Anda memiliki izin untuk mengakses OSS. Akun Alibaba Cloud (akun utama), pengguna Resource Access Management (RAM), atau peran RAM dapat mengakses tabel eksternal OSS. Untuk detail otorisasi, lihat Otorisasi mode STS untuk OSS.

      2. Anda memiliki izin CreateTable di proyek MaxCompute. Untuk detail tentang izin operasi tabel, lihat Izin MaxCompute.

  2. Siapkan file data berformat SNAPPY.

    Menggunakan data sampel yang disediakan, buat path folder orc_snappy/dt=20250526 di bucket oss-mc-test. Unggah file SNAPPY ke folder partisi dt=20250526.

  3. Buat tabel ORC eksternal dengan kompresi SNAPPY.

    CREATE EXTERNAL TABLE orc_data_type_snappy
    (
        vehicleId INT,
        recordId INT,
        patientId INT,
        calls INT,
        locationLatitute DOUBLE,
        locationLongitude DOUBLE,
        recordTime STRING,
        direction STRING
    )
    PARTITIONED BY (dt STRING )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
    WITH serdeproperties (
     'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
    ) 
    STORED AS ORC  
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/orc_snappy/'
    tblproperties (
        'mcfed.orc.compress'='SNAPPY');
  4. Jika tabel eksternal OSS Anda dipartisi, jalankan perintah berikut untuk menambahkan partisi yang sudah ada. Untuk informasi selengkapnya, lihat Sintaksis untuk menambahkan partisi ke tabel eksternal OSS.

    -- Tambahkan partisi ke tabel eksternal
    MSCK REPAIR TABLE orc_data_type_snappy ADD PARTITIONS;
  5. Baca data dari tabel eksternal ORC.

    SELECT * FROM orc_data_type_snappy WHERE dt=20250526 LIMIT 10;

    Kueri mengembalikan hasil berikut:

    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongitude | recordtime     | direction  | dt         |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | 1          | 12         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20250526   |
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20250526   |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:01 | NE         | 20250526   |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:02 | NE         | 20250526   |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:03 | W          | 20250526   |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:04 | S          | 20250526   |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:05 | S          | 20250526   |
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:06 | N          | 20250526   |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:07 | SW         | 20250526   |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:08 | NE         | 20250526   |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:09 | N          | 20250526   |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
  6. Tulis data ke tabel eksternal ORC dan kueri data tersebut.

    INSERT INTO orc_data_type_snappy PARTITION (dt ='20250526') 
      VALUES (1,16,76,1,46.81006,-92.08174,'9/14/2014 0:10','SW');
    
    -- Kueri data yang baru dimasukkan
    SELECT * FROM orc_data_type_snappy WHERE dt = '20250526' AND recordid=16;

    Kueri mengembalikan hasil berikut:

    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongitude | recordtime     | direction  | dt         |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | 1          | 16         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20250526   |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+

Tipe data yang didukung

Untuk informasi selengkapnya tentang tipe data MaxCompute, lihat Versi tipe data 1.0 dan Versi tipe data 2.0.

  • Mode JNI (set odps.ext.oss.orc.native=false;): Mode ini tidak menggunakan pembaca ORC native saat membaca tabel. Mode ini mendukung operasi baca dan tulis.

  • Mode Native (set odps.ext.oss.orc.native=true;): Mode ini menggunakan pembaca ORC native saat membaca tabel. Mode ini hanya mendukung operasi baca.

Mode

Mode Java (baca dan tulis)

Native mode (read-only)

TINYINT

Didukung

Didukung

SMALLINT

Didukung

Didukung

INT

Didukung

Didukung

BIGINT

Didukung

Didukung

BINARY

Didukung

Didukung

FLOAT

Didukung

Didukung

DOUBLE

Didukung

Didukung

DECIMAL(precision,scale)

Didukung

Didukung

VARCHAR(n)

Didukung

Didukung

CHAR(n)

Didukung

Didukung

STRING

Didukung

Didukung

DATE

Didukung

Didukung

DATETIME

Tidak didukung

Didukung

TIMESTAMP

Tidak didukung

Tidak didukung

TIMESTAMP_NTZ

Didukung

Tidak didukung

BOOLEAN

Didukung

Didukung

ARRAY

Didukung

Didukung

MAP

Didukung

Didukung

STRUCT

Didukung

Didukung

JSON

Tidak didukung

Tidak didukung

Format Kompresi yang Didukung

  • Untuk membaca atau menulis file OSS terkompresi, Anda harus menambahkan konfigurasi with serdeproperties ke pernyataan pembuatan tabel. Untuk informasi selengkapnya, lihat Parameter properti with serdeproperties.

  • MaxCompute mendukung pembacaan dan penulisan file ORC yang dikompresi dengan SNAPPY atau ZLIB.

Dukungan Schema Evolution

Tabel eksternal ORC mendukung dua metode untuk memetakan skema tabel ke kolom dalam file data: pemetaan berbasis posisi dan pemetaan berbasis nama.

  • Pemetaan berbasis posisi: Untuk menggunakan metode ini, setel parameter 'mcfed.orc.schema.resolution'='position' atau abaikan untuk menggunakan pengaturan default. Sistem memetakan kolom berdasarkan posisinya. Oleh karena itu, urutan kolom dalam tabel harus persis sesuai dengan urutan bidang dalam file.

  • Pemetaan berbasis nama: Untuk menggunakan metode ini, setel parameter 'mcfed.orc.schema.resolution'='name' saat membuat tabel eksternal. Sistem kemudian memetakan kolom berdasarkan nama, bukan posisi.

Pada tabel berikut, Masalah kompatibilitas data menjelaskan apakah tabel eksternal dapat membaca data dengan benar setelah operasi Schema Evolution. Ini mencakup pembacaan data baru yang sesuai dengan skema yang dimodifikasi dan data historis yang menggunakan skema lama.

Jenis operasi

Metode pemetaan

Didukung

Deskripsi

Masalah kompatibilitas data

Tambah kolom

Pemetaan berbasis posisi

Didukung

  • Kolom baru tidak dapat ditambahkan dalam urutan tertentu; secara default ditambahkan sebagai kolom terakhir.

  • Menambahkan kolom biasa dengan nilai default hanya berlaku untuk data yang ditulis dari MaxCompute.

  • Data yang sesuai dengan struktur skema yang dimodifikasi dapat dibaca dengan benar.

  • Data historis dengan skema lama, di mana tidak ada operasi modifikasi kolom, dibaca oleh tabel menggunakan skema baru.

    Misalnya, jika kolom ditambahkan ke tabel, tetapi kolom yang sesuai tidak ditambahkan ke data historis, data historis untuk kolom tersebut akan diisi dengan NULL saat tabel dibaca.

Pemetaan berbasis nama

Didukung

Hapus kolom

Pemetaan berbasis posisi

Tidak didukung

Tidak disarankan. Tabel eksternal ORC memetakan nilai kolom berdasarkan posisi. Urutan kolom tabel harus sesuai dengan urutan bidang dalam file. Setelah operasi penghapusan kolom, jika bidang file dan tabel tidak cocok, terjadi error saat membaca tabel.

  • Data yang sesuai dengan struktur skema yang dimodifikasi dapat dibaca dengan benar.

  • Data historis dengan skema lama, di mana tidak ada operasi modifikasi kolom, dibaca oleh tabel menggunakan skema baru.

    Misalnya, jika kolom dihapus dari tabel, tetapi kolom yang sesuai tidak dihapus dari data historis, terjadi error saat membaca tabel.

Pemetaan berbasis nama

Didukung

Dengan pemetaan berbasis nama, sistem secara otomatis mencocokkan berdasarkan nama kolom, tidak lagi bergantung pada urutan.

Kompatibel

Ubah urutan kolom

Pemetaan berbasis posisi

Tidak didukung

Tidak disarankan. Tabel eksternal ORC memetakan nilai kolom berdasarkan posisi. Urutan kolom tabel harus sesuai dengan urutan bidang dalam file. Setelah operasi penghapusan kolom, jika bidang file dan tabel tidak cocok, terjadi error saat membaca tabel.

  • Data yang sesuai dengan struktur skema yang dimodifikasi dapat dibaca dengan benar.

  • Data historis dengan skema lama, di mana tidak ada operasi modifikasi kolom, dibaca oleh tabel menggunakan skema baru.

    Misalnya, jika urutan kolom tabel diubah, tetapi urutan kolom data historis tidak diubah, skema dan data tidak akan sesuai.

Pemetaan berbasis nama

Didukung

Dengan pemetaan berbasis nama, sistem secara otomatis mencocokkan berdasarkan nama kolom, tidak lagi bergantung pada urutan.

Kompatibel

Ubah tipe data kolom

Pemetaan berbasis posisi

Didukung

Untuk informasi selengkapnya tentang tabel konversi tipe data, lihat Ubah tipe data kolom.

Kompatibel

Pemetaan berbasis nama

Didukung

Ubah nama kolom

Pemetaan berbasis posisi

Didukung

Kompatibel

Pemetaan berbasis nama

Tidak didukung

Tidak disarankan. Dengan pemetaan berbasis nama, sistem secara otomatis mencocokkan berdasarkan nama kolom. Setelah mengubah nama kolom, nama kolom asli yang dapat dicocokkan mungkin tidak ditemukan dalam file.

  • Data yang sesuai dengan struktur skema yang dimodifikasi dapat dibaca dengan benar.

  • Jika Anda tidak melakukan operasi modifikasi kolom pada data yang ada, tabel dibaca menggunakan skema baru.

    Misalnya, jika nama kolom diubah dalam tabel, tetapi nama kolom yang sesuai tidak diubah dalam skema file ORC, kolom tersebut akan kosong saat tabel dibaca.

Ubah komentar kolom

Pemetaan berbasis posisi

Didukung

Konten komentar harus berupa string yang valid dengan panjang tidak melebihi 1024 byte; jika tidak, akan dilaporkan error.

Kompatibel

Pemetaan berbasis nama

Didukung

Ubah properti nullability kolom

Pemetaan berbasis posisi

Tidak didukung

Operasi ini tidak didukung. Secara default bersifat Nullable.

Tidak berlaku

Pemetaan berbasis nama

Tidak didukung