Hudi Catalog是一種External Catalog。通過Hudi Catalog,您不需要執行資料匯入就可以直接查詢Apache Hudi裡的資料。此外,您還可以基於Hudi Catalog ,結合INSERT INTO能力來實現資料轉換和匯入。StarRocks從2.4版本開始支援Hudi Catalog。
背景資訊
為確保StarRocks叢集能夠正常訪問Hudi內的資料,必須實現對Hudi集儲存系統和中繼資料服務的串連。目前,StarRocks支援下列儲存系統和中繼資料服務:
Distributed File System(HDFS)或阿里雲Object Storage Service。
中繼資料服務。當前支援的中繼資料服務包括資料湖構建(DLF)和Hive Metastore(以下簡稱HMS)。
使用限制
StarRocks查詢Hudi資料時,支援Parquet檔案格式。Parquet檔案支援SNAPPY、LZ4、ZSTD、GZIP和NO_COMPRESSION壓縮格式。
StarRocks完整支援了Hudi的Copy On Write(COW)表和Merge On Read(MOR)表。
建立Hudi Catalog
文法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hudi",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)參數說明
catalog_name:Hudi Catalog的名稱,必選參數。命名要求如下:必須由字母(a~z或A~Z)、數字(0~9)或底線(_)組成,且只能以字母開頭。
總長度不能超過64個字元。
comment:Hudi Catalog的描述。此參數為可選。type:資料來源的類型。設定為hudi。MetastoreParams:StarRocks訪問Hudi叢集中繼資料的相關參數配置。使用DLF
屬性
說明
hive.metastore.type
Hudi使用的中繼資料類型,設定為
dlf。dlf.catalog.id
DLF中已有的資料目錄ID。僅當
hive.metastore.type配置為dlf時需要填寫該參數。如果未配置dlf.catalog.id參數的值,則系統將使用預設的DLF Catalog。使用HMS
屬性
說明
hive.metastore.type
Hudi使用的中繼資料類型,設定為
hive。hive.metastore.uris
Hive MetaStore的URI。格式為
thrift://<Hive MetaStore的IP地址>:<連接埠號碼>,連接埠號碼預設為9083。
樣本
以下樣本建立了一個名為hudi_catalog的Hudi Catalog。
CREATE EXTERNAL CATALOG hudi_catalog
PROPERTIES
(
"type" = "hudi",
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);查看Hudi Catalog
您可以通過以下命令查詢當前所在StarRocks叢集裡所有Catalog。
SHOW CATALOGS;您也可以通過以下命令查詢某個External Catalog的建立語句。例如,通過如下命令查詢 Hudi Cataloghudi_catalog的建立語句。
SHOW CREATE CATALOG hudi_catalog;切換Hudi Catalog和資料庫
您可以通過如下方法切換至目標Hudi Catalog和資料庫:
先通過SET CATALOG指定當前會話生效的Hudi Catalog,然後再通過USE指定資料庫。
-- 切換當前會話生效的 Catalog: SET CATALOG <catalog_name>; -- 指定當前會話生效的資料庫: USE <db_name>;通過USE直接將會話切換到目標Hudi Catalog下的指定資料庫。
USE <catalog_name>.<db_name>;
刪除Hudi Catalog
您可以通過DROP CATALOG刪除某個External Catalog。
例如,通過以下命令刪除hudi_catalog。
DROP Catalog hudi_catalog;查看Hudi表結構
您可以通過如下方法查看Hudi表的表結構:
查看錶結構
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;從CREATE命令查看錶結構和表檔案存放位置
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
查看Hudi表資料
您可以通過SELECT查詢目標資料庫中的目標表。
SELECT * FROM <catalog_name>.<database_name>.<table_name>;匯入Hudi資料
假設有一個OLAP表,表名為olap_tbl。您可以這樣來轉換該表中的資料,並把資料匯入到StarRocks中。
INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hudi_table;手動或自動更新中繼資料快取
StarRocks預設會緩衝Hudi的中繼資料,並以非同步模式自動更新這些緩衝,以提升查詢效能。此外,在對Hudi表進行表結構變更或其他更新後,您可以使用 REFRESH EXTERNAL TABLE手動更新該表的中繼資料,以確保StarRocks能夠第一時間產生合理的查詢計劃。
REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]相關文檔
Hudi更多介紹,請參見Hudi概述。