【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进行查询。
四、简单示例
--创建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;