Hudi Catalog是一种External Catalog。通过Hudi Catalog,您不需要执行数据导入就可以直接查询Apache Hudi里的数据。此外,您还可以基于Hudi Catalog ,结合INSERT INTO能力来实现数据转换和导入。StarRocks从2.4版本开始支持Hudi Catalog。
背景信息
为确保StarRocks集群能够正常访问Hudi内的数据,必须实现对Hudi集存储系统和元数据服务的连接。目前,StarRocks支持下列存储系统和元数据服务:
分布式文件系统(HDFS)或阿里云对象存储OSS。
元数据服务。当前支持的元数据服务包括数据湖构建(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概述。