All Products
Search
Document Center

MaxCompute:Tabel eksternal ORC

Last Updated:Oct 21, 2026

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

Batasan

Deskripsi izin

  • Saat mengakses tabel eksternal OSS, data diakses melalui peran yang ditentukan dalam parameter odps.properties.rolearn, baik menggunakan Akun Alibaba Cloud, pengguna RAM, maupun Peran RAM. Oleh karena itu, Anda harus membuat Peran RAM dan memberikan izin untuk mengakses Bucket OSS target, lalu mengonfigurasikan ARN peran tersebut dalam parameter odps.properties.rolearn. Untuk informasi selengkapnya, lihat Parameter.

  • Anda dapat mengotorisasi akses akun yang sama atau lintas akun sesuai kebutuhan bisnis. Sebaiknya gunakan kebijakan otorisasi kustom untuk Kontrol akses dengan detail halus. Untuk informasi selengkapnya, lihat Otorisasi untuk Sumber data eksternal.

Membuat tabel eksternal

sintaksis

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

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

  • Kolom dalam file lebih banyak daripada di tabel: Kolom tambahan akan diabaikan.

  • Ketidakcocokan tipe: STRING dapat membaca data INT dari file ORC, namun hal ini tidak disarankan. INT yang membaca data STRING 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 Peran RAM 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/<role_name>'
)
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

Properti

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

Properti

Kapan digunakan

Deskripsi

Nilai

Default

mcfed.orc.compress

Menulis data ORC ke OSS dalam format terkompresi.

Tidak diperlukan konfigurasi parameter tambahan saat membaca file terkompresi.

Algoritma kompresi untuk file output ORC.

SNAPPY, ZLIB, atau ZSTD

Tidak ada

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_

Tidak ada

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

Tidak ada

odps.external.data.output.explicit.extension

Menambahkan ekstensi kustom ke file output. Diutamakan dibandingkan odps.external.data.enable.extension.

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

Contoh: jsonl

Tidak ada

odps.ext.column.mapping

Tambahkan properti ini jika nama bidang dalam file data OSS mengandung karakter khusus.

Properti ini mendefinisikan pemetaan nama kolom kustom. Misalnya, jika bidang file OSS adalah id BIGINT, $_test DOUBLE, dan =name STRING, atur nilai parameter menjadi t_test:$_test,t_name:=_name saat membuat tabel eksternal. Anda hanya perlu menentukan pemetaan untuk bidang yang mengandung karakter khusus.

Tidak ada nilai tetap

Tidak ada

odps.ext.column.mapping.delimiters

(Gunakan hanya jika karakter dalam nama kolom bertentangan dengan delimiter default dalam pemetaan nama kolom. Umumnya tidak disarankan.)

Tambahkan properti ini jika nama kolom mengandung karakter khusus : atau ,

Properti ini menyesuaikan delimiter intra-kelompok dan antar-kelompok untuk pasangan kunci-nilai. Nilai harus terdiri dari tepat dua karakter: karakter pertama berfungsi sebagai delimiter kunci-nilai, dan karakter kedua berfungsi sebagai delimiter antara pasangan kunci-nilai yang berbeda.

Tidak ada nilai tetap. Contoh: =|.

Nilai default: ':,'

  • Secara default, ':' digunakan sebagai delimiter antara kunci dan nilai.

  • Koma ',' digunakan sebagai delimiter antara pasangan kunci-nilai yang berbeda.

  • Spasi di awal dan akhir pada kunci serta nilai akan dipangkas selama Penguraian.

mcfed.orc.batch.size

Menyesuaikan Penggunaan memori dan throughput pemrosesan.

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

Bilangan bulat non-negatif

1000

Daftar putih dan blacklist

Tabel eksternal OSS MaxCompute mendukung penyaringan daftar putih dan blacklist. Dengan mengatur parameter daftar putih dan blacklist di tblproperties, Anda dapat memfilter file yang akan dibaca dari direktori. Untuk detailnya, lihat Daftar putih dan blacklist.

Menulis data

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

