All Products
Search
Document Center

Hologres:Mengakses data Paimon dengan Katalog DLF

Last Updated:Jun 04, 2026

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 (INSERT INTO, INSERT OVERWRITE, UPDATE, DELETE)

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 BYTES di Hologres)

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 = -1 atau tanpa parameter bucket) tidak didukung.

  • TRUNCATE tidak didukung pada tabel asing. Gunakan INSERT OVERWRITE dengan data kosong sebagai gantinya.

  • UPDATE dan DELETE hanya didukung pada tabel primary key dengan Merge Engine deduplicate atau partial-update. Memperbarui kolom primary key tidak didukung.

  • Untuk tabel partial-update, aktifkan properti partial-update.remove-record-on-delete sebelum menjalankan DELETE.

  • 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:

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.
  1. Hubungkan ke instans Hologres dan buat Database Eksternal.

    Parameter

    Wajib

    Deskripsi

    catalog_type

    Ya

    Atur ke paimon.

    metastore_type

    Ya

    Atur ke dlf-rest untuk DLF V2.5+.

    dlf_catalog

    Ya

    Nama katalog DLF yang akan dipetakan.

    comment

    Tidak

    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';
  2. 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>');
  3. 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.

  1. Di Konsol RAM, buat peran RAM dan berikan izin AliyunDLFFullAccess atau AliyunDLFReadOnlyAccess. Lihat Buat peran RAM dan berikan izin.

  2. 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"
       }
  3. Di Konsol Pembentukan Danau Data, berikan akses peran RAM ke database dan tabel target dalam katalog DLF.

  4. Buat Database Eksternal di Hologres, dengan menentukan peran RAM sebagai kebijakan autentikasi.

    Parameter

    Wajib

    Deskripsi

    catalog_type

    Ya

    Atur ke paimon.

    metastore_type

    Ya

    Atur ke dlf-rest untuk DLF V2.5+.

    dlf_catalog

    Ya

    Nama katalog DLF yang akan dipetakan.

    rolearn

    Ya

    ARN peran RAM yang akan diasumsikan. Format: acs:ram::<account_id>:role/<role_name>.

    comment

    Tidak

    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';
  5. 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>'
       );
  6. 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:

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

catalog_type

Ya

Atur ke paimon.

metastore_type

Ya

Atur ke dlf-rest untuk DLF V2.5+.

dlf_catalog

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

dlf_region

Ya

ID wilayah layanan DLF.

dlf_endpoint

Ya

Titik akhir layanan DLF. Format: dlf-share.<region>.aliyuncs.com.

oss_endpoint

Ya

Titik akhir internal OSS. Format: oss-<region_id>-internal.aliyuncs.com.

dlf_catalog

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.

Penting

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

branch_name

TEXT

Nama cabang

snapshot_id

TEXT

ID Snapshot

schema_id

TEXT

ID Skema

commit_kind

TEXT

Jenis commit

commit_time

TIMESTAMPTZ

Waktu commit

extend_info

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

branch_name

TEXT

Nama cabang

tag_name

TEXT

Nama tag

snapshot_id

TEXT

ID Snapshot

schema_id

TEXT

ID Skema

commit_time

TIMESTAMPTZ

Waktu commit

extend_info

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

branch_name

TEXT

Nama cabang

create_time

TIMESTAMPTZ

Waktu pembuatan cabang

extend_info

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.

Penting

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.

Penting

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 Engine diatur ke First Row

  • Tabel yang menghasilkan Changelog melalui mekanisme lookup

  • Tabel dengan Deletion Vector diaktifkan

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;

Langkah selanjutnya