All Products
Search
Document Center

E-MapReduce:Iceberg Catalog

Last Updated:Nov 28, 2025

Iceberg Catalog adalah katalog eksternal yang didukung oleh StarRocks sejak versi 2.4.

Informasi latar belakang

Dengan Iceberg Catalog, Anda dapat:

  • Menjalankan kueri terhadap data di Iceberg secara langsung melalui Iceberg Catalog tanpa perlu membuat tabel secara manual.

  • Memproses, memodelkan, dan mengimpor data dari Iceberg ke StarRocks menggunakan INSERT INTO atau materialized view asinkron (tersedia mulai v2.5).

  • Membuat atau menghapus database dan tabel Iceberg dari StarRocks. Anda juga dapat menulis data dari tabel StarRocks ke tabel Iceberg berformat Parquet menggunakan INSERT INTO (tersedia mulai v3.1).

Untuk memastikan akses yang tepat ke data di Iceberg, kluster StarRocks Anda harus dapat mengakses sistem penyimpanan dan layanan metadata dari kluster Iceberg. Saat ini, StarRocks mendukung sistem penyimpanan dan layanan metadata berikut:

  • Hadoop Distributed File System (HDFS) atau Alibaba Cloud Object Storage Service (OSS).

  • Layanan metadata. Saat ini, layanan metadata yang didukung mencakup Hive Metastore (HMS) dan Data Lake Formation (DLF) 1.0 (Legacy).

Catatan penggunaan

Saat menjalankan kueri terhadap data Iceberg dari StarRocks, perhatikan hal-hal berikut.

Format file

Format kompresi

Versi tabel Iceberg

Parquet

SNAPPY, LZ4, ZSTD, GZIP, dan NO_COMPRESSION

  • Tabel v1: Didukung.

  • Tabel v2: Position deletes didukung mulai StarRocks v3.1. Equality deletes didukung mulai v3.1.10+, v3.2.5+, dan v3.3.

ORC

ZLIB, SNAPPY, LZO, LZ4, ZSTD, dan NO_COMPRESSION

  • Tabel v1: Didukung.

  • Tabel v2: Position deletes didukung mulai StarRocks v3.0. Equality deletes didukung mulai v3.1.8+, v3.2.3+, dan v3.3.

Buat Iceberg catalog

Sintaksis

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
    "type" = "iceberg",
    MetastoreParams
)

Parameter

Parameter bervariasi tergantung pada layanan metadata yang digunakan oleh Iceberg.

Gunakan HMS

  • catalog_name: Nama Iceberg catalog. Parameter ini wajib diisi. Nama harus memenuhi persyaratan berikut:

    • Harus terdiri dari huruf (a–z atau A–Z), angka (0–9), atau garis bawah (_), dan harus dimulai dengan huruf.

    • Panjang total tidak boleh melebihi 64 karakter.

    • Nama catalog bersifat case-sensitive.

  • comment: Deskripsi Iceberg catalog. Parameter ini opsional.

  • type: Jenis sumber data. Atur nilai ini ke iceberg.

  • MetastoreParams: Parameter untuk StarRocks mengakses layanan metadata kluster Iceberg.

    Properti

    Deskripsi

    iceberg.catalog.type

    Jenis catalog di Iceberg. Nilainya harus hive.

    hive.metastore.uris

    URI Hive Metastore. Formatnya adalah thrift://<ip_address_of_hive_metastore>:<port>. Port default adalah 9083.

Gunakan DLF 1.0 (Legacy)

  • catalog_name: Nama Iceberg catalog. Parameter ini wajib diisi. Nama harus memenuhi persyaratan berikut:

    • Harus terdiri dari huruf (a–z atau A–Z), angka (0–9), atau garis bawah (_), dan harus dimulai dengan huruf.

    • Panjang total tidak boleh melebihi 64 karakter.

    • Nama catalog bersifat case-sensitive.

  • comment: Deskripsi Iceberg catalog. Parameter ini opsional.

  • type: Jenis sumber data. Atur nilai ini ke iceberg.

  • MetastoreParams: Parameter untuk StarRocks mengakses layanan metadata kluster Iceberg.

    Properti

    Deskripsi

    iceberg.catalog.type

    Jenis catalog di Iceberg. Nilainya harus dlf.

    dlf.catalog.id

    ID katalog data yang sudah ada di DLF. Jika Anda tidak mengonfigurasi parameter dlf.catalog.id, sistem akan menggunakan katalog DLF default.

