MaxCompute memungkinkan Anda membuat tabel eksternal Paimon untuk memetakan ke direktori tabel Paimon yang disimpan di Object Storage Service (OSS) dan mengakses datanya. Topik ini menjelaskan cara membuat serta mengakses tabel eksternal Paimon menggunakan MaxCompute.
Ikhtisar
Apache Paimon adalah format penyimpanan lakehouse untuk pemrosesan streaming maupun batch yang menyediakan penulisan ber-throughput tinggi dan kueri ber-latensi rendah. Format ini terintegrasi penuh dengan mesin komputasi umum seperti Spark, Hive, dan Trino, serta dengan Realtime Compute for Apache Flink dan E-MapReduce. Anda dapat menggunakan Apache Paimon untuk membangun data lake di OSS secara cepat dan menghubungkannya ke MaxCompute guna analitik data lake. Fitur penyaringan metadata lebih lanjut meningkatkan performa kueri dengan melewatkan file direktori OSS yang tidak diperlukan dalam pekerjaan baca.
Batasan
Batasan skema
Tabel eksternal Paimon tidak memperbarui skemanya secara otomatis untuk mencerminkan perubahan skema pada file Paimon yang mendasarinya.
Batasan properti tabel
Anda tidak dapat mengatur properti kluster pada tabel eksternal Paimon.
Anda tidak dapat menetapkan primary key.
Tabel eksternal Paimon tidak mendukung transmisi langsung properti tabel Paimon.
Operasi penulisan, pembaruan, dan kueri data
Anda dapat menggunakan pernyataan
INSERT INTOatauINSERT OVERWRITEuntuk menulis data ke tabel eksternal Paimon.Menulis data ke tabel bucket dinamis dan tabel lintas-partisi tidak didukung.
Operasi
UPDATEdanDELETEtidak didukung pada tabel eksternal Paimon.Kueri time-travel yang mengakses versi data historis tidak didukung untuk tabel eksternal Paimon.
Jangan menulis data langsung ke tabel eksternal Paimon. Sebagai gantinya, gunakan metode seperti UNLOAD untuk mengekspor data ke OSS.
MaxCompute dan OSS harus berada di wilayah yang sama.
Untuk informasi selengkapnya, lihat Tipe data yang didukung.
Buat tabel eksternal Paimon
Sintaks
Untuk detail sintaks pembuatan 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 selengkapnya tentang parameter umum, lihat Parameter sintaks dasar.
Menulis data
Untuk detail sintaks penulisan di MaxCompute, lihat Sintaks penulisan.
Kueri dan analisis data
Logika sharding (split) data untuk tabel Paimon berbeda dari tabel MaxCompute native. Format Paimon memiliki mekanisme internal sendiri untuk pengorganisasian file dan sharding, yang tidak sepenuhnya sejalan dengan parameter MaxCompute.
Untuk sintaks SELECT, lihat Sintaks kueri.
Untuk mengoptimalkan rencana kueri, lihat Optimasi kueri.
Untuk informasi selengkapnya tentang bad row skipping, lihat BadRowSkipping.
Contoh
Langkah 1: Prasyarat
Anda telah membuat proyek MaxCompute.
Anda telah menyiapkan bucket dan direktori OSS. Untuk informasi selengkapnya, lihat Buat bucket dan Kelola direktori.
Pastikan bucket Anda berada di wilayah yang sama dengan proyek MaxCompute Anda.
Berikan izin.
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.
Anda memiliki izin CreateTable di proyek MaxCompute. Untuk informasi selengkapnya tentang izin terkait tabel, lihat Izin MaxCompute.
Langkah 2: Siapkan data di Flink
Buat katalog Paimon dan tabel Paimon, lalu masukkan data ke dalam tabel tersebut.
Jika Anda sudah memiliki data tabel Paimon di OSS, Anda dapat melewati langkah ini.
Buat katalog filesystem Paimon
Masuk ke Konsol Real-time Compute for Apache Flink dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target, lalu di panel navigasi sebelah kiri, pilih Data Management.
Di halaman catalog list , klik Create Catalog . Di kotak dialog Create Catalog , pilih Apache Paimon, klik Next , lalu konfigurasikan parameter berikut:
Parameter
Wajib
Deskripsi
metastore
Ya
Jenis metastore. Dalam contoh ini, pilih
filesystem.catalog name
Ya
Nama katalog kustom, misalnya
paimon-catalog.warehouse
Ya
Direktori warehouse di OSS. Dalam contoh ini, direktorinya adalah
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Ya
Titik akhir layanan OSS. Misalnya, titik akhir untuk wilayah Tiongkok (Hangzhou) adalah
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Ya
ID AccessKey yang digunakan untuk mengakses OSS.
fs.oss.accessKeySecret
Ya
Rahasia AccessKey yang digunakan untuk mengakses OSS.
Buat tabel Paimon
Masuk ke Konsol Real-time Compute for Apache Flink dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target, lalu di panel navigasi kiri, pilih .
Di tab Query Script, klik
untuk membuat skrip kueri baru.Masukkan dan jalankan perintah berikut:
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');
Untuk pekerjaan SQL yang selesai secara otomatis, seperti yang menjalankan pernyataan
INSERT INTO ... VALUES ..., lakukan operasi berikut:Klik nama ruang kerja target. Di panel navigasi kiri, pilih .
Di halaman Deployments, klik pekerjaan target untuk membuka halaman deployment details.
Di bagian Parameters, klik Edit. Lalu, di bagian Other Configuration, atur
execution.checkpointing.checkpoints-after-tasks-finish.enabled: truedan simpan perubahan Anda.Untuk informasi selengkapnya tentang cara mengonfigurasi parameter waktu proses untuk pekerjaan, lihat Konfigurasi informasi penerapan pekerjaan.
Langkah 3: Buat tabel eksternal Paimon
Jalankan pernyataan 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>'
;Dalam pernyataan di atas, table_path adalah path ke tabel Paimon yang Anda buat di Flink, misalnya paimon-fs/paimon-test/default.db/test_tbl. Untuk menemukan path ini, lakukan langkah-langkah berikut:
Masuk ke Konsol Real-time Compute for Apache Flink dan pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target, lalu di panel navigasi sebelah kiri, pilih Data Management.
Di halaman Catalogs, di bawah katalog target, klik default. Di halaman default, temukan tabel target dan klik View di kolom Actions.
Di tab Table Schema, salin nilai parameter path dari bagian Properties. Untuk table_path, masukkan path tanpa awalan
oss://.
Langkah 4: Muat data partisi
Jika tabel eksternal OSS yang Anda buat adalah tabel partisi, Anda harus memuat partisinya. Untuk informasi selengkapnya, lihat Tabel eksternal OSS.
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;Langkah 5: Kueri tabel eksternal Paimon
Jalankan perintah berikut di MaxCompute untuk mengkueri 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';Hasil berikut dikembalikan:
+------------+------------+------------+
| 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 berisi lebih sedikit kolom daripada DDL tabel eksternal, MaxCompute membaca kolom yang hilang sebagai NULL. Jika file berisi lebih banyak kolom, MaxCompute mengabaikannya.
Ketidaksesuaian tipe kolom: Anda tidak dapat membaca data dari kolom STRING Paimon ke kolom INT MaxCompute. Membaca data dari kolom INT ke kolom STRING didukung tetapi tidak disarankan.
Tipe data yang didukung
Untuk informasi selengkapnya tentang tipe data MaxCompute, lihat Edisi tipe data 1.0 dan 2.0.
Tipe data Paimon | 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 saat ini 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) | Tipe numerik desimal eksak. Nilai default adalah
| |
VARCHAR(n) | VARCHAR(n) | Tipe karakter panjang variabel. n menentukan panjang dan berkisar antara 1 hingga 65.535. | |
CHAR(n) | CHAR(n) | Tipe karakter panjang tetap. n menentukan panjang dan berkisar antara 1 hingga 255. | |
VARCHAR(MAX_LENGTH) | STRING | Tipe string. Panjang maksimum saat ini adalah 8 MB. | |
DATE | DATE | Tipe tanggal. Formatnya adalah | |
TIME, TIME(p) | Tidak didukung | Tipe data TIME Paimon merepresentasikan waktu tanpa zona waktu, terdiri atas jam, menit, dan detik, dengan presisi nanodetik. TIME(p) menentukan presisi pecahan detik dari 0 hingga 9. Nilai default-nya adalah 0. Tidak ada tipe yang sesuai di MaxCompute. | |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ | Tipe timestamp tanpa zona waktu yang akurat hingga nanodetik. Untuk membaca tipe data ini, Anda harus menonaktifkan jembatan JNI native dengan menjalankan perintah berikut: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | Tipe timestamp yang akurat hingga nanodetik. Formatnya adalah | |
BOOLEAN | BOOLEAN | Tipe BOOLEAN. | |
ARRAY | ARRAY | Tipe kompleks. | |
MAP | MAP | Tipe kompleks. | |
ROW | STRUCT | Tipe kompleks. | |
MULTISET<t> | Tidak didukung | Tidak ada tipe yang sesuai di MaxCompute. | |
VARBINARY, VARBINARY(n), BYTES | BINARY | Tipe data string biner panjang variabel. |
Pemecahan masalah
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 Anda membaca kolom TIMESTAMP_NTZ dalam mode JNI.
Solusi:
Nonaktifkan jembatan JNI dengan menjalankan perintah berikut sebelum kueri Anda:
SET odps.sql.common.table.jni.disable.native=true;
Artikel terkait
Anda juga dapat menggunakan katalog Flink kustom untuk mengelola tabel eksternal Paimon MaxCompute. Hal ini memungkinkan Anda menulis data menggunakan Flink dan mengkuerinya di MaxCompute. Untuk informasi selengkapnya, lihat Buat tabel eksternal Paimon MaxCompute menggunakan Flink.