Anda dapat membuat tabel eksternal Paimon di MaxCompute untuk memetakan ke folder tabel Paimon di Object Storage Service (OSS) dan mengakses data dalam folder tersebut. Topik ini menjelaskan cara membuat tabel eksternal Paimon dan mengakses datanya menggunakan MaxCompute.
Pengenalan fungsi
Apache Paimon adalah format penyimpanan data lake yang mendukung pemrosesan streaming maupun batch, menyediakan penulisan ber-throughput tinggi dan kueri berlatensi rendah. Paimon terintegrasi penuh dengan mesin komputasi umum seperti Spark, Hive, dan Trino, yang tersedia dalam layanan seperti 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 mengoptimalkan performa kueri dengan mengurangi jumlah file yang dibaca dari folder OSS yang tidak diperlukan selama pemrosesan tugas.
Penerapan
Skema tabel eksternal Paimon tidak diperbarui secara otomatis untuk mencerminkan perubahan skema pada file Paimon.
Anda tidak dapat mengatur properti kluster atau primary key untuk tabel eksternal Paimon.
Tabel eksternal Paimon tidak mendukung fitur seperti kueri versi data historis.
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. Penulisan data ke tabel bucket dinamis atau tabel lintas partisi tidak didukung.
Operasi UPDATE dan DELETE tidak didukung untuk tabel eksternal Paimon.
MaxCompute dan OSS harus berada di wilayah yang sama.
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 Paimon open source | Tipe data MaxCompute V2.0 | Dukungan baca/tulis | Deskripsi |
TINYINT | TINYINT |
| Bilangan bulat bertanda 8-bit. |
SMALLINT | SMALLINT |
| Bilangan bulat bertanda 16-bit. |
INT | INT |
| Bilangan bulat bertanda 32-bit. |
BIGINT | BIGINT |
| Bilangan bulat 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 presisi tinggi. Nilai default adalah
|
VARCHAR(n) | VARCHAR(n) |
| Tipe karakter panjang variabel. n menunjukkan panjang, yang berkisar antara 1 hingga 65.535. |
CHAR(n) | CHAR(n) |
| Tipe karakter panjang tetap. n menunjukkan panjang, yang berkisar antara 1 hingga 255. |
VARCHAR(MAX_LENGTH) | STRING |
| Tipe string. Panjang maksimum adalah 8 MB. |
DATE | DATE |
| Tipe tanggal. Formatnya adalah |
TIME, TIME(p) | Not supported |
| Tipe data TIME Paimon adalah tipe waktu tanpa zona waktu. Terdiri atas jam, menit, dan detik, dengan presisi hingga nanodetik. TIME(p) menunjukkan presisi bagian pecahan, yang dapat berupa bilangan bulat dari 0 hingga 9. Nilai default-nya adalah 0. Tidak tersedia tipe yang sesuai di MaxCompute. |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ |
| Tipe timestamp tanpa zona waktu, dengan presisi hingga nanodetik. Untuk membaca tabel, aktifkan switch native: |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
|
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME |
| Tipe timestamp dengan presisi hingga nanodetik. Formatnya adalah |
BOOLEAN | BOOLEAN |
| Tipe BOOLEAN. |
ARRAY | ARRAY |
| Tipe kompleks. |
MAP | MAP |
| Tipe kompleks. |
ROW | STRUCT |
| Tipe kompleks. |
MULTISET<t> | Not supported |
| Tidak tersedia tipe yang sesuai di MaxCompute. |
VARBINARY, VARBINARY(n), BYTES | BINARY |
| Tipe data string biner panjang variabel. |
Buat tabel eksternal Paimon
Sintaks
Untuk informasi lebih lanjut tentang sintaks tabel eksternal dengan format berbeda, 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 sintaks dasar.
Menulis data
Untuk informasi lebih lanjut tentang sintaks penulisan MaxCompute, lihat Sintaks penulisan.
Kueri dan analisis
Untuk informasi lebih lanjut tentang sintaks SELECT, lihat Sintaks kueri.
Untuk informasi lebih lanjut tentang optimasi rencana kueri, lihat Optimasi kueri.
Untuk informasi lebih lanjut tentang BadRowSkipping, lihat BadRowSkipping.
Contoh
Langkah 1: Prasyarat
Anda telah membuat proyek MaxCompute.
Siapkan bucket dan folder OSS. Untuk informasi lebih lanjut, lihat Buat bucket dan Kelola folder.
MaxCompute hanya tersedia di beberapa wilayah. Untuk mencegah masalah konektivitas data, gunakan bucket OSS yang berada di wilayah yang sama dengan proyek MaxCompute Anda.
Otorisasi
Anda harus memiliki izin untuk mengakses OSS. Anda dapat menggunakan Akun Alibaba Cloud, Pengguna RAM, atau Peran RAM untuk mengakses tabel eksternal OSS. Untuk informasi lebih lanjut tentang otorisasi, lihat Otorisasi STS untuk OSS.
Anda harus memiliki izin `CreateTable` di proyek MaxCompute. Untuk informasi lebih lanjut 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 tersebut. Contoh berikut menunjukkan caranya.
Jika Anda sudah memiliki data tabel Paimon di OSS, Anda dapat melewati langkah ini.
Buat Katalog Filesystem Paimon
Masuk ke Konsol Flink, lalu 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 , lalu konfigurasikan parameter berikut:
Parameter
Wajib
Deskripsi
metastore
Wajib
Jenis metastore. Dalam contoh ini, pilih
filesystem.catalog name
Wajib
Nama katalog kustom. Misalnya,
paimon-catalog.warehouse
Wajib
Direktori gudang data yang ditentukan di OSS. Misalnya,
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Wajib
Titik akhir layanan OSS. Misalnya, titik akhir untuk wilayah Tiongkok (Hangzhou) adalah
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Wajib
ID AccessKey yang diperlukan untuk mengakses layanan OSS.
fs.oss.accessKeySecret
Wajib
Rahasia AccessKey yang diperlukan untuk mengakses layanan OSS.
Buat tabel Paimon
Masuk ke Konsol Flink, lalu pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target, lalu di panel navigasi sebelah kiri, pilih .
Pada tab New Script, Anda dapat mengklik
untuk membuat skrip kueri baru.Masukkan perintah berikut lalu 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 merupakan pekerjaan aliran bounded, misalnya pekerjaan yang mengeksekusi 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 informasi lebih lanjut tentang cara mengonfigurasi parameter waktu proses untuk pekerjaan, lihat Konfigurasi informasi penerapan pekerjaan.
Langkah 3: Buat tabel eksternal Paimon di MaxCompute
Di MaxCompute, jalankan pernyataan SQL berikut untuk membuat tabel eksternal Paimon MaxCompute.
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 pernyataan di atas, table_path adalah path ke tabel Paimon Anda di Flink, misalnya paimon-fs/paimon-test/default.db/test_tbl. Untuk mendapatkan path tersebut, lakukan langkah-langkah berikut:
Masuk ke Konsol Flink, lalu pilih wilayah di pojok kiri atas.
Klik nama ruang kerja target. Di panel navigasi sebelah kiri, pilih Catalogs .
Langkah 4: Impor data partisi
Jika tabel eksternal OSS yang Anda buat adalah 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 oss_extable_paimon_pt ADD PARTITIONS;Langkah 5: Baca tabel eksternal Paimon menggunakan MaxCompute
Di MaxCompute, jalankan pernyataan berikut untuk mengkueri tabel eksternal Paimon MaxCompute `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 tidak sesuai dengan skema tabel eksternal:
Jumlah kolom tidak sesuai: Jika file Paimon berisi lebih sedikit kolom daripada skema tabel eksternal, kolom yang hilang diisi dengan nilai NULL saat data dibaca. Jika file Paimon berisi lebih banyak kolom, data kolom tambahan akan dibuang.
Tipe kolom tidak sesuai: MaxCompute tidak mengizinkan Anda menggunakan tipe `INT` untuk membaca data `STRING` dari file Paimon. Anda dapat menggunakan tipe `STRING` untuk membaca data `INT`, tetapi praktik ini tidak disarankan.
FAQ
Mengapa terjadi error kSIGABRT saat saya membaca data dari 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 data tipe TIMESTAMP_NTZ menggunakan mode Java Native Interface (JNI).
Solusi:
Sebelum membaca data dari tabel, aktifkan switch native dengan menjalankan pernyataan berikut:
SET odps.sql.common.table.jni.disable.native=true;.
Referensi
Anda dapat membuat tabel eksternal Paimon MaxCompute di Flink menggunakan katalog kustom. Setelah data ditulis ke tabel tersebut, Anda dapat mengkueri dan mengonsumsi data Paimon menggunakan MaxCompute. Untuk informasi lebih lanjut, lihat Buat tabel eksternal Paimon MaxCompute menggunakan Flink.