Topik ini menjelaskan cara membuat, membaca dari, dan menulis ke tabel eksternal OSS dalam format Delta Lake.
MaxCompute hanya mendukung fitur tabel eksternal dengan versi tertentu dari kit pengembangan perangkat lunak (SDK) Delta Lake. MaxCompute tidak akan memperbarui versi SDK atau mengembangkan lebih lanjut fitur ini. Gunakan tabel eksternal Paimon untuk membaca data dalam format tabel data lake.
Lingkup
Tabel eksternal OSS tidak mendukung properti cluster.
Satu file tidak boleh melebihi 2 GB. Jika ukuran file terlalu besar, lakukan pemisahan.
MaxCompute dan OSS harus berada di wilayah yang sama.
Tabel eksternal Delta Lake hanya mendukung pembacaan seluruh data dari file yang dipetakan ke tabel eksternal tersebut. Fitur ini tidak mendukung penyembunyian otomatis kolom sistem, pembacaan inkremental, pembacaan snapshot, atau operasi tulis. Untuk melakukan operasi baca dan tulis yang mendukung atomicity, consistency, isolation, dan durability (ACID), gunakan fitur seperti tabel Delta MaxCompute atau tabel eksternal Paimon.
Versi SDK Delta Lake default yang terintegrasi ke dalam MaxCompute adalah
io.delta:delta-core_2.11:0.2.0.5. Kompatibilitas maju atau mundur untuk SDK Delta Lake tidak dijamin. Kompatibilitas dipertahankan oleh komunitas open source.
Tipe data yang didukung
Untuk informasi lebih lanjut tentang tipe data MaxCompute, lihat Tipe data (versi 1.0) dan Tipe data (versi 2.0).
Tipe data | Didukung | Tipe data | Dukungan |
TINYINT |
| STRING |
|
SMALLINT |
| DATE |
|
INT |
| DATETIME |
|
BIGINT |
| TIMESTAMP |
|
BINARY |
| TIMESTAMP_NTZ |
|
FLOAT |
| BOOLEAN |
|
DOUBLE |
| ARRAY |
|
DECIMAL(precision,scale) |
| MAP |
|
VARCHAR(n) |
| STRUCT |
|
CHAR(n) |
| JSON |
|
Buat tabel eksternal
Sintaks
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.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION 'oss_location';Parameter
Untuk informasi lebih lanjut, lihat Parameter sintaks dasar.
Kueri dan analisis
Untuk informasi lebih lanjut tentang sintaks SELECT, lihat Baca data dari OSS.
Untuk informasi lebih lanjut tentang optimasi rencana kueri, lihat Optimasi kueri.
Contoh
Contoh ini menunjukkan cara menggunakan resolver data open source bawaan untuk membuat tabel eksternal Delta Lake, menulis data ke OSS, dan melakukan kueri terhadap data tersebut.
Prasyarat
Bucket dan folder OSS tersedia. Untuk informasi lebih lanjut, lihat Buat bucket dan Kelola folder.
MaxCompute mendukung pembuatan folder secara otomatis di OSS. Jika suatu pernyataan SQL melibatkan tabel eksternal dan user-defined function (UDF), Anda dapat menggunakan satu pernyataan untuk membaca dan menulis ke tabel serta menggunakan UDF tersebut. Anda juga dapat membuat folder secara manual.
MaxCompute hanya dideploy di wilayah tertentu. Untuk menghindari potensi masalah koneksi data cross-region, pastikan bucket OSS Anda berada di wilayah yang sama dengan proyek MaxCompute Anda.
Otorisasi
Anda harus memiliki izin untuk mengakses OSS. Anda dapat menggunakan Akun Alibaba Cloud, pengguna Resource Access Management (RAM), atau Peran RAM untuk mengakses tabel eksternal OSS. Untuk informasi lebih lanjut tentang otorisasi, lihat Otorisasi akses dalam mode STS untuk OSS.
Anda harus memiliki izin CreateTable di proyek MaxCompute. Untuk informasi lebih lanjut tentang izin tabel, lihat Izin MaxCompute.
Unggah data uji
Masuk ke Konsol OSS dan unggah file data uji dalam format Delta Lake ke folder
oss-mc-test/Demo_delta_pt/dt=20250612/di bucket OSS Anda. Untuk informasi lebih lanjut, lihat Unggah file ke OSS.Buat tabel eksternal Delta Lake
CREATE EXTERNAL TABLE test_delta_pt ( id INT ) PARTITIONED BY (dt STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'io.delta.hive.DeltaInputFormat' OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_delta_pt/';Impor data partisi. Jika tabel eksternal OSS yang dibuat merupakan tabel partisi, Anda juga harus mengimpor data partisinya. Untuk informasi lebih lanjut, lihat Sintaks untuk menambahkan data partisi ke tabel eksternal OSS.
MSCK REPAIR TABLE test_delta_pt ADD PARTITIONS;Lakukan kueri terhadap tabel eksternal Delta Lake.
SELECT * FROM test_delta_pt WHERE dt='20250612';