0 簡介
DROP 語句用於從當前或指定的 Catalog 中刪除一個已經注冊的表、視圖或函數。
Flink SQL 目前支持以下 DROP 語句:
- DROP TABLE
- DROP DATABASE
- DROP VIEW
- DROP FUNCTION
1 執行 DROP 語句
可以使用 TableEnvironment
中的 executeSql()
方法執行 DROP 語句,也可以在 SQL CLI 中執行 DROP 語句。 若 DROP 操作執行成功,executeSql()
方法返回 ‘OK’,否則會拋出異常。
以下的例子展示了如何在 TableEnvironment
和 SQL CLI 中執行一個 DROP 語句。
val settings = EnvironmentSettings.newInstance()... val tableEnv = TableEnvironment.create(settings) // 注冊名為 “Orders” 的表 tableEnv.executeSql("CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...)") // 字符串數組: ["Orders"] val tables = tableEnv.listTables() // or tableEnv.executeSql("SHOW TABLES").print() // 從 catalog 刪除 “Orders” 表 tableEnv.executeSql("DROP TABLE Orders") // 空字符串數組 val tables = tableEnv.listTables() // or tableEnv.executeSql("SHOW TABLES").print()
Flink SQL> CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...); [INFO] Table has been created. Flink SQL> SHOW TABLES; Orders Flink SQL> DROP TABLE Orders; [INFO] Table has been removed. Flink SQL> SHOW TABLES; [INFO] Result was empty.
2 DROP TABLE
DROP TABLE [IF EXISTS] [catalog_name.][db_name.]table_name
根據給定的表名刪除某個表。若需要刪除的表不存在,則拋出異常。
IF EXISTS
表不存在時不會進行任何操作。
3 DROP DATABASE
DROP DATABASE [IF EXISTS] [catalog_name.]db_name [ (RESTRICT | CASCADE) ]
根據給定的表名刪除數據庫。若需要刪除的數據庫不存在會拋出異常 。
IF EXISTS
若數據庫不存在,不執行任何操作。
RESTRICT
當刪除一個非空數據庫時,會觸發異常。(默認為開)
CASCADE
刪除一個非空數據庫時,把相關聯的表與函數一並刪除。
4 DROP VIEW
DROP [TEMPORARY] VIEW [IF EXISTS] [catalog_name.][db_name.]view_name
刪除一個有 catalog 和數據庫命名空間的視圖。若需要刪除的視圖不存在,則會產生異常。
TEMPORARY
刪除一個有 catalog 和數據庫命名空間的臨時視圖。
IF EXISTS
若視圖不存在,則不會進行任何操作。
依賴管理 Flink 沒有使用 CASCADE / RESTRICT 關鍵字來維護視圖的依賴關系,當前的方案是在用戶使用視圖時再提示錯誤信息,比如在視圖的底層表已經被刪除等場景。
5 DROP FUNCTION
DROP [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF EXISTS] [catalog_name.][db_name.]function_name;
刪除一個有 catalog 和數據庫命名空間的 catalog function。若需要刪除的函數不存在,則會產生異常。
TEMPORARY
刪除一個有 catalog 和數據庫命名空間的臨時 catalog function。
TEMPORARY SYSTEM
刪除一個沒有數據庫命名空間的臨時系統函數。
IF EXISTS
若函數不存在,則不會進行任何操作。