MaxCompute mendukung pembuatan tabel eksternal Paimon yang memetakan ke direktori tabel Paimon yang disimpan di bucket OSS dan mengakses datanya. Topik ini menjelaskan cara membuat tabel eksternal Paimon dan melakukan kueri terhadapnya dari MaxCompute.
Pengenalan fitur
Apache Paimon adalah format penyimpanan data lake terpadu untuk beban kerja batch dan streaming, yang menawarkan penulisan ber-throughput tinggi dan kueri berlatensi rendah. Mesin komputasi umum seperti Spark, Hive, dan Trino—yang digunakan bersama Realtime Compute for Apache Flink dan E-MapReduce—terintegrasi secara mulus dengan Paimon. Dengan Apache Paimon, Anda dapat dengan cepat membangun data lake di OSS dan menghubungkannya ke MaxCompute untuk analitik. Penyaringan metadata lebih lanjut mengoptimalkan performa kueri dengan melewati file direktori OSS yang tidak diperlukan selama operasi baca.
Penerapan
Tabel eksternal Paimon tidak memperbarui skema mereka secara otomatis ketika skema file Paimon yang mendasarinya berubah.
Anda tidak dapat mengatur atribut kluster atau kunci primer pada tabel eksternal Paimon.
Tabel eksternal Paimon tidak mendukung kueri terhadap versi historis data.
Jangan menulis data langsung ke tabel eksternal Paimon. Sebagai gantinya, gunakan metode seperti UNLOAD untuk mengekspor data ke OSS.
Anda dapat menggunakan pernyataan INSERT INTO atau INSERT OVERWRITE untuk menulis data ke tabel eksternal Paimon. Namun, penulisan ke tabel Dynamic Bucket dan tabel Cross Partition tidak didukung.
Operasi UPDATE dan DELETE tidak didukung pada tabel eksternal Paimon.
MaxCompute dan OSS harus berada di wilayah yang sama.
Buat tabel eksternal Paimon
Struktur sintaksis
Untuk detail tentang sintaksis tabel eksternal dalam berbagai format, lihat Tabel eksternal OSS.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';Parameter umum
Untuk informasi lebih lanjut tentang parameter umum, lihat Parameter sintaksis dasar.
Menulis data
Untuk informasi lebih lanjut tentang sintaksis penulisan MaxCompute, lihat Sintaksis penulisan.
Analisis kueri
Logika pemisahan data (Split) tabel Paimon berbeda dari tabel MaxCompute native. Paimon menggunakan organisasi file internal dan mekanisme sharding sendiri, yang tidak sepenuhnya selaras dengan parameter MaxCompute.
Untuk detail tentang sintaksis SELECT, lihat Deskripsi sintaksis kueri.
Untuk detail tentang mengoptimalkan rencana kueri, lihat Optimasi kueri.
Untuk detail tentang BadRowSkipping, lihat BadRowSkipping.
Contoh penggunaan
Langkah 1: Prasyarat
Anda telah membuat proyek MaxCompute.
Anda telah menyiapkan bucket OSS dan direktori OSS. Untuk informasi lebih lanjut, lihat Buat bucket dan Kelola folder.
Karena MaxCompute hanya tersedia di wilayah tertentu, masalah konektivitas cross-region dapat terjadi. Kami menyarankan menggunakan bucket OSS di wilayah yang sama dengan proyek MaxCompute Anda.
Otorisasi
Anda memiliki izin untuk mengakses OSS. Akun Alibaba Cloud (akun utama), pengguna Resource Access Management (RAM), atau role RAM dapat mengakses tabel eksternal OSS. Untuk detail otorisasi, lihat Otorisasi mode STS untuk OSS.
Anda memiliki izin CreateTable di proyek MaxCompute. Untuk detail tentang izin operasi tabel, lihat Izin MaxCompute.
Langkah 2: Siapkan data di Flink
Buat katalog Paimon dan tabel Paimon, lalu masukkan data ke dalam tabel seperti ditunjukkan pada contoh berikut.
Jika data tabel Paimon sudah ada di OSS, lewati langkah ini.
Buat Katalog Filesystem Paimon
Masuk ke Konsol Flink, dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target. Di panel navigasi sebelah kiri, pilih Catalogs .
Pada halaman Catalog List , klik Create Catalog di sebelah kanan. Pada kotak dialog Create Catalog , pilih Apache Paimon, klik Next , dan konfigurasikan parameter berikut:
Parameter
Wajib
Deskripsi
metastore
Wajib.
Jenis metastore. Pada contoh ini, pilih
filesystem.catalog name
Wajib
Nama katalog kustom, misalnya
paimon-catalog.warehouse
Wajib
Direktori gudang data di OSS. Pada contoh ini, gunakan
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Wajib
Titik akhir OSS. Misalnya, titik akhir untuk wilayah China (Hangzhou) adalah
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Wajib
ID AccessKey yang diperlukan untuk mengakses OSS.
fs.oss.accessKeySecret
Wajib
AccessKey Secret yang diperlukan untuk mengakses OSS.
Buat tabel Paimon
Masuk ke Konsol Flink, dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target, lalu pada panel navigasi di sebelah kiri, pilih .
Pada tab New Script, Anda dapat mengklik
untuk membuat skrip kueri baru.Masukkan perintah berikut dan klik Run.
CREATE TABLE `paimon_catalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt); INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
Jika pekerjaan SQL Anda dibatasi laju—misalnya, saat menjalankan pernyataan
INSERT INTO ... VALUES ...—lakukan langkah-langkah berikut:Klik nama ruang kerja target. Di panel navigasi sebelah kiri, pilih .
Pada halaman Deployments, klik nama pekerjaan target untuk membuka halaman Configuration-nya.
Untuk detail tentang mengonfigurasi parameter waktu proses pekerjaan, lihat Konfigurasi informasi penerapan pekerjaan.
Langkah 3: Buat tabel eksternal Paimon di MaxCompute
Jalankan kode SQL berikut di MaxCompute untuk membuat tabel eksternal Paimon.
CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;Pada kode di atas, table_path adalah path tabel Paimon yang dibuat di Flink, misalnya paimon-fs/paimon-test/default.db/test_tbl. Untuk mendapatkan path ini:
Masuk ke Konsol Flink, dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target. Di panel navigasi sebelah kiri, pilih Catalogs .
Langkah 4: Muat data partisi
Jika tabel eksternal OSS yang Anda buat dipartisi, Anda harus memuat data partisi secara terpisah. Untuk informasi lebih lanjut, lihat Sintaksis untuk memuat data partisi untuk tabel eksternal OSS.
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;Langkah 5: Baca tabel eksternal Paimon dari MaxCompute
Jalankan perintah berikut di MaxCompute untuk melakukan kueri terhadap tabel eksternal Paimon oss_extable_paimon_pt.
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';Hasilnya sebagai berikut:
+------------+------------+------------+
| id | data | dt |
+------------+------------+------------+
| 1 | CCC | 2024-07-18 |
| 2 | DDD | 2024-07-18 |
+------------+------------+------------+Jika skema dalam file Paimon berbeda dari skema tabel eksternal:
Ketidaksesuaian jumlah kolom: Jika file Paimon memiliki kolom lebih sedikit daripada yang didefinisikan dalam DDL tabel eksternal, nilai kolom yang hilang diisi dengan NULL selama pembacaan. Jika memiliki kolom lebih banyak, kolom tambahan akan dibuang.
Ketidaksesuaian tipe data: MaxCompute tidak mendukung pembacaan data STRING dari file Paimon ke kolom INT. MaxCompute mendukung pembacaan data INT ke kolom STRING, meskipun hal ini tidak disarankan.
Tipe data yang didukung
Untuk tipe data MaxCompute, lihat Edisi tipe data 1.0 dan Edisi tipe data 2.0.
Tipe data Paimon open source | Tipe data MaxCompute 2.0 | Dukungan baca/tulis | Deskripsi |
TINYINT | TINYINT | Integer bertanda 8-bit. | |
SMALLINT | SMALLINT | Integer bertanda 16-bit. | |
INT | INT | Integer bertanda 32-bit. | |
BIGINT | BIGINT | Integer bertanda 64-bit. | |
BINARY(MAX_LENGTH) | BINARY | Tipe data biner. Panjang maksimum adalah 8 MB. | |
FLOAT | FLOAT | Bilangan titik mengambang biner 32-bit. | |
DOUBLE | DOUBLE | Bilangan titik mengambang biner 64-bit. | |
DECIMAL(precision,scale) | DECIMAL(precision,scale) | Bilangan desimal eksak. Default adalah
| |
VARCHAR(n) | VARCHAR(n) | String karakter panjang variabel. n adalah panjangnya, berkisar antara 1 hingga 65535. | |
CHAR(n) | CHAR(n) | String karakter panjang tetap. n adalah panjangnya, berkisar antara 1 hingga 255. | |
VARCHAR(MAX_LENGTH) | STRING | Tipe string. Panjang maksimum adalah 8 MB. | |
DATE | DATE | Format tanggal: | |
TIME, TIME(p) | Tidak didukung | Tipe TIME Paimon merepresentasikan waktu tanpa zona waktu, terdiri dari jam, menit, dan detik, dengan presisi nanodetik. TIME(p) menentukan presisi pecahan detik dari 0 hingga 9 (default adalah 0). MaxCompute tidak memiliki tipe data yang sesuai. | |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ | Timestamp tanpa zona waktu, presisi hingga nanodetik. Untuk membaca tipe ini, aktifkan sakelar mode native: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | Tipe timestamp presisi hingga nanodetik. Format: | |
BOOLEAN | BOOLEAN | Tipe boolean. | |
ARRAY | ARRAY | Tipe kompleks. | |
MAP | MAP | Tipe kompleks. | |
ROW | STRUCT | Tipe kompleks. | |
MULTISET<t> | Tidak didukung | MaxCompute tidak memiliki tipe data yang sesuai. | |
VARBINARY, VARBINARY(n), BYTES | BINARY | String biner panjang variabel. |
FAQ
Error kSIGABRT saat membaca tabel eksternal Paimon
Pesan error:
ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0Penyebab:
Error ini terjadi saat membaca data TIMESTAMP_NTZ dalam mode JNI.
Solusi:
Sebelum membaca dari tabel, nonaktifkan fitur Native dengan menjalankan perintah
SET odps.sql.common.table.jni.disable.native=true;.
Referensi
Anda dapat membuat tabel eksternal Paimon MaxCompute di Flink sebagai katalog kustom, menulis data ke dalamnya, lalu melakukan kueri dan mengonsumsi data Paimon dari MaxCompute. Untuk informasi lebih lanjut, lihat Buat tabel eksternal Paimon MaxCompute berdasarkan Flink.