Melakukan kueri data

  • Lihat Sintaksis kueri untuk detail tentang sintaksis SELECT.

  • Lihat Optimalisasi kueri untuk detail tentang mengoptimalkan Rencana kueri.

  • Mengaktifkan penurunan predikat

    Penurunan predikat (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:

    -- Mengaktifkan pembaca native ORC
    SET odps.ext.oss.orc.native=true;
    
    -- Mengaktifkan penurunan predikat 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, pengguna RAM, atau Peran RAM. 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: Menyiapkan file data

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

Langkah 2: Membuat 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/<role_name>'
)
STORED AS ORC
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/orc_snappy/'
tblproperties (
    'mcfed.orc.compress'='SNAPPY'
);

Langkah 3: Menambahkan partisi yang 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: Membaca 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: Menulis 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');

-- Memverifikasi baris yang disisipkan
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)

Mode native (hanya baca)

TINYINT

Ya

Ya

SMALLINT

Ya

Ya

INT

Ya

Ya

BIGINT

Ya

Ya

BINARY

Ya

Ya

FLOAT

Ya

Ya

DOUBLE

Ya

Ya

DECIMAL(precision,scale)

Ya

Ya

VARCHAR(n)

Ya

Ya

CHAR(n)

Ya

Ya

STRING

Ya

Ya

DATE

Ya

Ya

DATETIME

Tidak

Ya

TIMESTAMP

Tidak

Tidak

TIMESTAMP_NTZ

Ya

Tidak

BOOLEAN

Ya

Ya

ARRAY

Ya

Ya

MAP

Ya

Ya

STRUCT

Ya

Ya

JSON

Tidak

Tidak

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.

Properti kompresi

Baca

Tulis

ZSTD

Ya

Ya

SNAPPY (SnappyRawCodec)

Ya

Ya

SNAPPY (SnappyCodec)

Ya

Tidak

ZLIB

Ya

Ya

Evolusi Skema yang didukung

Tabel eksternal ORC mendukung dua metode untuk memetakan kolom tabel ke bidang 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 sama persis dengan urutan bidang dalam file ORC.

  • Pemetaan berbasis nama: Atur 'mcfed.orc.schema.resolution'='name'. Kolom dicocokkan berdasarkan nama, tanpa bergantung pada urutan.

Catatan

Tabel di bawah ini menunjukkan operasi perubahan skema mana yang kompatibel dengan setiap metode Pemetaan. "Kompatibel" berarti data yang baru ditulis maupun data historis dapat dibaca dengan benar setelah operasi dilakukan.

Perubahan skema

Mode pemetaan

Didukung

Deskripsi

Kompatibilitas data

Menambah kolom

Berdasarkan posisi

Ya

  • 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.

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

Berdasarkan nama

Ya

Menghapus kolom

Berdasarkan posisi

Tidak

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

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

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

Misalnya, setelah kolom dihapus, data historis yang masih berisi kolom yang dihapus akan menyebabkan kesalahan baca.

Berdasarkan nama

Ya

Pemetaan berbasis nama mencocokkan kolom berdasarkan nama, tanpa bergantung pada urutan kolom.

Kompatibel

Mengubah urutan kolom

Berdasarkan posisi

Tidak

Tidak disarankan. Pemetaan berbasis posisi mengharuskan urutan kolom dalam DDL sesuai dengan file. Setelah kolom diurutkan ulang, skema DDL dan file menjadi berbeda, menyebabkan kesalahan baca.

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

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

Misalnya, setelah kolom diurutkan ulang, data historis mempertahankan urutan aslinya, menyebabkan ketidaksesuaian antara skema dan data.

Berdasarkan nama

Ya

Pemetaan berbasis nama mencocokkan kolom berdasarkan nama, tanpa bergantung pada urutan kolom.

Kompatibel

Mengubah Tipe data kolom

Berdasarkan posisi

Ya

Untuk konversi tipe yang diizinkan, lihat Mengubah Tipe data kolom.

Kompatibel

Berdasarkan nama

Ya

Mengganti nama kolom

Berdasarkan posisi

Ya

Kompatibel

Berdasarkan nama

Tidak

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

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

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

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

Mengubah komentar kolom

Berdasarkan posisi

Ya

Komentar harus berupa string valid yang tidak lebih dari 1.024 byte.

Kompatibel

Berdasarkan nama

Ya

Mengubah nullability kolom

Berdasarkan posisi

Tidak

Kolom bersifat nullable secara default.

Tidak berlaku

Berdasarkan nama

Tidak