【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;
相关推荐
蝴蝶不愿意3 分钟前
Docker基础-常见命令
java·笔记·学习·spring cloud·docker
一人前行3 小时前
Flutter_学习记录_各个屏幕的适配
学习·flutter
GocNeverGiveUp5 小时前
vue3学习3-route
前端·javascript·学习
架构文摘JGWZ8 小时前
5个GitHub热点开源项目!!
学习·github·工具
不会编程的程序員8 小时前
DeepSeek学习教程 从入门到精通pdf下载:快速上手 DeepSeek
学习
昨今9 小时前
学习Flask:Day 1:基础搭建
python·学习·flask
昵称只无法修改9 小时前
HITCON2017SSRFME-学习复盘
学习·php
柃歌9 小时前
【UCB CS 61B SP24】Lecture 14 - Data Structures 1: Disjoint Sets学习笔记
java·数据结构·笔记·学习·算法
黑客K-ing10 小时前
网络安全怎么学习
学习
海风极客11 小时前
DeepSeek回答:AI时代Go语言学习路线
人工智能·学习·golang