Hologres V3.2 dan versi lebih baru mendukung akses ke tabel Paimon yang dikelola oleh katalog Data Lake Formation (DLF). Petakan katalog DLF ke Database Eksternal atau server asing, lalu kueri, tulis, dan lakukan Time Travel pada tabel Paimon menggunakan SQL—tanpa memigrasikan data ke penyimpanan native Hologres.
Catatan penggunaan
Kemampuan berdasarkan versi:
Kemampuan | Versi minimum |
Baca tabel Paimon melalui Database Eksternal | V3.2 |
Time Travel, kueri cabang (branch), dan pencermatan data (data mirroring) | V3.2 |
Tabel Dinamis (refresh penuh, bertahap, dan otomatis) | V3.2 |
Tulis ke tabel primary key Paimon ( | V4.0 |
Baca data dari tag yang sesuai dengan snapshot kedaluwarsa | V3.2.6 / V4.0.6 |
Baca dan tulis data Blob Paimon (dipetakan ke tipe data | V4.2 |
Pengecualian utama:
Layanan DLF harus berada di wilayah yang sama dengan instans Hologres.
Time Travel, kueri cabang, dan pencermatan data hanya tersedia untuk tabel asing yang dipetakan melalui Database Eksternal—bukan untuk tabel asing yang dibuat melalui server asing.
Time Travel tidak didukung pada tabel dengan evolusi skema atau dalam kueri Tabel Dinamis.
Pencerminan data tidak mendukung tabel kunci utama Paimon.
Instans replika read-only tidak mendukung akselerasi data lake.
Penulisan ke tabel bucketing dinamis Paimon (dibuat dengan
bucket = -1atau tanpa parameterbucket) tidak didukung.TRUNCATEtidak didukung pada tabel asing. GunakanINSERT OVERWRITEdengan data kosong sebagai gantinya.UPDATEdanDELETEhanya didukung pada tabel primary key dengan Merge Enginededuplicateataupartial-update. Memperbarui kolom primary key tidak didukung.Untuk tabel
partial-update, aktifkan propertipartial-update.remove-record-on-deletesebelum menjalankanDELETE.Tabel asing tidak mendukung transaksi DML campuran. Hanya operasi DML tunggal yang menggunakan protokol komit dua fase untuk menjamin atomicity.
Data partisi default (nilai partisi kosong atau NULL) tidak dapat dibaca dari Paimon.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan layanan DLF V2.5 atau lebih baru dan membuat katalog DLF. Lihat Otorisasi dan aktifkan DLF dan Katalog data.
Untuk titik akhir layanan DLF, lihat Titik akhir layanan.
Memiliki instans Hologres dengan layanan akselerasi data lake diaktifkan. Lihat Beli instans Hologres dan Akselerasi data lake untuk akses OSS menggunakan DLF.
Hubungkan ke katalog DLF
Hologres mendukung dua pendekatan untuk menghubungkan ke katalog DLF:
Pendekatan | Paling cocok untuk |
Database Eksternal (direkomendasikan) | Sebagian besar kasus penggunaan. Mendukung Time Travel, kueri cabang, dan pencermatan data. Memerlukan V3.2+. |
Server asing (legacy) | Lingkungan DLF 1.0 atau beban kerja yang tidak memerlukan Time Travel. |
Gunakan Database Eksternal (direkomendasikan)
Database Eksternal memetakan katalog DLF ke Hologres sehingga Anda dapat mengkueri, mengelola, dan mencerminkan tabel Paimon. Fitur ini mendukung dua mode autentikasi:
Mode | Kapan digunakan |
Mode SLR (default) | Akses katalog dengan identitas Alibaba Cloud saat ini. Cocok untuk pengaturan satu akun. |
Mode STS | Akses lintas akun, atau ketika akun BASIC Hologres perlu mengakses katalog. |
Mode SLR
Peran terkait layanan (SLR) memungkinkan Hologres mengakses layanan Alibaba Cloud lain atas nama Anda menggunakan identitas saat ini. Untuk instans yang baru dibeli atau ditingkatkan ke V2.2 atau lebih baru, SLR dibuat secara otomatis.
Untuk instans yang menjalankan versi lebih lama dari V2.2, buat SLR secara manual di halaman Otorisasi Cepat RAM.
Hubungkan ke instans Hologres dan buat Database Eksternal.
Parameter
Wajib
Deskripsi
catalog_typeYa
Atur ke
paimon.metastore_typeYa
Atur ke
dlf-restuntuk DLF V2.5+.dlf_catalogYa
Nama katalog DLF yang akan dipetakan.
commentTidak
Deskripsi untuk Database Eksternal.
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon', metastore_type 'dlf-rest', dlf_catalog '<dlf_catalog_name>', comment 'dlf catalog';Daftar skema dan tabel dalam Database Eksternal.
-- Daftar skema SELECT * FROM hologres.hg_external_schemas('<ext_database_name>'); -- Daftar tabel dalam skema SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>');Kueri data tabel.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Mode STS
Layanan Token Keamanan (STS) mengeluarkan kredensial sementara dengan cakupan dan masa berlaku terbatas. Gunakan mode STS untuk akses lintas akun atau ketika akun BASIC perlu mengakses katalog.
Di Konsol RAM, buat peran RAM dan berikan izin
AliyunDLFFullAccessatauAliyunDLFReadOnlyAccess. Lihat Buat peran RAM dan berikan izin.Perbarui kebijakan kepercayaan peran RAM agar Hologres dapat mengasumsikannya. Lihat Ubah kebijakan kepercayaan peran RAM.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" }Di Konsol Pembentukan Danau Data, berikan akses peran RAM ke database dan tabel target dalam katalog DLF.
Buat Database Eksternal di Hologres, dengan menentukan peran RAM sebagai kebijakan autentikasi.
Parameter
Wajib
Deskripsi
catalog_typeYa
Atur ke
paimon.metastore_typeYa
Atur ke
dlf-restuntuk DLF V2.5+.dlf_catalogYa
Nama katalog DLF yang akan dipetakan.
rolearnYa
ARN peran RAM yang akan diasumsikan. Format:
acs:ram::<account_id>:role/<role_name>.commentTidak
Deskripsi untuk Database Eksternal.
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon', metastore_type 'dlf-rest', dlf_catalog '<dlf_catalog_name>', rolearn 'acs:ram::<account_id>:role/<role_name>', comment 'dlf catalog';Buat USER MAPPING untuk mengaitkan pengguna RAM atau akun BASIC dengan peran RAM.
- Untuk sintaks USER MAPPING, lihat CREATE USER MAPPING. - Untuk membuat pengguna RAM, lihat Buat pengguna RAM. - Untuk membuat akun BASIC, lihat Manajemen pengguna.
CREATE USER MAPPING FOR "<ram_user_or_basic_account>" EXTERNAL DATABASE <ext_database_name> OPTIONS ( rolearn 'acs:ram::<account_id>:role/<role_name>' );Login ke Konsol Hologres sebagai pengguna RAM, atau sambungkan ulang ke instans Hologres sebagai akun BASIC, lalu jalankan kueri.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Operasi tambahan:
Database Eksternal: DATABASE EKSTERNAL
Skema Eksternal: SKEMA EKSTERNAL
Tabel Eksternal: TABEL EKSTERNAL
Gunakan server asing (legacy)
Pendekatan server asing tidak mendukung Time Travel, kueri cabang, atau pencermatan data. Gunakan Database Eksternal untuk fitur-fitur tersebut.
Langkah 1: Buat foreign server.
Untuk DLF V2.5 dan versi lebih baru:
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
catalog_type 'paimon',
metastore_type 'dlf-rest',
dlf_catalog '<dlf_catalog_name>'
);Parameter | Wajib | Deskripsi |
| Ya | Atur ke |
| Ya | Atur ke |
| Ya | Nama katalog DLF yang akan dipetakan. |
Untuk DLF V1.0:
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region '',
dlf_endpoint 'dlf-share.<region>.aliyuncs.com',
oss_endpoint 'oss-<region_id>-internal.aliyuncs.com',
dlf_catalog '<dlf_catalog_name>'
);Parameter | Wajib | Deskripsi |
| Ya | ID wilayah layanan DLF. |
| Ya | Titik akhir layanan DLF. Format: |
| Ya | Titik akhir internal OSS. Format: |
| Ya | Nama katalog DLF yang akan dipetakan. |
Untuk operasi server asing lainnya, lihat Operasi server asing tambahan.
Langkah 2: Buat tabel asing.
Gunakan IMPORT FOREIGN SCHEMA untuk mengimpor semua tabel dalam database DLF:
-- Impor semua tabel
IMPORT FOREIGN SCHEMA <dlf_db_name>
FROM SERVER <server_name>
INTO <holo_schema_name>
OPTIONS (if_table_exist 'update');
-- Impor tabel tertentu
IMPORT FOREIGN SCHEMA <dlf_db_name>
LIMIT TO (<table_name>[, ...])
FROM SERVER <server_name>
INTO <holo_schema_name>
OPTIONS (if_table_exist 'update');Atau buat satu tabel asing dengan CREATE FOREIGN TABLE:
CREATE FOREIGN TABLE <foreign_table_name>
(
<column_name> <data_type>
[, ...]
)
SERVER <server_name>
OPTIONS
(
schema_name '<dlf_db_name>',
table_name '<dlf_table_name>'
);Untuk detail sintaks, lihat IMPORT FOREIGN SCHEMA dan CREATE FOREIGN TABLE.
Baca data Paimon
Kumpulkan statistik untuk optimasi kueri
Jalankan ANALYZE atau AUTO ANALYZE untuk mengumpulkan statistik tabel. Pengoptimal kueri menggunakan statistik ini untuk menyusun rencana kueri optimal.
-- Kumpulkan statistik untuk semua kolom
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Kumpulkan statistik untuk kolom tertentu (lebih akurat; gunakan untuk kolom filter)
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>(<col_name>[, <col_name>]);
-- Aktifkan AUTO ANALYZE untuk Database Eksternal
ALTER EXTERNAL DATABASE <ext_database_name> WITH enable_auto_analyze 'true';Untuk detail selengkapnya, lihat ANALYZE dan AUTO ANALYZE.
Kueri dengan Time Travel
Hologres V3.2 dan versi lebih baru mendukung pengkuerian snapshot historis tabel Paimon berdasarkan timestamp, versi (ID snapshot), atau tag.
Time Travel hanya didukung untuk tabel asing yang dipetakan melalui Database Eksternal. Fitur ini tidak didukung pada tabel dengan evolusi skema atau dalam kueri Tabel Dinamis.
Daftar snapshot yang tersedia:
SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>');Tabel snapshot mengembalikan bidang-bidang berikut:
Bidang | Tipe | Deskripsi |
| TEXT | Nama cabang |
| TEXT | ID Snapshot |
| TEXT | ID Skema |
| TEXT | Jenis commit |
| TIMESTAMPTZ | Waktu commit |
| TEXT (JSON) | Properti snapshot Paimon lainnya |
Anda juga dapat mengkueri tabel sistem Snapshot Paimon menggunakan fungsi hg_list_versions. Untuk tabel Paimon, Versi sesuai dengan ID Snapshot.
SELECT * FROM hologres.hg_list_versions('<ext_database_name>.<ext_schema_name>.<ext_table_name>');Daftar tag yang tersedia:
SELECT * FROM hologres.hg_list_tags('<ext_database_name>.<ext_schema_name>.<ext_table_name>');Bidang | Tipe | Deskripsi |
| TEXT | Nama cabang |
| TEXT | Nama tag |
| TEXT | ID Snapshot |
| TEXT | ID Skema |
| TIMESTAMPTZ | Waktu commit |
| TEXT (JSON) | Properti tag Paimon lainnya |
Kueri berdasarkan timestamp:
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>
FOR TIMESTAMP AS OF '<timestamp>';Kueri berdasarkan versi (ID snapshot):
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR VERSION AS OF '<version>';Kueri berdasarkan tag:
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR TAG AS OF '<tag>';Hologres V3.2.6 dan V4.0.6 serta versi lebih baru mendukung pembacaan data dari tag yang sesuai dengan snapshot Paimon kedaluwarsa.
Untuk informasi selengkapnya tentang tabel sistem Paimon, lihat tabel sistem Paimon.
Kueri cabang Paimon
Hologres V3.2 dan versi lebih baru mendukung pengkuerian data dari cabang Paimon tertentu dan pengkuerian snapshot historis dalam suatu cabang.
Daftar cabang yang tersedia:
SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');Bidang | Tipe | Deskripsi |
| TEXT | Nama cabang |
| TIMESTAMPTZ | Waktu pembuatan cabang |
| TEXT (JSON) | Properti cabang Paimon lainnya |
Kueri data terkini suatu cabang:
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>';Jika scan.fallback-branch diatur pada tabel Paimon, Hologres secara otomatis membaca partisi yang hilang dari cabang fallback. Lihat Kelola cabang.Kueri snapshot historis dalam suatu cabang:
-- Berdasarkan timestamp
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>' TIMESTAMP AS OF '<timestamp>';
-- Berdasarkan tag
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>' TAG AS '<tag_name>';Mempercepat kueri dengan pencerminan tabel lake
Hologres V3.2 dan versi lebih baru mendukung pencermatan tabel lake, yang menyinkronkan metadata dan data tabel Paimon ke Hologres secara near-real-time atau pada interval terjadwal. Data yang dicerminkan disajikan dari penyimpanan Hologres, sehingga mengurangi latensi kueri secara signifikan. Pencermatan penuh maupun parsial untuk tabel terpartisi didukung.
Pencermatan tabel lake tidak mendukung tabel primary key Paimon.
Untuk detail penyiapan, lihat Lake table mirroring.
Gunakan Tabel Dinamis untuk refresh berkelanjutan
Tabel Dinamis secara otomatis memproses dan menyimpan hasil agregat dari satu atau beberapa tabel asing Paimon, dengan strategi refresh bawaan. Mulai dari V3.0, tabel asing MaxCompute dan tabel asing DLF didukung sebagai tabel dasar untuk Tabel Dinamis.
Tabel Dinamis tidak mendukung kueri Time Travel pada tabel atau cabang Paimon.
Refresh penuh — mengganti semua data pada setiap siklus refresh:
CREATE DYNAMIC TABLE paimon_dt_table
WITH (
auto_refresh_mode = 'full',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;Refresh bertahap — hanya memproses data baru atau yang berubah:
CREATE DYNAMIC TABLE paimon_dt_table_incremental
WITH (
auto_refresh_mode = 'incremental',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;Refresh otomatis — secara otomatis memilih refresh penuh atau bertahap berdasarkan perubahan data:
CREATE DYNAMIC TABLE paimon_dt_table_auto
WITH (
auto_refresh_mode = 'auto',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;Untuk detail selengkapnya, lihat Ikhtisar Tabel Dinamis.
Tulis ke tabel Paimon
Hologres V4.0 dan versi lebih baru mendukung penulisan ke tabel primary key Paimon melalui Database Eksternal. Proses penulisan melakukan shuffle data berdasarkan bucket sebelum menulis untuk mengurangi pembuatan file kecil. Mekanisme caching berbasis memori mendukung tabel yang memerlukan caching, termasuk:
Tabel dengan
Merge Enginediatur keFirst RowTabel yang menghasilkan Changelog melalui mekanisme
lookupTabel dengan
Deletion Vectordiaktifkan
INSERT INTO
Contoh berikut membuat tabel primary key Paimon dan menyisipkan baris.
-- Buat tabel primary key Paimon
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name> (
id BIGINT,
customer_id BIGINT,
item TEXT,
amount FLOAT,
dt TEXT,
PRIMARY KEY (id)
)
WITH (
"table_format" = 'paimon',
"file_format" = 'orc',
"merge-engine" = 'deduplicate', -- Sesuaikan jika diperlukan
"bucket" = '4' -- Sesuaikan jika diperlukan
);
-- Sisipkan baris
INSERT INTO <ext_database_name>.<ext_schema_name>.<ext_table_name>
(id, customer_id, item, amount, dt)
VALUES
(1, 1001, 'apple', 3.50, '2025-09-10'),
(2, 1002, 'banana', 2.00, '2025-09-10'),
(3, 1003, 'orange', 4.20, '2025-09-11');INSERT OVERWRITE
Contoh berikut membuat tabel append-only Paimon terpartisi dan menimpa partisi.
-- Buat tabel append-only Paimon terpartisi
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name> (
id BIGINT,
name TEXT,
amount FLOAT8,
dt TEXT
)
LOGICAL PARTITION BY LIST(dt)
WITH (
"table_format" = 'paimon',
"file_format" = 'parquet',
"merge-engine" = 'deduplicate',
"bucket-key" = 'id',
"bucket" = '2'
);
-- Timpa data
INSERT OVERWRITE <ext_database_name>.<ext_schema_name>.<ext_table_name>
(id, name, amount, dt)
VALUES
(1, 'Alice', 100.50, '2025-09-01'),
(2, 'Bob', 200.00, '2025-09-01'),
(3, 'Carol', 150.75, '2025-09-02');UPDATE
UPDATE hanya didukung pada tabel primary key Paimon dengan Merge Engine deduplicate atau partial-update. Memperbarui kolom primary key tidak didukung.
UPDATE <ext_database_name>.<ext_schema_name>.<ext_table_name>
SET amount = 5
WHERE id = 1;DELETE
DELETE hanya didukung pada tabel primary key Paimon dengan Merge Engine deduplicate atau partial-update. Untuk tabel partial-update, aktifkan properti partial-update.remove-record-on-delete sebelum menjalankan DELETE.
DELETE FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>
WHERE id = 2;