概述
本主题介绍什么是 Catalog,以及如何使用 Catalog 管理和查询内部数据和外部数据。
StarRocks 从 v2.3 版本开始支持 Catalog 功能。 Catalog 使您可以在一个系统中管理内部和外部数据,并为您提供一种灵活的方式来轻松查询和分析存储在各种外部系统中的数据。
基本概念
- 内部数据:指存储在 StarRocks 中的数据。
- 外部数据:指存储在外部数据源中的数据,例如 Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake 和 JDBC。
Catalog
目前,StarRocks 提供两种类型的 Catalog:内部 Catalog 和外部 Catalog。
-
内部 Catalog 管理 StarRocks 的内部数据。 例如,如果您执行 CREATE DATABASE 或 CREATE TABLE 语句来创建数据库或表,则该数据库或表将存储在内部 Catalog 中。 每个 StarRocks 集群只有一个名为default_catalog的内部 Catalog。
-
外部 Catalog 就像指向外部管理的元数据存储的链接,它授予 StarRocks 直接访问外部数据源的权限。 您可以直接查询外部数据,而无需进行数据加载或迁移。 目前,StarRocks 支持以下类型的外部 Catalog
- Hive catalog:用于从 Hive 查询数据。
- Iceberg catalog:用于从 Iceberg 查询数据。
- Hudi catalog:用于从 Hudi 查询数据。
- Delta Lake catalog:用于从 Delta Lake 查询数据。
- JDBC catalog:用于从 JDBC 兼容的数据源查询数据。
- Elasticsearch catalog:用于从 Elasticsearch 查询数据。 从 v3.1 版本开始支持 Elasticsearch catalog。
- Paimon catalog:用于从 Paimon 查询数据。 从 v3.1 版本开始支持 Paimon catalog。
- Unified catalog:用于从 Hive、Iceberg、Hudi 和 Delta Lake 数据源查询数据,并将它们视为统一的数据源。 从 v3.2 版本开始支持 Unified catalog。
当您查询外部数据时,StarRocks 与外部数据源的以下两个组件进行交互
- 元数据服务:FE 用于访问外部数据源的元数据。 FE 根据元数据生成查询执行计划。
- 数据存储系统:用于存储外部数据。 分布式文件系统和对象存储系统都可以用作数据存储系统,以各种格式存储数据文件。 FE 将查询执行计划分发到所有 BE 或 CN 后,所有 BE 或 CN 并行扫描目标外部数据,执行计算,然后返回查询结果。
访问 Catalog
您可以使用SET CATALOG语句切换到当前会话中的指定 Catalog。 然后,您可以使用该 Catalog 查询数据。
查询数据
查询内部数据
要查询 StarRocks 中的数据,请参阅默认 Catalog。
查询外部数据
要查询外部数据源中的数据,请参阅查询外部数据。
跨 Catalog 查询
要从当前 Catalog 执行跨 Catalog 联邦查询,请以catalog_name.database_name
或catalog_name.database_name.table_name
格式指定要查询的数据。
-
当当前会话为
default_catalog.olap_db
时,查询hive_db
中的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_catalog
中的hive_table
和default_catalog
中的olap_table
执行 JOIN 查询。SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;
-
当当前会话是另一个 Catalog 时,使用 JOIN 子句对
hive_catalog
中的hive_table
和default_catalog
中的olap_table
执行 JOIN 查询。SELECT * FROM hive_catalog.hive_db.hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;