StarRocks 自 2.3 版本起支持 Catalog(数据目录)功能,实现在一套系统内同时维护内、外部数据,方便您轻松访问并查询存储在各类外部源的数据。
1. 基本概念
内部数据:指保存在 StarRocks 中的数据。
外部数据:指保存在外部数据源(如 Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake、JDBC)中的数据。
2. Catalog
当前 StarRocks 提供两种类型 Catalog:internal catalog 和 external catalog。
2.1 Internal catalog
内部数据目录,用于管理 StarRocks 所有内部数据。例如,执行 CREATE DATABASE 和 CREATE TABLE 语句创建的数据库和数据表都由 internal catalog 管理。 每个 StarRocks 集群都有且只有一个 internal catalog 名为 default_catalog。
2.2 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 数据源的数据。
使用 external catalog 查询数据时,StarRocks 会用到外部数据源的两个组件:
2.3 元数据服务
用于将元数据暴露出来供 StarRocks 的 FE 进行查询规划。
2.4 存储系统
用于存储数据。数据文件以不同的格式存储在分布式文件系统或对象存储系统中。当 FE 将生成的查询计划分发给各个 BE 后,各个 BE 会并行扫描 Hive 存储系统中的目标数据,并执行计算返回查询结果。
2.5 访问 Catalog
使用 SET CATALOG 切换当前会话里生效的 Catalog,然后通过该 Catalog 查询数据。
3. 查询数据
3.1 查询内部数据
连接 StarRocks。
如从 MySQL 客户端连接到 StarRocks。连接后,默认进入到 default_catalog。
如使用 JDBC 连接到 StarRocks,连接时即可通过 default_catalog.db_name 的方式指定要连接的数据库。
(可选)通过 SHOW DATABASES 查看数据库:
SHOW DATABASES;
或
SHOW DATABASES FROM default_catalog;
(可选)通过 SET CATALOG 切换当前会话生效的 Catalog:
SET CATALOG <catalog_name>;
再通过 USE 指定当前会话生效的数据库:
USE <db_name>;
或者,也可以通过 USE 直接将会话切换到目标 Catalog 下的指定数据库:
USE <catalog_name>.<db_name>;
通过 SELECT 查询内部数据:
SELECT * FROM <table_name>;
如在以上步骤中未指定数据库,则可以在查询语句中直接指定。
SELECT * FROM <db_name>.<table_name>;
或
SELECT * FROM default_catalog.<db_name>.<table_name>;
默认为内部查询示例:
3.2 查询外部数据
连接 StarRocks。
如从 MySQL 客户端连接到 StarRocks。连接后,默认进入到 default_catalog。
如使用 JDBC 连接到 StarRocks,连接时即可通过 default_catalog.db_name 的方式指定要连接的数据库。
(可选)执行以下语句查看当前 StarRocks 集群中的所有 Catalog 并找到指定的 External Catalog。
SHOW CATALOGS;
(可选)执行以下语句查看指定 external catalog 中的数据库。
SHOW DATABASES FROM catalog_name;
(可选)执行以下语句将当前会话切换到指定 external catalog 的指定数据库。
USE catalog_name.db_name;
查询外部数据。
SELECT * FROM table_name;
如在以上步骤中未指定 external catalog 和数据库,则可以在查询语句中直接指定。示例:
SELECT * FROM catalog_name.db_name.table_name;
示例:
3.3 跨 catalog 查询数据
如想在一个 catalog 中查询其他 catalog 中数据,可通过 catalog_name.db_name 或 catalog_name.db_name.table_name 的格式来引用目标数据。举例:
在 default_catalog.olap_db 下查询 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;
示例:
4. 外部表
外部表在3.1之后版本会逐步下线,推荐使用Catalog
StarRocks 支持以外部表 (External Table) 的形式,接入其他数据源。外部表指的是保存在其他数据源中的数据表,而 StartRocks 只保存表对应的元数据,并直接向外部表所在数据源发起查询。目前 StarRocks 已支持的第三方数据源包括 MySQL、StarRocks、Elasticsearch、Apache Hive™、Apache Iceberg 和 Apache Hudi。对于 StarRocks 数据源,现阶段只支持 Insert 写入,不支持读取,对于其他数据源,现阶段只支持读取,还不支持写入。
从 3.0 版本起,对于查询 Hive、Iceberg、Hudi 数据源的场景,推荐使用 Catalog。参见 Hive catalog、Iceberg catalog、Hudi catalog。
从 3.1 版本起,对于查询 MySQL、PostgreSQL 的场景推荐使用 JDBC catalog,对于查询 Elasticsearch 的场景推荐使用 Elasticsearch catalog。
从 2.5 版本开始,查询外部数据源时支持 Data Cache,提升对热数据的查询性能
Catalog的相关知识就先介绍到这里了,欢迎点赞,收藏,转发,评论交流~
版权归原作者 运维仙人 所有, 如有侵权,请联系我们删除。