StarRocks数据存储之Catalog

124 阅读3分钟

1、Catalog(数据目录)

Catalog是StarRocks的元数据管理组件,主要用于组织数据库对象和连接外部数据源。其核心功能包括维护表、索引、视图等元数据信息,并通过统一接口实现跨数据源查询。StarRocks自2.3版本起支持Catalog(数据目录)功能。StarRocks支持两种类型的数据目录:内部数据目录(Internal Catalog)和外部数据目录(External Catalog)。

2、Internal Catalog(内部数据目录)

Internal Catalog用于管理StarRocks的内部数据。例如,执行CREATE DATABASE和CREATE TABLE语句创建的数据库和数据表都由Internal Catalog管理。 每个StarRocks集群都有且只有一个Internal Catalog名为default_catalog,内部数据目录名称不能修改。

3、External Catalog(外部数据目录)

External Catalog用于连接外部数据源的Metastore。在StarRocks中,您可以通过External Catalog直接查询外部数据,而无需进行数据导入或迁移。当前支持创建以下类型的External Catalog:

  • Hive Catalog:用于查询Hive中的数据。
  • Iceberg Catalog:用于查询Iceberg中的数据。
  • Hudi Catalog:用于查询Hudi中的数据。
  • Delta Lake Catalog:用于查询Delta Lake中的数据。
  • JDBC Catalog:用于查询JDBC数据源中的数据。
  • Paimon Catalog:用于查询Paimon中的数据。该特性自3.1版本起支持。
  • Unified Catalog:把Hive、Iceberg、Hudi和Delta Lake作为一个融合的数据源,从中查询数据。该特性自3.2版本起支持。

使用External Catalog查询数据时,StarRocks会用到外部数据源的两个组件:

  • 元数据服务:用于将元数据暴露出来供StarRocks的FE进行查询规划。
  • 存储系统:用于存储数据。数据文件以不同的格式存储在分布式文件系统或对象存储系统中。当FE将生成的查询计划分发给各个BE(或CN)后,各个BE(或CN)会并行扫描Hive存储系统中的目标数据,并执行计算返回查询结果。

4、外部数据目录的创建

External Catalog的创建语法:

    CREATE EXTERNAL CATALOG <catalog_name> 
    [COMMENT <comment>] PROPERTIES ( 
    "type" = "hive", 
    GeneralParams, 
    MetastoreParams, 
    StorageCredentialParams, 
    MetadataUpdateParams 
    );

参数说明:

catalog_name:数据目录名称。命名要求如下:

  • 必须由字母 (a-z 或 A-Z)、数字 (0-9) 或下划线 (_) 组成,且只能以字母开头。
  • 总长度不能超过 1023 个字符。
  • Catalog 名称大小写敏感。

comment:数据目录的描述。此参数为可选。

type:数据源的类型。如hive、iceberg等。

GeneralParams:指定通用设置的一组参数。

MetastoreParams:访问外部数据源元数据服务的相关参数配置。

StorageCredentialParams:访问外部数据源文件存储的相关参数配置。

MetadataUpdateParams:指定缓存元数据更新策略的一组参数。StarRocks 根据该策略更新缓存的外部元数据。此组参数为可选。StarRocks 默认采用自动异步更新策略,开箱即用。因此,一般情况下,您可以忽略MetadataUpdateParams,无需对其中的策略参数进行调优。

示例1:Hive 集群使用 HMS 作为元数据服务,数据存储在S3上,基于IAM User进行鉴权和认证,创建Hive Catalog如下:

CREATE EXTERNAL CATALOG hive_catalog 
PROPERTIES ( 
"type" = "hive", 
"hive.metastore.type" = "hive", 
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083", 
"aws.s3.use_instance_profile" = "false", 
"aws.s3.access_key" = "<iam_user_access_key>", 
"aws.s3.secret_key" = "<iam_user_access_key>", 
"aws.s3.region" = "us-west-2" 
);

示例2:创建Iceberg Catalog:

CREATE EXTERNAL CATALOG iceberg_catalog 
PROPERTIES ( 
"type" = "iceberg", 
"iceberg.catalog.type" = "hive", 
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083", 
"aws.s3.use_instance_profile" = "false", 
"aws.s3.access_key" = "<iam_user_access_key>", 
"aws.s3.secret_key" = "<iam_user_access_key>", 
"aws.s3.region" = "us-west-2" 
);

5、外部数据目录查询

通过外部数据目录StarRocks实现了跨数据源的查询。例如:

在default_catalog下查询hive_catalog中的hive_table:

SELECT * FROM hive_catalog.hive_db.hive_table;

在hive_catalog.hive_db下查询default_catalog中的olap_table:

SELECT * FROM default_catalog.olap_db.olap_table;

在hive_catalog.hive_db中,对hive_table和default_catalog中的olap_table进行联邦查询:

SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;

在其他目录下,对hive_catalog中的hive_table和default_catalog中的olap_table进行联邦查询:

SELECT * FROM hive_catalog.hive_db.hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;