数据目录概述

StarRocks自2.3版本起支持Catalog(数据目录)功能,实现在一套系统内同时维护内、外部数据,方便您轻松访问并查询存储在各类外部源的数据。本文为您介绍什么是Catalog, 以及如何使用Catalog管理和查询内外部数据。

基本概念

  • 内部数据:指保存在StarRocks中的数据。

  • 外部数据:指保存在外部数据源中的数据,例如Apache Hive、Apache Iceberg、Apache Hudi、Delta Lake及JDBC等。

Catalog介绍

当前,StarRocks提供两种类型的Catalog:Internal Catalog(内部数据目录)和External Catalog(外部数据目录)。

image

  • Internal Catalog:内部数据目录,用于管理StarRocks所有内部数据。例如,执行CREATE DATABASE和CREATE TABLE语句创建的数据库和数据表都由Internal Catalog管理。 每个StarRocks集群都有且只有一个Internal Catalog名为default_catalog。

  • External Catalog:外部数据目录,用于连接外部Metastore。在StarRocks中,您可以通过External Catalog直接查询外部数据,无需进行数据导入或迁移。当前支持创建以下类型的External Catalog:

    使用External Catalog查询数据时,StarRocks会用到外部数据源的两个组件:

    • 元数据服务:用于将元数据暴露出来供StarRocks的FE进行查询规划。

    • 存储系统:用于存储数据。数据文件以不同的格式存储在分布式文件系统或对象存储系统中。当FE将生成的查询计划分发给各个BE(或CN)后,各个BE(或CN)会并行扫描Hive存储系统中的目标数据,并执行计算返回查询结果。

使用Catalog

  • 方式一:您可以在SQL Editor中使用SET CATALOG <catalog_name>语句。

  • 方式二:在Catalog下拉列表中直接切换当前会话里生效的Catalog,然后通过该Catalog查询数据。

    image

查询数据

查询内部数据

如要查询存储在StarRocks中的数据,请参见Default Catalog

查询外部数据

如要查询存储在外部数据源中的数据,请参见查询外部数据

跨Catalog查询数据

如果您想在一个Catalog中查询其他Catalog中数据,可通过catalog_name.db_namecatalog_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_tabledefault_catalog中的olap_table进行联邦查询。

    SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id = o.id;
  • 在其他目录下,对hive_catalog中的hive_tabledefault_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;