Gunakan DLF

Penting

Jika Anda menggunakan DLF, Anda harus menggunakan Pengguna Resource Access Management (RAM) yang telah dikonfigurasi untuk melakukan operasi di StarRocks Manager. Untuk informasi lebih lanjut, lihat Gunakan Katalog DLF.

  • catalog_name: Nama Iceberg Catalog. Parameter ini wajib diisi. Nama harus memenuhi persyaratan berikut:

    • Harus dimulai dengan huruf dan hanya boleh berisi huruf (a–z atau A–Z), angka (0–9), dan garis bawah (_).

    • Panjangnya tidak boleh melebihi 64 karakter.

  • comment: Deskripsi Iceberg Catalog. Parameter ini opsional.

  • type: Jenis sumber data. Atur nilai ini ke iceberg.

  • CatalogParams: Parameter untuk StarRocks mengakses metadata kluster Iceberg. Pengaturan parameter bervariasi tergantung pada jenis metadata yang digunakan oleh kluster Iceberg.

    Parameter

    Wajib

    Deskripsi

    <catalog_name>

    Ya

    Nama katalog data DLF, misalnya dlf_catalog.

    type

    Ya

    Jenis katalog. Untuk sumber data Iceberg, masukkan nilai tetap iceberg.

    uri

    Ya

    Alamat REST API DLF. Formatnya adalah http://<VPC_Endpoint>/iceberg. <VPC_Endpoint> adalah titik akhir VPC DLF di wilayah yang ditentukan. Untuk nilai spesifiknya, lihat Titik akhir layanan.
    Contoh: http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg.

    iceberg.catalog.type

    Ya

    Jenis Iceberg Catalog. Untuk skenario DLF, masukkan nilai tetap dlf_rest.

    warehouse

    Ya

    Nama Iceberg Catalog. Anda dapat memperolehnya dari halaman Data Catalog di Konsol Data Lake Formation.

    rest.signing-region

    Ya

    Region ID layanan DLF, misalnya cn-hangzhou.

Contoh

Contoh berikut membuat Iceberg catalog bernama iceberg_catalog_hms.

Gunakan HMS

CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
    "type" = "iceberg",
    "iceberg.catalog.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

Gunakan DLF 1.0 (Legacy)

CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
    "type" = "iceberg",
    "iceberg.catalog.type" = "dlf",
    "dlf.catalog.id" = "sr_dlf"
);

Gunakan DLF

CREATE EXTERNAL CATALOG iceberg_catalog
properties
( 
    "type" = "iceberg",
    "iceberg.catalog.type" = "dlf_rest",
    "uri" = "http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg",
    "warehouse" = "iceberg_test",
    "rest.signing-region" = "cn-hangzhou"
);

Lihat Iceberg catalog

Anda dapat menjalankan SHOW CATALOGS untuk melihat semua catalog di kluster StarRocks saat ini.

SHOW CATALOGS;

Anda juga dapat menjalankan SHOW CREATE CATALOG untuk melihat pernyataan pembuatan catalog eksternal. Misalnya, jalankan perintah berikut untuk melihat pernyataan pembuatan Iceberg catalog iceberg_catalog_hms.

SHOW CREATE CATALOG iceberg_catalog_hms;

Buat database Iceberg

Seperti catalog internal StarRocks, jika Anda memiliki izin CREATE DATABASE pada Iceberg catalog, Anda dapat menggunakan CREATE DATABASE untuk membuat database di dalam catalog tersebut. Fitur ini tersedia mulai v3.1.

Catatan

Anda dapat menggunakan pernyataan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.

Sintaks

