Flink SQL DROP 语句安全删除 Catalog / Table / DB / View / Function / Model

1. DROP 语句是干嘛的

DROP 语句用于从当前或指定的 Catalog 中移除已注册对象,包括 Catalog、Database、Table、View、Function、Model 等。

Flink SQL 目前支持:

  1. DROP CATALOG
  2. DROP TABLE
  3. DROP DATABASE
  4. DROP VIEW
  5. DROP FUNCTION
  6. DROP MODEL

2. Java 中如何执行 DROP(TableEnvironment.executeSql)

DROP 语句在 Java 侧的执行方式和 CREATE 一样:调用 TableEnvironment.executeSql(),成功返回 OK,失败抛异常。

示例流程(注册表 → 列表查看 → 删除表 → 再查看):

java 复制代码
TableEnvironment tableEnv = TableEnvironment.create(...);

// register a table named "Orders"
tableEnv.executeSql(
  "CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...)"
);

// list tables
String[] tables = tableEnv.listTables(); 
// or: tableEnv.executeSql("SHOW TABLES").print();

// drop table from catalog
tableEnv.executeSql("DROP TABLE Orders");

// list tables again
String[] tables2 = tableEnv.listTables();

3. DROP CATALOG:删除整个 Catalog

3.1 语法

sql 复制代码
DROP CATALOG [IF EXISTS] catalog_name;

3.2 行为要点

  • IF EXISTS:catalog 不存在时不报错,直接忽略。

4. DROP TABLE:删除表(支持 TEMPORARY)

4.1 语法

sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] [catalog_name.][db_name.]table_name;

4.2 行为要点

  • 不加 IF EXISTS:表不存在会抛异常。
  • TEMPORARY:删除临时表(带 catalog/db 命名空间的临时对象)。

5. DROP DATABASE:删除库(RESTRICT / CASCADE 很关键)

5.1 语法

sql 复制代码
DROP DATABASE [IF EXISTS] [catalog_name.]db_name [ (RESTRICT | CASCADE) ];

5.2 RESTRICT vs CASCADE

  • RESTRICT(默认):如果库非空(还有表/函数),会报错,防止误删。
  • CASCADE:删除非空库时,会连同库内关联的表与函数一起删除

生产建议:

  • 日常运维优先用默认 RESTRICT,避免一条命令清空库。
  • 自动化清理/测试环境可用 CASCADE,但必须加确认机制或白名单。

6. DROP VIEW:删除视图(临时视图 + 依赖坑)

6.1 语法

sql 复制代码
DROP [TEMPORARY] VIEW [IF EXISTS] [catalog_name.][db_name.]view_name;

Flink 文档明确提示:Flink 不会像一些数据库那样用 CASCADE/RESTRICT 维护视图依赖。当前表现是:如果视图引用的底层表被删了,Flink 不会自动删视图,而是等你下次使用视图时抛"延迟错误"。

工程建议:

  • 删除底表前,先 SHOW CREATE VIEW / 维护一份视图依赖清单(如果你有大量视图)。
  • 或者在你自己的 Catalog/元数据层做依赖治理(血缘/依赖图)。

7. DROP FUNCTION:删除函数(TEMPORARY / TEMPORARY SYSTEM)

7.1 语法

sql 复制代码
DROP [TEMPORARY | TEMPORARY SYSTEM] FUNCTION [IF EXISTS]
  [catalog_name.][db_name.]function_name;

7.2 行为要点

  • TEMPORARY:删临时 catalog function
  • TEMPORARY SYSTEM:删临时系统函数(无命名空间)
  • IF EXISTS:不存在不报错

8.1 语法

sql 复制代码
DROP [TEMPORARY] MODEL [IF EXISTS] [catalog_name.][db_name.]model_name;

8.2 行为要点

  • 不加 IF EXISTS:不存在会抛异常
  • IF EXISTS:不存在忽略

9. 安全删除最佳实践(建议你放在博客结尾)

  1. 习惯性加 IF EXISTS:脚本幂等化,避免多环境执行失败。
  2. DROP DATABASE 默认用 RESTRICT:除非你非常确定要"连锅端"。
  3. 删底表前处理视图依赖:Flink 不会帮你级联维护视图,避免"延迟炸雷"。
  4. 区分 TEMPORARY 对象与持久对象:临时对象生命周期通常跟会话/作业相关,误删/漏删都会让排障更难。
相关推荐
逍遥德2 小时前
SpringBoot数据库连接池HikariCP,Druid,Tomcat JDBC,DBCP2,c3p0配置使用
数据库·spring boot·tomcat
小菜同学爱学习3 小时前
第一章 初识达梦数据库:基础认知与环境准备
数据库·达梦
zhoutongsheng3 小时前
如何解决ORA-01078参数文件错误_pfile与spfile互相创建恢复
jvm·数据库·python
m0_716255003 小时前
批处理一道例题+答案解析+批处理知识点总结 | 批处理高频易错场景 + 正确写法对照表
数据库·oracle
2401_824222693 小时前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
稀饭过霍3 小时前
数据类型【TINYINT、SMALLINT、INT、BIGINT、decimal(18,2)】表示意思
数据库
俺不要写代码3 小时前
数据库:DML
数据库·oracle
这个DBA有点耶3 小时前
两张百万级大表JOIN跑崩了?试试这3招
数据库·代码规范
IntMainJhy3 小时前
「Flutter三方库sqflite的鸿蒙化适配与实战指南:从入门到踩坑的本地数据库开发全记录」
数据库·flutter·华为·信息可视化·数据库开发·harmonyos
counting money4 小时前
Spring框架基础(依赖注入-全注解形式)
java·数据库·spring