当前位置: 首页 > news >正文

Doris catalog操作

一、Doris Catalog简介

Doris Catalog是Apache Doris中用于管理和组织数据的核心组件,主要负责存储和管理元数据。以下是详细介绍:

  • 主要功能
    • 数据组织:可管理多个数据库,每个数据库又能包含多个表。同时,负责管理表的元数据,如表名、列信息、分区信息等,还支持创建和管理视图,以及管理表的分区信息,有助于数据的高效存储和查询。
    • 元数据管理:Doris Catalog维护所有数据库对象的元数据,并将其存储在元数据存储系统中,支持元数据的创建、修改和删除操作,确保元数据的一致性。
    • 数据发现与查询优化:通过元数据可以快速发现和定位所需的数据,还能基于元数据的信息帮助优化查询计划,提高查询性能。
    • 权限管理:能够管理用户和角色,并分配不同的权限,通过细粒度的权限控制,确保数据的安全性和访问控制。
    • 数据血缘:可以记录数据的来源和变更过程,帮助用户理解数据的生成和传输路径,例如对表进行ETL操作时,能记录输入表、输出表和变更步骤等详细信息。
  • 类型
    • Internal Catalog:是Doris内置的默认Catalog,用户不可修改或删除。用户登录Doris后,默认进入该Catalog,可直接使用SHOW DATABASESUSE DB等命令查看和切换数据库。
    • External Catalog:用户可通过CREATE CATALOG命令创建。创建后,可通过SHOW CATALOGS命令查看,能使用SWITCH命令切换到相应的External Catalog。目前Doris只支持对External Catalog中的数据进行只读访问,可删除Catalog,此操作仅会删除Doris中该Catalog的映射信息,不会修改外部数据目录的内容。
  • 支持的数据源
    • Hive Metastore:可以访问包括Hive、Iceberg、Hudi在内的数据表,也可对接兼容Hive Metastore的数据源,如阿里云的DataLake Formation,同时支持HDFS和对象存储上的数据访问。
    • Elasticsearch:可用于访问ES数据源。
    • 其他:还可通过JDBC Catalog访问支持JDBC接口的数据库,如MySQL等。
  • 作用:Doris Catalog使得用户可以方便地查询外部系统的数据,并且这些数据之间还可以进行join操作,实现多源数据的联邦查询。例如,通过Hive Catalog,用户可使用SQL语句直接查询Hive的数据,相较于传统方式,使用门槛低且效率高。

二、Doris Catalog 常用命令

序号操作命令结果
1CREATE CATALOG MY_CATA_MYSQL PROPERTIES ([KEY1]=[VALUE1],…)详见如下 SQL-1
2DROP catalog MY_CATA_MYSQL;
3查询所有SHOW catalogs;
4查询某一个的创建语句SHOW CREATE catalog MY_CATA_MYSQL;
5查询Catalog下的所有原始库SHOW DATABASES FROM MY_CATA_MYSQL;详见如下 SQL-2
6查询Catalog下指定原始库下的所有表SHOW TABLES FROM MY_CATA_MYSQL.database_1详见如下 SQL-3

SQL-1:

CREATE CATALOG MY_CATA_MYSQL PROPERTIES ("type" = "jdbc","user" = "root","password" = "*XXXX","jdbc_url" = "jdbc:mysql://11.11.11.11:3306/biz_database?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&yearIsDateType=false&tinyInt1isBit=false&rewriteBatchedStatements=true&characterEncoding=utf-8","driver_url" = "mysql-connector-java-8.0.25.jar","driver_class" = "com.mysql.cj.jdbc.Driver","maximum_pool_size" = "30",  -- 增加最大连接数"minimum_idle" = "5",         -- 增加最小空闲连接数"idle_timeout" = "600000",    -- 空闲连接超时时间(毫秒)"max_lifetime" = "1800000",   -- 连接最大生命周期(毫秒)"connection_timeout" = "30000" -- 连接超时时间(毫秒)
);

SQL-2:

SHOW DATABASES FROM MY_CATA_MYSQL;database_1
database_2
information_schema
mysql

SQL-3:

SHOW TABLES FROM MY_CATA_MYSQL.database_1;tbl_1
tbl_2
tbl_3
tbl_4

三、Doris 中 CALL EXECUTE_STMT 说明

CALL EXECUTE_STMT 是 Doris 2.x 版本引入的一个存储过程,用于通过 JDBC Catalog 直接执行外部数据源(如 MySQL、PostgreSQL)的 SQL 语句。这个功能允许 Doris 作为中间层,将 DML 操作(如 INSERT、UPDATE、DELETE)透传到外部数据库,实现跨数据源的数据同步。

核心功能

  1. 跨源 DML 操作:支持对外部数据源执行 INSERT、UPDATE、DELETE 等修改语句。
  2. 事务支持:执行的 SQL 语句在外部数据源中遵循事务特性(原子性、一致性)。
  3. 参数传递:可通过变量动态传递 SQL 语句内容。

语法格式

CALL EXECUTE_STMT(catalog_name,    -- 外部 Catalog 名称sql_statement    -- 需要执行的 SQL 语句
);

示例