Beralihlah ke Iceberg catalog target, lalu jalankan pernyataan berikut untuk membuat database Iceberg.

CREATE DATABASE <database_name>
[PROPERTIES ("location" = "<prefix>://<path_to_database>/<database_name.db>/")]

Parameter

Parameter location menentukan path file database. Parameter ini mendukung HDFS dan Alibaba Cloud OSS:

  • Jika Anda menggunakan HDFS sebagai sistem penyimpanan, atur Prefix ke hdfs.

  • Jika Anda menggunakan Alibaba Cloud OSS sebagai sistem penyimpanan, atur Prefix ke oss.

Catatan

Jika Anda tidak menentukan parameter location, StarRocks akan membuat database di path default Iceberg catalog saat ini.

Beralih antar Iceberg catalog dan database

Anda dapat beralih ke Iceberg catalog dan database target dengan cara berikut:

  • Pertama, gunakan SET CATALOG untuk menentukan Iceberg catalog untuk sesi saat ini, lalu gunakan USE untuk menentukan database.

    -- Beralih ke catalog aktif untuk sesi saat ini.
    SET CATALOG <catalog_name>;
    
    -- Tentukan database aktif untuk sesi saat ini.
    USE <db_name>;
  • Jalankan USE untuk langsung beralih sesi ke database tertentu di Iceberg catalog target.

    USE <catalog_name>.<db_name>;

Hapus database Iceberg

Seperti database internal StarRocks, jika Anda memiliki izin DROP pada database Iceberg, Anda dapat menggunakan DROP DATABASE untuk menghapusnya. Fitur ini tersedia mulai v3.1 dan hanya mendukung penghapusan database kosong.

Catatan

Anda dapat menggunakan pernyataan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.

Operasi penghapusan database tidak menghapus path file yang sesuai di HDFS atau OSS. Beralihlah ke Iceberg catalog target, lalu jalankan pernyataan berikut untuk menghapus database Iceberg.

DROP DATABASE <database_name>;

Hapus Iceberg catalog

Anda dapat menjalankan DROP CATALOG untuk menghapus catalog eksternal. Misalnya, jalankan perintah berikut untuk menghapus iceberg_catalog_hms.

DROP Catalog iceberg_catalog_hms;

Buat tabel Iceberg

Seperti database internal StarRocks, jika Anda memiliki izin CREATE TABLE pada database Iceberg, Anda dapat menggunakan CREATE TABLE atau CREATE TABLE AS SELECT (CTAS) untuk membuat tabel di dalam database tersebut. Fitur ini tersedia mulai v3.1. Beralihlah ke Iceberg catalog dan database target, lalu jalankan sintaks berikut untuk membuat tabel Iceberg.

Sintaksis

CREATE TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...
partition_column_definition1,partition_column_definition2...])
[partition_desc]
[PROPERTIES ("key" = "value", ...)]
[AS SELECT query]

Parameter

  • column_definition

    Sintaks untuk column_definition adalah sebagai berikut.

    col_name col_type [COMMENT 'comment']

    Parameter dijelaskan dalam tabel berikut.

    Parameter

    Deskripsi

    col_name

    Nama kolom.

    col_type

    Tipe data kolom.

    • Tipe data berikut saat ini didukung: TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, DATE, DATETIME, CHAR, VARCHAR[(length)], ARRAY, MAP, dan STRUCT.

    • Tipe LARGEINT, HLL, dan BITMAP tidak didukung.

    Catatan

    Nilai default untuk semua kolom non-kunci partisi adalah NULL. Kolom kunci partisi harus dideklarasikan di akhir daftar kolom dan tidak boleh bernilai NULL.

  • partition_desc

    Sintaks untuk partition_desc adalah sebagai berikut.

    PARTITION BY (par_col1[, par_col2...])

    Saat ini, StarRocks hanya mendukung identity transforms. Artinya, satu partisi dibuat untuk setiap nilai partisi unik.

    Catatan

    Kolom kunci partisi harus dideklarasikan di akhir daftar kolom. Kolom ini mendukung tipe data selain FLOAT, DOUBLE, DECIMAL, atau DATETIME. Nilai NULL tidak didukung.

  • PROPERTIES

    Anda dapat mendeklarasikan properti tabel Iceberg dalam klausa PROPERTIES dengan format "key"="value". Untuk informasi lebih lanjut, lihat properti tabel Iceberg. Tabel berikut mencantumkan beberapa properti umum.

    Properti

    Deskripsi

    location

    Path file tabel Iceberg. Saat Anda menggunakan HMS sebagai layanan metadata, Anda tidak perlu menentukan parameter location.

    file_format

    Format file tabel Iceberg. Saat ini, hanya format Parquet yang didukung. Default: parquet.

    compression_codec

    Format kompresi untuk tabel Iceberg. Format yang didukung adalah SNAPPY, GZIP, ZSTD, dan LZ4. Nilai default: gzip. Properti ini telah ditinggalkan sejak versi 3.2.3. Setelah versi ini, algoritma kompresi untuk penulisan ke tabel Iceberg dikontrol secara seragam oleh variabel sesi connector_sink_compression_codec.

