【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;
相关推荐
说码解字17 分钟前
ExoPlayer 如何实现音画同步
开发语言·学习·音视频
海尔辛37 分钟前
学习黑客BitLocker与TPM详解
stm32·单片机·学习
邓永豪1 小时前
笔记本电脑升级实战手册[3]:扩展内存与硬盘
学习·电脑·硬件·diy·3c硬件
小虎卫远程打卡app2 小时前
视频编解码学习十一之视频原始数据
学习·视频编解码
crazyme_63 小时前
前端自学入门:HTML 基础详解与学习路线指引
前端·学习·html
龙湾开发3 小时前
轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API
人工智能·笔记·学习·机器学习·mnn
Camellia03113 小时前
嵌入式学习--江协51单片机day5
嵌入式硬件·学习·51单片机
HappyAcmen4 小时前
线代第二章矩阵第八节逆矩阵、解矩阵方程
笔记·学习·线性代数·矩阵
杨德兴4 小时前
3.3 阶数的作用
人工智能·学习
chilling heart4 小时前
API的学习总结(上)
学习