【starrocks学习】之catalog

目录

一、介绍

二、Catalog的分类

三、使用方法

四、简单示例


一、介绍

‌**StarRocks的Catalog功能** ‌是一种数据目录管理工具,用于同时管理和查询内部和外部数据。StarRocks从2.3版本开始支持Catalog功能,允许用户在一个系统中方便地访问和查询存储在各种外部数据源(如Hive、Iceberg、Hudi、Delta 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;
相关推荐
薛定e的猫咪16 分钟前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪38 分钟前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
别动我齐刘海4 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
一直C4 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
承渊政道5 小时前
Linux网络学习【传输层协议UDP】
linux·网络·网络协议·学习·ubuntu·udp
andrsted5 小时前
练题簿免费刷题小程序:和学习搭子共用一份题库,一起刷题复习
学习·面试·微信小程序·小程序·学习方法·刷题
fqbqrr5 小时前
2610学习,ahk学习技巧
学习
fengci.5 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
有Li6 小时前
基于超高分辨率CT智能分割与测量的单侧梅尼埃病内耳解剖特征定量研究文献速递/医学智能体前沿
大数据·人工智能·学习·文献·医学生
Дерек的学习记录6 小时前
Unreal Engine 5:开关门实现和流程控制
开发语言·学习·ue5