Topik ini menjelaskan cara membuat, membaca, dan menulis data ke tabel eksternal OSS dalam format Hudi.
MaxCompute hanya mendukung fitur tabel eksternal untuk versi kit pengembangan perangkat lunak (SDK) Hudi yang telah dipublikasikan. Tidak akan ada pembaruan versi atau peningkatan fitur lebih lanjut. Gunakan tabel eksternal Paimon untuk membaca data dalam format tabel data lake.
Cakupan
Tabel eksternal OSS tidak mendukung properti kluster.
Ukuran 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 Hudi hanya mendukung pembacaan seluruh data dari file yang dipetakan. Kolom sistem tidak disembunyikan secara otomatis, serta operasi baca inkremental, baca snapshot, atau tulis tidak didukung. Untuk operasi baca dan tulis yang memerlukan atomicity, consistency, isolation, dan durability (ACID), gunakan fitur seperti tabel Delta MaxCompute atau tabel eksternal Paimon.
Versi SDK Hudi default yang terintegrasi ke dalam MaxCompute adalah
org.apache.hudi:hudi-hadoop-mr-bundle:0.12.2-emr-1.0.6. MaxCompute tidak menjamin kompatibilitas maju atau mundur untuk SDK Hudi. Komunitas open source bertanggung jawab atas kompatibilitas tersebut.
Tipe data yang didukung
Untuk informasi lebih lanjut mengenai tipe data MaxCompute, lihat Tipe data (Versi 1.0) dan Tipe data (Versi 2.0).
Tipe data | Dukungan | 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 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss_location';Parameter
Untuk informasi lebih lanjut, lihat Parameter sintaks dasar.
Kueri dan analisis
Untuk informasi lebih lanjut mengenai sintaks SELECT, lihat Baca data dari OSS.
Untuk informasi lebih lanjut mengenai optimasi rencana kueri, lihat Optimasi kueri.
Contoh skenario
Buat tabel eksternal dalam format Hudi menggunakan parser data open source bawaan, tulis data ke OSS, lalu lakukan kueri terhadap data tersebut.
Prasyarat
Bucket OSS dan folder 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 sekaligus menggunakan UDF tersebut. Anda juga dapat membuat folder secara manual.
MaxCompute hanya dideploy di wilayah tertentu. Untuk menghindari potensi masalah koneksi data lintas wilayah, 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 mengenai otorisasi, lihat Otorisasi akses dalam mode STS untuk OSS.
Anda harus memiliki izin CreateTable di proyek MaxCompute. Untuk informasi lebih lanjut mengenai izin tabel, lihat Izin MaxCompute.
Unggah data uji
Masuk ke Konsol OSS dan unggah file data uji berformat Hudi ke folder
oss-mc-test/Demo_hudi_pt/dt=20250612/di bucket OSS. Untuk informasi lebih lanjut, lihat Unggah file ke OSS.Anda dapat membuat tabel eksternal Delta Lake.
CREATE EXTERNAL TABLE vehicle_hudi_pt ( _hoodie_commit_time string, _hoodie_commit_seqno string, _hoodie_record_key string, _hoodie_partition_path string, _hoodie_file_name STRING , id STRING , name STRING ) PARTITIONED BY (ds STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_hudi_pt/';Impor data partisi. Setelah membuat tabel eksternal OSS yang dipartisi, Anda harus menambahkan partisinya. Untuk informasi lebih lanjut, lihat Sintaks untuk menambahkan data partisi ke tabel eksternal OSS.
MSCK REPAIR TABLE vehicle_hudi_pt ADD PARTITIONS;Baca tabel eksternal Hudi
SELECT * FROM vehicle_hudi_pt WHERE ds='20250612';