StarRocks自2.3版本起支持Catalog(数据目录)功能,实现在一套系统内同时维护内、外部数据,方便您轻松访问并查询存储在各类外部源的数据。本文为您介绍什么是Catalog, 以及如何使用Catalog管理和查询内外部数据。
基本概念
内部数据:指保存在StarRocks中的数据。
外部数据:指保存在外部数据源中的数据,例如Apache Hive、Apache Iceberg、Apache Hudi、Delta Lake及JDBC等。
Catalog介绍
当前,StarRocks提供两种类型的Catalog:Internal Catalog(内部数据目录)和External Catalog(外部数据目录)。
Internal Catalog:内部数据目录,用于管理StarRocks所有内部数据。例如,执行CREATE DATABASE和CREATE TABLE语句创建的数据库和数据表都由Internal Catalog管理。 每个StarRocks集群都有且只有一个Internal Catalog名为default_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存储系统中的目标数据,并执行计算返回查询结果。
使用Catalog
方式一:您可以在SQL Editor中使用
SET CATALOG <catalog_name>
语句。方式二:在Catalog下拉列表中直接切换当前会话里生效的Catalog,然后通过该Catalog查询数据。
查询数据
查询内部数据
如要查询存储在StarRocks中的数据,请参见Default Catalog。
查询外部数据
如要查询存储在外部数据源中的数据,请参见查询外部数据。
跨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;