Hudi Catalog

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