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概述。