All Products
Search
Document Center

MaxCompute:Tabel eksternal ORC

Last Updated:Jun 16, 2026

Topik ini menjelaskan cara membuat, membaca dari, dan menulis ke tabel eksternal ORC untuk OSS.

Batasan

  • Tabel eksternal OSS tidak mendukung properti cluster.

  • Ukuran file tunggal tidak boleh melebihi 2 GB. Anda harus membagi file yang lebih besar dari 2 GB.

  • MaxCompute dan OSS harus berada di wilayah yang sama.

Membuat tabel eksternal

syntax

Jika skema file ORC dan skema tabel eksternal tidak sesuai, MaxCompute menangani perbedaan tersebut sebagai berikut:

  • Kolom dalam file lebih sedikit daripada dalam tabel: Kolom yang hilang diisi dengan NULL.

  • Kolom dalam file lebih banyak daripada dalam tabel: Kolom tambahan dibuang.

  • Ketidaksesuaian tipe: STRING dapat membaca data INT dari file ORC, tetapi hal ini tidak disarankan. Membaca data STRING sebagai INT akan mengonversi nilai non-numerik menjadi NULL dan menerima nilai numerik.

Gunakan sintaksis sederhana atau sintaksis lengkap untuk membuat tabel eksternal ORC.

Sintaksis sederhana (disarankan)

Gunakan sintaksis ini jika Anda ingin MaxCompute menangani otorisasi secara otomatis menggunakan RAM role default.

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 khusus format

WITH serdeproperties

Property

Kapan digunakan

Nilai

Default

mcfed.orc.schema.resolution

File ORC dalam tabel eksternal yang sama memiliki skema yang tidak konsisten.

name — memetakan kolom berdasarkan nama.

position — memetakan kolom berdasarkan posisi.

tblproperties

Property

Kapan digunakan

Deskripsi

Nilai

Default

mcfed.orc.compress

Menulis data ORC ke OSS dalam format terkompresi.

Algoritma kompresi untuk file output ORC.

SNAPPY, ZLIB, atau ZSTD

None

io.compression.codecs

File data OSS dalam format Raw-Snappy.

Mengaktifkan MaxCompute untuk membaca data terkompresi Raw-Snappy.

com.aliyun.odps.io.compress.SnappyRawCodec

None

odps.external.data.output.prefix (juga odps.external.data.prefix)

Menambahkan awalan kustom ke file output.

String awalan. Karakter yang diizinkan: huruf, angka, dan garis bawah (a–z, A–Z, 0–9, _). Panjang: 1–10 karakter.

Contoh: mc_

None

odps.external.data.enable.extension

Mengontrol apakah file output menyertakan ekstensi file.

True menampilkan ekstensi; False menyembunyikannya.

True atau False

False

odps.external.data.output.suffix

Menambahkan akhiran kustom ke file output.

String akhiran. Karakter yang diizinkan: huruf, angka, dan garis bawah.

Contoh: _hangzhou

None

odps.external.data.output.explicit.extension

Menambahkan ekstensi kustom ke file output. Memiliki prioritas lebih tinggi daripada odps.external.data.enable.extension.

String ekstensi. Karakter yang diizinkan: huruf, angka, dan garis bawah. Panjang: 1–10 karakter.

Contoh: jsonl

None

mcfed.orc.batch.size

Menyesuaikan penggunaan memori dan throughput pemrosesan.

Jumlah baris yang diproses per batch (ukuran batch ORC).

Bilangan bulat non-negatif

1000

Menulis data

Untuk detail tentang sintaksis penulisan di MaxCompute, lihat Sintaksis penulisan.

Kueri data

  • Lihat Sintaksis kueri untuk detail tentang sintaksis SELECT.

  • Lihat Optimasi kueri untuk detail tentang mengoptimalkan rencana kueri.

  • Aktifkan predicate pushdown

    Predicate pushdown (PPD) meningkatkan performa kueri pada tabel eksternal ORC dengan mendorong kondisi filter ke lapisan pemindaian data. PPD memerlukan mode native (odps.ext.oss.orc.native=true).

    Tambahkan pernyataan berikut sebelum kueri SQL Anda:

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

Contoh

Contoh ini membuat tabel eksternal ORC dengan kompresi SNAPPY, menambahkan partisi yang sudah ada, membaca data, dan menulis baris baru.

Prasyarat

  1. Anda telah membuat proyek MaxCompute.

  2. Anda telah menyiapkan bucket dan direktori OSS. Untuk informasi selengkapnya, lihat Membuat bucket dan Mengelola direktori.

    Pastikan bucket Anda berada di wilayah yang sama dengan proyek MaxCompute Anda.
  3. Berikan izin.

    1. Anda memiliki izin untuk mengakses OSS. Anda dapat mengakses tabel eksternal OSS menggunakan Akun Alibaba Cloud, RAM user, atau RAM role. Untuk informasi selengkapnya tentang cara memberikan izin, lihat Otorisasi mode STS untuk OSS.

    2. Anda memiliki izin CreateTable di proyek MaxCompute. Untuk informasi selengkapnya tentang izin terkait tabel, lihat Izin MaxCompute.

Langkah 1: Siapkan file data

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.

Langkah 2: Buat tabel eksternal

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'
);

Langkah 3: Tambahkan partisi yang sudah ada

Untuk tabel eksternal berpartisi, jalankan MSCK REPAIR TABLE untuk mendaftarkan partisi OSS yang sudah ada ke MaxCompute. Untuk sintaksis lengkapnya, lihat Menambahkan partisi ke tabel eksternal OSS.

MSCK REPAIR TABLE orc_data_type_snappy ADD PARTITIONS;

Langkah 4: Baca data

