Unified Catalog是一種External Catalog,自3.2版本起支援。通過Unified Catalog,您可以將多個資料湖資料來源作為一個融合的資料來源,直接操作其中各種類型的表資料。
背景資訊
通過Unified Catalog,您可以把Apache Paimon、Apache Hive™、Apache Iceberg、Apache Hudi、Apache Kudu和Delta Lake資料來源作為一個融合的資料來源,不需要執行匯入就可以直接操作其中的表資料,包括:
無需手動建表,通過Unified Catalog直接查詢Paimon、Hive、Iceberg、Hudi、Kudu和Delta Lake資料來源裡的資料。
通過INSERT INTO或非同步物化視圖(2.5版本及以上)將Hive、Iceberg、Hudi、Delta Lake和Kudu資料來源裡的資料進行加工建模,並匯入至StarRocks。
在StarRocks側建立或刪除Hive、Iceberg庫表。
為保證正常訪問融合資料來源內的資料,StarRocks叢集必須能夠訪問融合資料來源的儲存系統和中繼資料服務。目前 StarRocks 支援以下儲存系統和中繼資料服務:
Distributed File System(HDFS)或阿里雲Object Storage Service。
中繼資料服務。當前支援的中繼資料服務包括:資料湖構建(DLF)、Hive Metastore(以下簡稱HMS)。
使用限制
一個Unified Catalog當前只支援對接一個中繼資料服務。因此,您需要確保通過Unified Catalog訪問的所有資料來源都使用同一個中繼資料服務。
當中繼資料類型是
hive時,Unified Catalog支援訪問Apache Paimon、Apache Hive、Apache Iceberg、Apache Hudi、Apache Kudu和Delta Lake資料來源的資料。您還需確保Serverless StarRocks叢集能夠正常訪問您所使用的Hive叢集。當中繼資料類型是
dlf時,Unified Catalog支援訪問Apache Paimon、Apache Hive、Apache Iceberg、Apache Hudi和Delta Lake資料來源的資料。
當Unified Catalog訪問Apache Paimon資料來源的中繼資料類型為
dlf時,StarRocks版本必須為3.2.8及以上。當Unified Catalog訪問Apache Iceberg資料來源的中繼資料類型為
dlf時,StarRocks版本必須為3.2.9及以上。
建立Unified Catalog
文法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "unified",
MetastoreParams
)參數說明
catalog_name:Unified Catalog的名稱,必選參數。命名要求如下:必須由字母(a~z或A~Z)、數字(0~9)或底線(_)組成,並且只能以字母開頭。
總長度不能超過64個字元。
comment:Unified Catalog的描述。此參數為可選。type:資料來源的類型。設定為unified。MetastoreParams:StarRocks訪問中繼資料服務的相關參數配置。使用的中繼資料類型不同,參數的配置也不同。使用DLF
屬性
是否必須
說明
unified.metastore.type
是
資料來源類型,取值為
dlf。dlf.catalog.id
是
DLF中已有的資料目錄ID。僅當
hive.metastore.type配置為dlf時需要填寫該參數。如果未配置dlf.catalog.id參數的值,則系統將使用預設的DLF Catalog。paimon.catalog.warehouse
否
當使用Paimon資料來源時填寫。
Paimon資料所在的Warehouse儲存路徑,支援HDFS、OSS和OSS-HDFS。OSS或OSS-HDFS格式為:
oss://<yourBucketName>/<yourPath>。重要若使用OSS或OSS-HDFS作為warehouse,須配置參數aliyun.oss.endpoint。詳情請參見StorageCredentialParams:StarRocks訪問Paimon叢集檔案儲存體的相關參數配置。
使用Hive MetaStore
參數
是否必須
說明
unified.metastore.type
是
中繼資料服務的類型。設定為
hive。hive.metastore.uris
是
HMS的URI。格式為
thrift://<HMS IP地址>:<連接埠號碼>,連接埠號碼預設為9083。如果您的HMS開啟了高可用模式,此處可以填寫多個HMS地址並用逗號分隔,例如:
"thrift://<HMS IP地址1>:<HMS連接埠號碼 1>,thrift://<HMS IP地址2>:<HMS 連接埠號碼2>,thrift://<HMS IP地址3>:<HMS連接埠號碼3>"。
樣本
以下樣本建立了一個名為unified_catalog的Unified Catalog,用於查詢融合資料來源裡的表資料。
中繼資料類型
unified.metastore.type為dlf。CREATE EXTERNAL CATALOG unified_catalog PROPERTIES ( "type"="unified", "unified.metastore.type"="dlf", "paimon.catalog.warehouse"="oss://<YourBucketName>/<YourPath>/", "dlf.catalog.id" = "unified_dlf_test" );中繼資料類型
unified.metastore.type為hive,使用HDFS作為儲存。CREATE EXTERNAL CATALOG unified_catalog PROPERTIES ( "type" = "unified", "unified.metastore.type" = "hive", "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083" );
查看Unified Catalog
您可以通過SHOW CATALOGS查詢當前所在StarRocks叢集裡所有Catalog。
SHOW CATALOGS;您也可以通過SHOW CREATE CATALOG查詢某個External Catalog的建立語句。
SHOW CREATE CATALOG unified_catalog;
切換Unified Catalog和資料庫
您可以通過如下方法切換至目標Unified Catalog和資料庫。
先通過SET CATALOG指定當前會話生效的Unified Catalog,然後再通過USE指定資料庫。
-- 切換當前會話生效的 Catalog SET CATALOG <catalog_name> -- 指定當前會話生效的資料庫 USE <db_name>通過USE直接將會話切換到目標Unified Catalog下的指定資料庫。
USE <catalog_name>.<db_name>
刪除Unified Catalog
您可以通過DROP CATALOG刪除某個External Catalog。
例如,通過如下命令刪除Unified Catalogunified_catalog。
DROP CATALOG unified_catalog;查看Unified Catalog內的表結構
您可以通過如下方法查看Hive表的表結構:
查看錶結構
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;從CREATE命令查看錶結構和表檔案存放位置
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
查詢Unified Catalog內的表資料
您可以通過如下操作查詢Unified Catalog內的表資料。
通過SHOW DATABASES查看指定 Unified Catalog 所屬的資料來源中的資料庫。
SHOW DATABASES FROM <catalog_name>;通過SELECT查詢目標資料庫中的目標表。
SELECT count(*) FROM <table_name> LIMIT 10;
您也可以通過SELECT查詢目標資料庫中的目標表。
SELECT * FROM <catalog_name>.<database_name>.<table_name>;
從Hive、Iceberg、Hudi、Delta Lake或Kudu匯入資料
您可以通過INSERT INTO將 Hive、Iceberg、Hudi、Delta Lake或Kudu表中的資料匯入StarRocks中Unified Catalog下的表。
例如,通過如下命令將Hive表hive_table的資料匯入到StarRocks中Unified Catalogunified_catalog下資料庫test_database裡的表test_table。
INSERT INTO unified_catalog.test_database.test_table SELECT * FROM hive_table;在Unified Catalog內建立資料庫
同StarRocks內部資料目錄(Internal Catalog)一致,如果您擁有Unified Catalog的CREATE DATABASE許可權,那麼您可以使用CREATE DATABASE在該Unified Catalog內建立資料庫。
切換至目標Unified Catalog,然後通過如下語句建立資料庫。
CREATE DATABASE <database_name>
[properties ("location" = "<prefix>://<path_to_database>/<database_name.db>")]如果您在建立資料庫時不指定location,那麼系統會使用預設的<warehouse_location>/<database_name.db>作為檔案路徑。
location:用於指定資料庫所在的檔案路徑,支援HDFS、阿里雲OSS或OSS-HDFS。其中,prefix根據儲存系統的不同而不同。
HDFS:取值為
hdfs。阿里雲OSS或OSS-HDFS:取值為
oss。
從Unified Catalog內刪除資料庫
同StarRocks內部資料庫一致,如果您擁有Unified Catalog內資料庫的DROP許可權,那麼您可以使用DROP DATABASE來刪除該資料庫。僅支援刪除空資料庫。
切換至目標Unified Catalog,然後通過如下語句刪除資料庫。
DROP DATABASE <database_name>;在Unified Catalog內建立表
同StarRocks內部資料庫一致,如果您擁有Unified Catalog內資料庫的CREATE TABLE許可權,那麼您可以使用CREATE TABLE或CREATE TABLE AS SELECT (CTAS)在該資料庫下建立表。
切換至目標Unified Catalog和資料庫,然後通過CREATE TABLE建立Hive表或Iceberg表。
CREATE TABLE <table_name>
(column_definition1[, column_definition2, ...]
ENGINE = {|hive|iceberg}
[partition_desc]有關建立Hive表和Iceberg表的詳細資料,請參見建立Hive表和建立Iceberg表。
例如,通過如下語句,建立一張Hive表hive_table。
CREATE TABLE hive_table
(
action varchar(65533),
id int,
dt date
)
ENGINE = hive
PARTITION BY (id,dt);向Unified Catalog內的表中插入資料
同StarRocks內表一致,如果您擁有Unified Catalog內表的INSERT許可權,那麼您可以使用INSERT將StarRocks表資料寫入到該表(當前僅支援寫入到Parquet格式的Unified Catalog表)。
切換至目標Unified Catalog和資料庫,然後通過INSERT INTO向Hive表或Iceberg表中插入資料。
INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
-- 向指定分區寫入資料。
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }有關向Hive表和Iceberg表中插入資料的詳細資料,請參見向Hive表中插入資料和向Iceberg表中插入資料。
例如,通過如下語句,向Hive表hive_table中寫入如下資料。
INSERT INTO hive_table
VALUES
("buy", 1, "2023-09-01"),
("sell", 2, "2023-09-02"),
("buy", 3, "2023-09-03");從Unified Catalog內刪除表
同StarRocks內表一致,如果您擁有Unified Catalog內表的DROP許可權,那麼您可以使用DROP TABLE來刪除該表。
切換至目標Unified Catalog和資料庫,然後通過DROP TABLE刪除Hive表或Iceberg表。
DROP TABLE <table_name>;例如,通過如下語句,刪除Hive表hive_table。
DROP TABLE hive_table FORCE;