MaxCompute mendukung pembuatan tabel eksternal Paimon yang memetakan ke direktori tabel Paimon di bucket OSS, lalu mengakses datanya. Topik ini menjelaskan cara membuat tabel eksternal Paimon dan menjalankan query dari MaxCompute.
Pengenalan fitur
Apache Paimon adalah format penyimpanan data lake terpadu untuk beban kerja batch dan streaming, dengan penulisan ber-throughput tinggi dan query 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, bangun data lake di OSS dengan cepat dan hubungkan ke MaxCompute untuk analitik. Penyaringan metadata lebih lanjut mengoptimalkan performa query dengan melewati file direktori OSS yang tidak diperlukan saat operasi baca.
Penerapan
-
Tabel eksternal Paimon tidak memperbarui schema secara otomatis saat schema file Paimon yang mendasarinya berubah.
-
Anda tidak dapat mengatur atribut cluster atau primary key pada tabel eksternal Paimon.
-
Tabel eksternal Paimon tidak mendukung query pada versi historis data.
-
Jangan menulis data langsung ke tabel eksternal Paimon. Sebagai gantinya, gunakan metode seperti UNLOAD untuk mengekspor data ke OSS.
-
Gunakan 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 query
-
Logika pemisahan data (Split) tabel Paimon berbeda dari tabel MaxCompute native. Paimon menggunakan organisasi file internal dan mekanisme sharding tersendiri, yang tidak sepenuhnya selaras dengan parameter MaxCompute.
-
Untuk detail tentang sintaksis SELECT, lihat Deskripsi sintaksis query.
-
Untuk detail tentang mengoptimalkan rencana query, lihat Optimasi query.
-
Untuk detail tentang BadRowSkipping, lihat BadRowSkipping.
Contoh penggunaan
Langkah 1: Prasyarat
-
Anda telah membuat project 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 project 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 project 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
AccessKey ID 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, klik
untuk membuat script query 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 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 partition
Jika tabel eksternal OSS yang Anda buat memiliki partition, muat data partition secara terpisah. Untuk informasi lebih lanjut, lihat Sintaksis untuk memuat data partition 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 menjalankan query pada 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 schema dalam file Paimon berbeda dari schema tabel eksternal:
-
Ketidaksesuaian jumlah kolom: Jika file Paimon memiliki lebih sedikit kolom dibandingkan definisi DDL tabel eksternal, nilai kolom yang hilang diisi dengan NULL saat pembacaan. Jika kolomnya 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_0 -
Penyebab:
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 menjalankan query dan mengonsumsi data Paimon dari MaxCompute. Untuk informasi lebih lanjut, lihat Buat tabel eksternal Paimon MaxCompute berdasarkan Flink.