SELECT * FROM orc_data_type_snappy WHERE dt = '20250526' LIMIT 10;

Kueri mengembalikan:

+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| 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   |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+

Langkah 5: Tulis data

INSERT INTO orc_data_type_snappy PARTITION (dt = '20250526')
  VALUES (1, 16, 76, 1, 46.81006, -92.08174, '9/14/2014 0:10', 'SW');

-- Verifikasi baris yang dimasukkan
SELECT * FROM orc_data_type_snappy WHERE dt = '20250526' AND recordid = 16;

Kueri mengembalikan:

+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| 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 daftar lengkap tipe data MaxCompute, lihat Tipe data versi 1.0 dan Tipe data versi 2.0.

MaxCompute mendukung dua mode untuk membaca tabel eksternal ORC:

  • Mode JNI (SET odps.ext.oss.orc.native=false;): Mendukung operasi baca dan tulis.

  • Mode native (SET odps.ext.oss.orc.native=true;): Hanya mendukung operasi baca.

Tipe data

Mode JNI (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 ORC terkompresi, tambahkan properti mcfed.orc.compress ke bagian with serdeproperties saat membuat tabel, lihat WITH serdeproperties.

  • Format yang didukung: ORC terkompresi menggunakan SNAPPY, ZLIB, atau ZSTD.

Evolusi skema

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

  • Pemetaan berbasis posisi (default): Atur 'mcfed.orc.schema.resolution'='position' atau abaikan properti tersebut. Kolom dicocokkan berdasarkan urutannya, sehingga urutan kolom tabel harus persis sesuai dengan urutan field dalam file ORC.

  • Pemetaan berbasis nama: Atur 'mcfed.orc.schema.resolution'='name'. Kolom dicocokkan berdasarkan nama, terlepas dari urutannya.

Catatan

Tabel di bawah ini menunjukkan operasi perubahan skema mana yang kompatibel dengan masing-masing metode pemetaan. "Kompatibel" berarti data yang baru ditulis maupun data historis dapat dibaca dengan benar setelah operasi tersebut.

Perubahan skema

Mode pemetaan

Didukung

Deskripsi

Kompatibilitas data

Tambah kolom

Berdasarkan posisi

Didukung

  • Kolom baru ditambahkan di akhir. Posisi tidak dapat ditentukan.

  • Nilai default untuk kolom yang ditambahkan hanya berlaku untuk data yang ditulis oleh MaxCompute setelah perubahan.

  • Data baru yang sesuai dengan skema yang diperbarui dapat dibaca secara normal.

  • Data historis yang ditulis sebelum perubahan dibaca menggunakan skema baru.

Sebagai contoh, setelah kolom ditambahkan, baris historis yang tidak memiliki kolom baru tersebut akan mengembalikan NULL untuk kolom tersebut.

Berdasarkan nama

Didukung

Hapus kolom

Berdasarkan posisi

Tidak didukung

Tidak disarankan. Pemetaan berbasis posisi mengharuskan urutan kolom dalam DDL sesuai dengan file. Setelah kolom dihapus, skema DDL dan file menjadi berbeda, menyebabkan error saat membaca.

  • Data baru yang sesuai dengan skema yang diperbarui dapat dibaca secara normal.

  • Data historis yang ditulis sebelum perubahan dibaca menggunakan skema baru.

Sebagai contoh, setelah kolom dihapus, data historis yang masih berisi kolom yang dihapus tersebut menyebabkan error saat membaca.

Berdasarkan nama

Didukung

Pemetaan berbasis nama mencocokkan kolom berdasarkan nama, terlepas dari urutan kolom.

Kompatibel

Ubah urutan kolom

Berdasarkan posisi

Tidak didukung

Tidak disarankan. Pemetaan berbasis posisi mengharuskan urutan kolom dalam DDL sesuai dengan file. Setelah kolom diubah urutannya, skema DDL dan file menjadi berbeda, menyebabkan error saat membaca.

  • Data baru yang sesuai dengan skema yang diperbarui dapat dibaca secara normal.

  • Data historis yang ditulis sebelum perubahan dibaca menggunakan skema baru.

Sebagai contoh, setelah kolom diubah urutannya, data historis tetap mempertahankan urutan aslinya, menyebabkan ketidaksesuaian antara skema dan data.

Berdasarkan nama

Didukung

Pemetaan berbasis nama mencocokkan kolom berdasarkan nama, terlepas dari urutan kolom.

Kompatibel

Ubah tipe data kolom

Berdasarkan posisi

Didukung

Untuk konversi tipe yang diizinkan, lihat Ubah tipe data kolom.

Kompatibel

Berdasarkan nama

Didukung

Ubah nama kolom

Berdasarkan posisi

Didukung

Kompatibel

Berdasarkan nama

Tidak didukung

Tidak disarankan. Pemetaan berbasis nama mencocokkan kolom berdasarkan nama. Setelah kolom diganti namanya, file yang ada yang menggunakan nama asli tidak dapat lagi dicocokkan.

  • Data baru yang sesuai dengan skema yang diperbarui dapat dibaca secara normal.

  • Data historis yang ditulis sebelum perubahan dibaca menggunakan skema baru.

Sebagai contoh, setelah kolom diganti namanya, jika skema file ORC masih menggunakan nama asli, kolom tersebut akan mengembalikan NULL saat dibaca.

Ubah komentar kolom

Berdasarkan posisi

Didukung

Komentar harus berupa string valid dengan panjang maksimal 1.024 byte.

Kompatibel

Berdasarkan nama

Didukung

Ubah nullability kolom

Berdasarkan posisi

Tidak didukung

Kolom bersifat nullable secara default.

Tidak berlaku

Berdasarkan nama

Tidak didukung