Hudi Catalog
Hudi Catalog是一種External Catalog。通過(guò)Hudi Catalog,您不需要執(zhí)行數(shù)據(jù)導(dǎo)入就可以直接查詢Apache Hudi里的數(shù)據(jù)。此外,您還可以基于Hudi Catalog ,結(jié)合INSERT INTO能力來(lái)實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換和導(dǎo)入。StarRocks從2.4版本開(kāi)始支持Hudi Catalog。
背景信息
為確保StarRocks集群能夠正常訪問(wèn)Hudi內(nèi)的數(shù)據(jù),必須實(shí)現(xiàn)對(duì)Hudi集存儲(chǔ)系統(tǒng)和元數(shù)據(jù)服務(wù)的連接。目前,StarRocks支持下列存儲(chǔ)系統(tǒng)和元數(shù)據(jù)服務(wù):
分布式文件系統(tǒng)(HDFS)或阿里云對(duì)象存儲(chǔ)OSS。
元數(shù)據(jù)服務(wù)。當(dāng)前支持的元數(shù)據(jù)服務(wù)包括數(shù)據(jù)湖構(gòu)建(DLF)和Hive Metastore(以下簡(jiǎn)稱HMS)。
使用限制
StarRocks查詢Hudi數(shù)據(jù)時(shí),支持Parquet文件格式。Parquet文件支持SNAPPY、LZ4、ZSTD、GZIP和NO_COMPRESSION壓縮格式。
StarRocks完整支持了Hudi的Copy On Write(COW)表和Merge On Read(MOR)表。
創(chuàng)建Hudi Catalog
語(yǔ)法?
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hudi",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)
參數(shù)說(shuō)明
catalog_name
:Hudi Catalog的名稱,必選參數(shù)。命名要求如下:必須由字母(a~z或A~Z)、數(shù)字(0~9)或下劃線(_)組成,且只能以字母開(kāi)頭。
總長(zhǎng)度不能超過(guò)64個(gè)字符。
comment
:Hudi Catalog的描述。此參數(shù)為可選。type
:數(shù)據(jù)源的類型。設(shè)置為hudi
。MetastoreParams
:StarRocks訪問(wèn)Hudi集群元數(shù)據(jù)的相關(guān)參數(shù)配置。使用DLF
屬性
說(shuō)明
hive.metastore.type
Hudi使用的元數(shù)據(jù)類型,設(shè)置為
dlf
。dlf.catalog.id
DLF中已有的數(shù)據(jù)目錄ID。僅當(dāng)
hive.metastore.type
配置為dlf
時(shí)需要填寫(xiě)該參數(shù)。如果未配置dlf.catalog.id
參數(shù)的值,則系統(tǒng)將使用默認(rèn)的DLF Catalog。使用HMS
屬性
說(shuō)明
hive.metastore.type
Hudi使用的元數(shù)據(jù)類型,設(shè)置為
hive
。hive.metastore.uris
Hive MetaStore的URI。格式為
thrift://<Hive MetaStore的IP地址>:<端口號(hào)>
,端口號(hào)默認(rèn)為9083。
示例
以下示例創(chuàng)建了一個(gè)名為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?
您可以通過(guò)以下命令查詢當(dāng)前所在StarRocks集群里所有Catalog。
SHOW CATALOGS;
您也可以通過(guò)以下命令查詢某個(gè)External Catalog的創(chuàng)建語(yǔ)句。例如,通過(guò)如下命令查詢 Hudi Cataloghudi_catalog
的創(chuàng)建語(yǔ)句。
SHOW CREATE CATALOG hudi_catalog;
切換Hudi Catalog和數(shù)據(jù)庫(kù)?
您可以通過(guò)如下方法切換至目標(biāo)Hudi Catalog和數(shù)據(jù)庫(kù):
先通過(guò)SET CATALOG指定當(dāng)前會(huì)話生效的Hudi Catalog,然后再通過(guò)USE指定數(shù)據(jù)庫(kù)。
-- 切換當(dāng)前會(huì)話生效的 Catalog: SET CATALOG <catalog_name>; -- 指定當(dāng)前會(huì)話生效的數(shù)據(jù)庫(kù): USE <db_name>;
通過(guò)USE直接將會(huì)話切換到目標(biāo)Hudi Catalog下的指定數(shù)據(jù)庫(kù)。
USE <catalog_name>.<db_name>;
刪除Hudi Catalog?
您可以通過(guò)DROP CATALOG刪除某個(gè)External Catalog。
例如,通過(guò)以下命令刪除hudi_catalog
。
DROP Catalog hudi_catalog;
查看Hudi表結(jié)構(gòu)?
您可以通過(guò)如下方法查看Hudi表的表結(jié)構(gòu):
查看表結(jié)構(gòu)
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
從CREATE命令查看表結(jié)構(gòu)和表文件存放位置
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
查看Hudi表數(shù)據(jù)
您可以通過(guò)SELECT查詢目標(biāo)數(shù)據(jù)庫(kù)中的目標(biāo)表。
SELECT * FROM <catalog_name>.<database_name>.<table_name>;
導(dǎo)入Hudi數(shù)據(jù)?
假設(shè)有一個(gè)OLAP表,表名為olap_tbl
。您可以這樣來(lái)轉(zhuǎn)換該表中的數(shù)據(jù),并把數(shù)據(jù)導(dǎo)入到StarRocks中。
INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hudi_table;
手動(dòng)或自動(dòng)更新元數(shù)據(jù)緩存?
StarRocks默認(rèn)會(huì)緩存Hudi的元數(shù)據(jù),并以異步模式自動(dòng)更新這些緩存,以提升查詢性能。此外,在對(duì)Hudi表進(jìn)行表結(jié)構(gòu)變更或其他更新后,您可以使用 REFRESH EXTERNAL TABLE手動(dòng)更新該表的元數(shù)據(jù),以確保StarRocks能夠第一時(shí)間生成合理的查詢計(jì)劃。
REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]
相關(guān)文檔
Hudi更多介紹,請(qǐng)參見(jiàn)Hudi概述。