0 簡介
ALTER 語句用於修改一個已經在 Catalog 中注冊的表、視圖或函數定義。
Flink SQL 目前支持以下 ALTER 語句:
- ALTER TABLE
- ALTER DATABASE
- ALTER FUNCTION
1 執行 ALTER 語句
可以使用 TableEnvironment
中的 executeSql()
方法執行 ALTER 語句,也可以在 SQL CLI 中執行 ALTER 語句。 若 ALTER 操作執行成功,executeSql()
方法返回 ‘OK’,否則會拋出異常。
以下的例子展示了如何在 TableEnvironment
和 SQL CLI 中執行一個 ALTER 語句。
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() // 把 “Orders” 的表名改為 “NewOrders” tableEnv.executeSql("ALTER TABLE Orders RENAME TO NewOrders;") // 字符串數組:["NewOrders"] 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> ALTER TABLE Orders RENAME TO NewOrders; [INFO] Table has been removed. Flink SQL> SHOW TABLES; NewOrders
2 ALTER TABLE
- 重命名表
ALTER TABLE [catalog_name.][db_name.]table_name RENAME TO new_table_name
把原有的表名更改為新的表名。
- 設置或修改表屬性
ALTER TABLE [catalog_name.][db_name.]table_name SET (key1=val1, key2=val2, ...)
為指定的表設置一個或多個屬性。若個別屬性已經存在於表中,則使用新的值覆蓋舊的值。
3 ALTER DATABASE
ALTER DATABASE [catalog_name.]db_name SET (key1=val1, key2=val2, ...)
在數據庫中設置一個或多個屬性。若個別屬性已經在數據庫中設定,將會使用新值覆蓋舊值。
4 ALTER FUNCTION
ALTER [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF EXISTS] [catalog_name.][db_name.]function_name AS identifier [LANGUAGE JAVA|SCALA|PYTHON]
修改一個有 catalog 和數據庫命名空間的 catalog function ,需要指定一個新的 identifier ,可指定 language tag 。若函數不存在,刪除會拋出異常。
如果 language tag 是 JAVA 或者 SCALA ,則 identifier 是 UDF 實現類的全限定名。關於 JAVA/SCALA UDF 的實現,請參考 自定義函數。
如果 language tag 是 PYTHON , 則 identifier 是 UDF 對象的全限定名,例如 pyflink.table.tests.test_udf.add
。關於 PYTHON UDF 的實現,請參考 Python UDFs。
TEMPORARY
修改一個有 catalog 和數據庫命名空間的臨時 catalog function ,並覆蓋原有的 catalog function 。
TEMPORARY SYSTEM
修改一個沒有數據庫命名空間的臨時系統 catalog function ,並覆蓋系統內置的函數。
IF EXISTS
若函數不存在,則不進行任何操作。
LANGUAGE JAVA|SCALA|PYTHON
Language tag 用於指定 Flink runtime 如何執行這個函數。目前,只支持 JAVA,SCALA 和 PYTHON,且函數的默認語言為 JAVA。