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 |
|
ORC | ZLIB, SNAPPY, LZO, LZ4, ZSTD, dan NO_COMPRESSION |
|
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 keiceberg.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 keiceberg.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
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 keiceberg.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.typeYa
Jenis katalog. Untuk sumber data Iceberg, masukkan nilai tetap
iceberg.uriYa
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.typeYa
Jenis Iceberg Catalog. Untuk skenario DLF, masukkan nilai tetap
dlf_rest.warehouseYa
Nama Iceberg Catalog. Anda dapat memperolehnya dari halaman Data Catalog di Konsol Data Lake Formation.
rest.signing-regionYa
Region IDlayanan DLF, misalnyacn-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.
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
Prefixkehdfs.Jika Anda menggunakan Alibaba Cloud OSS sebagai sistem penyimpanan, atur
Prefixkeoss.
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 CATALOGuntuk 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.
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_definitionadalah sebagai berikut.col_name col_type [COMMENT 'comment']Parameter dijelaskan dalam tabel berikut.
Parameter
Deskripsi
col_nameNama kolom.
col_typeTipe 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.
CatatanNilai default untuk semua kolom non-kunci partisi adalah
NULL. Kolom kunci partisi harus dideklarasikan di akhir daftar kolom dan tidak boleh bernilaiNULL.partition_desc
Sintaks untuk
partition_descadalah sebagai berikut.PARTITION BY (par_col1[, par_col2...])Saat ini, StarRocks hanya mendukung identity transforms. Artinya, satu partisi dibuat untuk setiap nilai partisi unik.
CatatanKolom 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
PROPERTIESdengan 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 sesiconnector_sink_compression_codec.
Contoh
Buat tabel non-partisi
unpartition_tblyang berisi kolomiddanscore.CREATE TABLE unpartition_tbl ( id int, score double );Buat tabel partisi
partition_tbl_1yang berisi kolomaction,id, dandt, lalu definisikaniddandtsebagai 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_1dan buat tabel partisipartition_tbl_2berdasarkan hasil kueri. Definisikaniddandtsebagai kolom kunci partisi untukpartition_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.
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 }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 ( |
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 |
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_1dalam 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_1itu 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'danid=1di tabelpartition_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
actiondenganclosedi partisi dengandt='2023-09-01'danid=1di tabelpartition_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
Jalankan SHOW DATABASES untuk melihat database di kluster Iceberg yang termasuk dalam catalog yang ditentukan.
SHOW DATABASES FROM <catalog_name>;Beralih ke Iceberg catalog dan database target.
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.
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.