Contoh

  • Buat tabel non-partisi unpartition_tbl yang berisi kolom id dan score.

    CREATE TABLE unpartition_tbl
    (
        id int,
        score double
    );
  • Buat tabel partisi partition_tbl_1 yang berisi kolom action, id, dan dt, lalu definisikan id dan dt sebagai kolom kunci partisi.

    CREATE TABLE partition_tbl_1
    (
        action varchar(20),
        id int NOT NULL,
        dt date NOT NULL
    )
    PARTITION BY (id,dt);
  • Jalankan kueri terhadap tabel sumber partition_tbl_1 dan buat tabel partisi partition_tbl_2 berdasarkan hasil kueri. Definisikan id dan dt sebagai kolom kunci partisi untuk partition_tbl_2.

    CREATE TABLE partition_tbl_2
    PARTITION BY (id, dt)
    AS SELECT * from partition_tbl_1;

Lihat skema tabel Iceberg

Anda dapat melihat skema tabel Iceberg dengan cara berikut.

  • Lihat skema tabel.

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
  • Lihat skema tabel dan lokasi penyimpanan file tabel dari perintah CREATE.

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;

Masukkan data ke tabel Iceberg

Seperti tabel internal StarRocks, jika Anda memiliki izin INSERT pada tabel Iceberg, Anda dapat menggunakan INSERT untuk menulis data dari tabel StarRocks ke tabel Iceberg tersebut. Saat ini, Anda hanya dapat menulis data ke tabel Iceberg berformat Parquet. Fitur ini tersedia mulai v3.1.

Catatan

Anda dapat menggunakan pernyataan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.

Beralihlah ke Iceberg catalog dan database target, lalu jalankan sintaks berikut untuk menulis data dari tabel StarRocks ke tabel Iceberg berformat Parquet.

Sintaks

INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

-- Tulis data ke partisi tertentu.
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
Catatan

Kolom kunci partisi tidak boleh bernilai NULL. Oleh karena itu, Anda harus memastikan kolom kunci partisi memiliki nilai selama pemuatan data.

Parameter

Parameter

Deskripsi

INTO

Menambahkan data ke tabel target.

OVERWRITE

Menimpa data di tabel target.

column_name

Kolom target untuk impor. Anda dapat menentukan satu atau beberapa kolom. Saat menentukan beberapa kolom, pisahkan dengan koma (,). Kolom yang ditentukan harus ada di tabel target dan harus mencakup kolom kunci partisi. Nama kolom yang ditentukan dapat berbeda dari nama di tabel sumber, tetapi urutannya harus sesuai dengan urutan kolom dalam hasil pernyataan pencarian. Jika Anda tidak menentukan parameter ini, data akan diimpor ke semua kolom tabel target secara default. Jika kolom non-kunci partisi dari tabel sumber tidak termasuk dalam daftar kolom target, nilai default NULL akan ditulis. Jika tipe data kolom hasil dalam pernyataan pencarian tidak sesuai dengan tipe data kolom target yang sesuai, konversi implisit akan dicoba. Jika konversi gagal, pernyataan INSERT INTO akan melaporkan error parsing sintaks.