-- 1、向 MySQL 表插入数据
CALL EXECUTE_STMT("mysql_catalog", "INSERT INTO test_table VALUES (1, 'data')");-- 2、UPSERT 操作(MySQL 特有语法)
CALL EXECUTE_STMT("mysql", "INSERT INTO test.test_mysql VALUES (1, 'M03', 'P02', 'Desc xxxx') ON DUPLICATE KEY UPDATE product_desc = VALUES(product_desc)");-- 3、更新 MySQL 表数据
CALL EXECUTE_STMT("mysql_catalog", "UPDATE test_table SET value = 'new' WHERE id = 1");-- 4、删除 MySQL 表数据
CALL EXECUTE_STMT("mysql_catalog", "DELETE FROM test_table WHERE id > 100");

使用限制

  1. 仅支持 DML 语句

    • 不支持 SELECT 查询(会报 Can not issue SELECT via executeUpdate() 错误)。
    • 不支持 CREATE/DROP 等 DDL 语句。
  2. 权限要求

    • 执行用户需要对 Catalog 有 LOAD 权限。
    • 外部数据源用户需要有对应表的操作权限。
  3. SQL 语法限制

    • 必须使用外部数据库的原生语法(如 MySQL 的 INSERT...ON DUPLICATE KEY UPDATE)。
    • Doris 不会对 SQL 进行语法检查,错误会在执行时抛出。
  4. 结果处理

    • 不返回执行结果(如影响行数),只能通过查询验证。

常见错误及解决

  1. Can not issue SELECT via executeUpdate()

    • 原因:尝试执行 SELECT 查询。
    • 解决:改用 SELECT * FROM catalog.db.table 直接查询。
  2. External catalog 'xxx' is not allowed in 'DeleteStmt'

    • 原因:直接在 DELETE 语句中使用外部 Catalog(如 DELETE FROM mysql.db.table)。
    • 解决:必须通过 CALL EXECUTE_STMT 执行。
  3. Connection is not available

    • 原因:JDBC 连接池耗尽或网络问题。
    • 解决:调整 Catalog 连接池参数(如 maximum_pool_size),检查网络连通性。
  4. Can not issue empty query

    • 原因:SQL 语句为空或包含非法字符。
    • 解决:检查 SQL 内容,避免空字符串或未转义的特殊字符。

最佳实践

  1. 参数化执行

    -- 在 DolphinScheduler 中通过变量传递 SQL
    CALL EXECUTE_STMT("mysql_catalog", "${delete_sql}");
    
  2. 批量操作

    -- 合并多条语句减少连接次数
    CALL EXECUTE_STMT("mysql_catalog", "DELETE FROM t1; INSERT INTO t2 VALUES(...);");
    
  3. 事务控制

    -- 确保原子性
    CALL EXECUTE_STMT("mysql_catalog", "START TRANSACTION; ...; COMMIT;");
    
  4. 异常处理

    • 先在外部数据库测试 SQL 语句的有效性。
    • 通过日志监控执行结果(如 Doris FE 日志)。

适用场景

  1. 数据同步:将 Doris 中的计算结果实时写入外部数据库。
  2. 数据清理:定期删除外部数据库中的过期数据。
  3. ETL 流程:在复杂的数据处理流程中执行中间步骤。

四、 示例:在 DolphinScheduler 中使用

-- 1. 定义工作流参数
-- delete_sql = "DELETE FROM mysql_table WHERE id > 100"-- 2. 在 SQL 任务中执行
CALL EXECUTE_STMT("mysql_catalog", "${delete_sql}");

通过 CALL EXECUTE_STMT,Doris 可以作为数据处理的中枢,灵活地与外部数据源交互,实现复杂的数据同步和处理逻辑。

相关文章:

  • 国标28181卡顿问题现场诊断报告
  • gbase8s之MyBatis批量update问题
  • WPF--Application.Current.Dispatcher.BeginInvoke
  • 人工智能之数学基础:如何将二次型转换为标准型?
  • QMainWindow、QDialog 和 QWidget区别
  • 一文读懂:晶振不同等级的差异及对应最佳应用场景
  • leetcode 2616. 最小化数对的最大差值 中等
  • 软考 系统架构设计师系列知识点之杂项集萃(88)
  • springboot+vue大文件断点续传
  • 前端JavaScript面试题(2)
  • Promise(async、await)
  • 非本地地址调用摄像头需要https
  • Coze扣子 - AI生成数字人口播视频
  • 多环境开发配置,Spring boot
  • 【leetcode】101. 对称二叉树
  • Mysql 忘记密码后如何修改
  • 长春光博会 | 麒麟信安:构建工业数字化安全基座,赋能智能制造转型升级
  • 零基础学前端-传统前端开发(第四期-JS基础-运算)
  • sqlserver存储过程中入参使用JSON
  • redis穿透、击穿、雪崩
  • 怎么查询一个网站从哪做的/宁波seo基础入门
  • 怎么做传奇私服网站/网络卖货平台有哪些
  • 河北省 建设执业注册中心网站/东莞整站优化排名
  • 商城小程序方案/seo网站推广主要目的不包括
  • asp网站怎么做/苹果自研搜索引擎或为替代谷歌
  • 受欢迎的模板网站建设/郑州疫情最新动态