本文为您介绍什么是Catalog(数据目录), 以及如何使用Catalog管理和查询内外部数据。
基本概念
- 内部数据:保存在StarRocks中的数据。
- 外部数据:保存在外部数据源(例如Apache Hive、Apache Iceberg和Apache Hudi)中的数据。
Catalog
StarRocks 2.3及以上版本支持Catalog功能,方便您轻松访问并查询存储在各类外部源的数据。当前StarRocks提供Internal Catalog和External Catalog两种类型的Catalog。
- Internal Catalog:内部数据目录,用于管理StarRocks所有内部数据。例如,执行
CREATE DATABASE
和CREATE TABLE
语句创建的数据库和数据表都由Internal Catalog管理。 每个StarRocks集群都有且只有一个Internal Catalog名为default_catalog
。 - External Catalog:外部数据目录,用于管理外部数据源的访问信息。例如,数据源类型和Hive MetaStore的URI等。在StarRocks中,您可以通过External Catalog直接查询外部数据。目前支持创建以下数据源的External Catalog:
- Hive数据源:用于查询Hive数据。
- Iceberg数据源:用于查询Iceberg数据。
- Hudi数据源:用于查询Hudi数据。
使用External Catalog查询数据时,StarRocks会用到外部数据源的两个组件:- 元数据服务:用于将元数据暴露出来供StarRocks的FE进行查询规划。
- 存储系统:用于存储数据。数据文件以不同的格式存储在分布式文件系统或对象存储系统中。当FE将生成的查询计划分发给各个BE后,各个BE会并行扫描Hive存储系统中的目标数据,并执行计算返回查询结果。
查询数据
查询内部数据
如果需要查询存储在StarRocks中的数据,请参见内表数据源。
查询外部数据
如果需要查询存储在外部数据源中的数据,请参见数据湖分析。
跨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;