【starrocks学习】之catalog

目录

一、介绍

二、Catalog的分类

三、使用方法

四、简单示例


一、介绍

‌**StarRocks的Catalog功能** ‌是一种数据目录管理工具,用于同时管理和查询内部和外部数据。StarRocks从2.3版本开始支持Catalog功能,允许用户在一个系统中方便地访问和查询存储在各种外部数据源(如HiveIcebergHudiDelta Lake、JDBC)的数据,而无需进行数据导入或迁移‌。

二、Catalog的分类

  • Internal Catalog‌:用于管理StarRocks内部的数据,例如通过CREATE DATABASE和CREATE TABLE语句创建的数据库和数据表。每个StarRocks集群都有一个默认的internal catalog,名为default_catalog‌。

  • External Catalog‌:用于连接外部数据源(如Hive、Iceberg、Hudi、Delta Lake、JDBC)。通过external catalog,用户可以直接查询外部数据,而无需进行数据导入或迁移‌。

  • Hive catalog:用于查询 Hive 集群中的数据。

  • Iceberg catalog:用于查询 Iceberg 集群中的数据。

  • Hudi catalog:用于查询 Hudi 集群中的数据。

  • Delta Lake catalog:用于查询 Delta Lake 集群中的数据。

  • JDBC catalog:用于查询 JDBC 数据源中的数据。

  • Elasticsearch catalog:用于查询 Elasticsearch 中的数据。该特性自 3.1 版本起支持。

  • 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 存储系统中的目标数据,并执行计算返回查询结果。

三、使用方法

  • 查询内部数据 ‌:使用SELECT * FROM <table_name>;SELECT * FROM default_catalog.<db_name>.<table_name>;‌。
  • 查询外部数据‌:例如,查询Hive数据时,需要先创建Hive catalog,然后使用该catalog进行查询‌。

四、简单示例

sql 复制代码
--创建hive catalog
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
    "type" = "hive",
    GeneralParams,
    MetastoreParams,
    StorageCredentialParams,
    MetadataUpdateParams
);


--查询当前所在 StarRocks 集群里所有 Catalog
SHOW CATALOGS;

--查看表结构
DESC[RIBE] <catalog_name>.<database_name>.<table_name>

--查询 Hive Catalog hive_catalog_name 的创建语句
SHOW CREATE CATALOG hive_catalog_name;

-- 切换当前会话生效的 Catalog:
SET CATALOG <catalog_name>;

-- 指定当前会话生效的数据库:
USE <db_name>;

--通过 USE 直接将会话切换到目标 Hive Catalog 下的指定数据库
USE <catalog_name>.<db_name>;

--删除 Hive Catalog hive_catalog_name
DROP Catalog hive_catalog_name;


--通过 SHOW DATABASES 查看指定 Catalog 所属的 Hive 集群中的数据库
SHOW DATABASES FROM <catalog_name>;

--通过 SELECT 查询目标数据库中的目标表
SELECT count(*) FROM <table_name> LIMIT 10;


--在 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;

--假设有一个 OLAP 表,表名为 olap_tbl。您可以这样来转换该表中的数据,并把数据导入到 StarRocks 中
INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hive_table;

-- GRANT 来赋予角色某个 Hive Catalog 内所有表和视图的查询权限
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE <role_name>;


-- 创建角色 hive_role_table。
CREATE ROLE hive_role_table;

-- 切换到数据目录 hive_catalog。
SET CATALOG hive_catalog;

-- 把 hive_catalog 内所有表和视图的查询权限赋予 hive_role_table。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE hive_role_table;

--创建hive表
CREATE TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...
partition_column_definition1,partition_column_definition2...])
[partition_desc]
[PROPERTIES ("key" = "value", ...)]
[AS SELECT query]
[LIKE [database.]<source_table_name>];


--非分区表ddl
CREATE TABLE unpartition_tbl
(
    id int,
    score double
);

--分区表ddl
CREATE TABLE partition_tbl_1
(
    action varchar(20),
    id int,
    dt date
)
PARTITION BY (id,dt);


--插入数据
INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query };

-- 向指定分区写入数据。
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query };


--删除数据(不会删除表对应的文件路径,但是会删除 HDFS 或对象存储上的表数据)
DROP TABLE <table_name> FORCE;
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习