expression

Ekspresi yang digunakan untuk memberikan nilai ke kolom yang sesuai.

DEFAULT

Memberikan nilai default ke kolom yang sesuai.

query

Pernyataan kueri. Hasil kueri dimuat ke tabel target. Pernyataan kueri mendukung sintaks kueri SQL apa pun yang didukung StarRocks.

PARTITION

Partisi target untuk pemuatan data. Anda harus menentukan semua kolom kunci partisi tabel target. Urutan kolom kunci partisi yang ditentukan dapat berbeda dari urutan yang didefinisikan saat tabel dibuat. Saat menentukan partisi, Anda tidak dapat menentukan kolom target untuk pemuatan data menggunakan column_name.

Contoh

Pernyataan penulisan berikut menggunakan format Parquet default sebagai contoh.

  • Masukkan tiga baris data berikut ke tabel partition_tbl_1.

    INSERT INTO partition_tbl_1
    VALUES
        ("buy", 1, "2023-09-01"),
        ("sell", 2, "2023-09-02"),
        ("buy", 3, "2023-09-03");
  • Masukkan data hasil kueri SELECT yang mencakup perhitungan sederhana ke tabel partition_tbl_1 dalam urutan kolom yang ditentukan.

    INSERT INTO partition_tbl_1 (id, action, dt) SELECT 1+1, 'buy', '2023-09-03';
  • Masukkan data hasil kueri SELECT yang membaca data dari tabel partition_tbl_1 itu sendiri.

    INSERT INTO partition_tbl_1 SELECT 'buy', 1, date_add(dt, INTERVAL 2 DAY) FROM partition_tbl_1
    WHERE id=1;
  • Masukkan data hasil kueri SELECT ke partisi dengan dt='2023-09-01' dan id=1 di tabel partition_tbl_2.

    • Metode 1

      INSERT INTO partition_tbl_2 SELECT 'order', 1, '2023-09-01';
    • Metode 2

      INSERT INTO partition_tbl_2 partition(dt='2023-09-01',id=1) SELECT 'order';
  • Timpa semua nilai di kolom action dengan close di partisi dengan dt='2023-09-01' dan id=1 di tabel partition_tbl_1:

    • Metode 1

      INSERT OVERWRITE partition_tbl_1 SELECT 'close', 1, '2023-09-01';
    • Metode 2

      INSERT OVERWRITE partition_tbl_1 partition(dt='2023-09-01',id=1) SELECT 'close';

Jalankan kueri terhadap data dari tabel Iceberg

  1. Jalankan SHOW DATABASES untuk melihat database di kluster Iceberg yang termasuk dalam catalog yang ditentukan.

    SHOW DATABASES FROM <catalog_name>;
  2. Beralih ke Iceberg catalog dan database target.

  3. Jalankan SELECT untuk menjalankan kueri terhadap tabel target di database target.

    SELECT count(*) FROM <table_name> LIMIT 10;

Hapus tabel Iceberg

Seperti tabel internal StarRocks, jika Anda memiliki izin DROP pada tabel Iceberg, Anda dapat menggunakan DROP TABLE untuk menghapusnya. Fitur ini tersedia mulai v3.1.

Catatan

Anda dapat menggunakan pernyataan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.

Operasi penghapusan tabel tidak menghapus path file dan data yang sesuai di HDFS atau OSS. Penghapusan paksa, yang dilakukan dengan menambahkan kata kunci FORCE, akan menghapus data di HDFS atau OSS tetapi tidak menghapus path file yang sesuai. Beralihlah ke Iceberg catalog dan database target, lalu jalankan pernyataan berikut untuk menghapus tabel Iceberg.

DROP TABLE <table_name> FORCE;

Referensi

Untuk informasi lebih lanjut tentang Iceberg, lihat Ikhtisar.