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;