ALTER 语句

ALTER 语句用于修改一个已经在 Catalog 中注册的表、视图或函数定义。

Flink SQL 目前支持以下 ALTER 语句:

  • ALTER TABLE
  • ALTER DATABASE
  • ALTER FUNCTION

执行 ALTER 语句

Java

可以使用 TableEnvironment 中的 executeSql() 方法执行 ALTER 语句。 若 ALTER 操作执行成功,executeSql() 方法返回 ‘OK’,否则会抛出异常。

以下的例子展示了如何在 TableEnvironment 中执行一个 ALTER 语句。

Scala

可以使用 TableEnvironment 中的 executeSql() 方法执行 ALTER 语句。 若 ALTER 操作执行成功,executeSql() 方法返回 ‘OK’,否则会抛出异常。

以下的例子展示了如何在 TableEnvironment 中执行一个 ALTER 语句。

Python

可以使用 TableEnvironment 中的 execute_sql() 方法执行 ALTER 语句。 若 ALTER 操作执行成功,execute_sql() 方法返回 ‘OK’,否则会抛出异常。

以下的例子展示了如何在 TableEnvironment 中执行一个 ALTER 语句。

SQL CLI

可以在 SQL CLI 中执行 ALTER 语句。

以下的例子展示了如何在 SQL CLI 中执行一个 ALTER 语句。

Java

  1. EnvironmentSettings settings = EnvironmentSettings.newInstance()...
  2. TableEnvironment tableEnv = TableEnvironment.create(settings);
  3. // 注册名为 “Orders” 的表
  4. tableEnv.executeSql("CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...)");
  5. // 字符串数组: ["Orders"]
  6. String[] tables = tableEnv.listTables();
  7. // or tableEnv.executeSql("SHOW TABLES").print();
  8. // 把 “Orders” 的表名改为 “NewOrders”
  9. tableEnv.executeSql("ALTER TABLE Orders RENAME TO NewOrders;");
  10. // 字符串数组:["NewOrders"]
  11. String[] tables = tableEnv.listTables();
  12. // or tableEnv.executeSql("SHOW TABLES").print();

Scala

  1. val settings = EnvironmentSettings.newInstance()...
  2. val tableEnv = TableEnvironment.create(settings)
  3. // 注册名为 “Orders” 的表
  4. tableEnv.executeSql("CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...)");
  5. // 字符串数组: ["Orders"]
  6. val tables = tableEnv.listTables()
  7. // or tableEnv.executeSql("SHOW TABLES").print()
  8. // 把 “Orders” 的表名改为 “NewOrders”
  9. tableEnv.executeSql("ALTER TABLE Orders RENAME TO NewOrders;")
  10. // 字符串数组:["NewOrders"]
  11. val tables = tableEnv.listTables()
  12. // or tableEnv.executeSql("SHOW TABLES").print()

Python

  1. settings = EnvironmentSettings.new_instance()...
  2. table_env = TableEnvironment.create(settings)
  3. # 字符串数组: ["Orders"]
  4. tables = table_env.list_tables()
  5. # or table_env.execute_sql("SHOW TABLES").print()
  6. # 把 “Orders” 的表名改为 “NewOrders”
  7. table_env.execute_sql("ALTER TABLE Orders RENAME TO NewOrders;")
  8. # 字符串数组:["NewOrders"]
  9. tables = table_env.list_tables()
  10. # or table_env.execute_sql("SHOW TABLES").print()

SQL CLI

  1. Flink SQL> CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...);
  2. [INFO] Table has been created.
  3. Flink SQL> SHOW TABLES;
  4. Orders
  5. Flink SQL> ALTER TABLE Orders RENAME TO NewOrders;
  6. [INFO] Table has been removed.
  7. Flink SQL> SHOW TABLES;
  8. NewOrders

ALTER TABLE

  • 重命名表
  1. ALTER TABLE [catalog_name.][db_name.]table_name RENAME TO new_table_name

把原有的表名更改为新的表名。

  • 设置或修改表属性
  1. ALTER TABLE [catalog_name.][db_name.]table_name SET (key1=val1, key2=val2, ...)

为指定的表设置一个或多个属性。若个别属性已经存在于表中,则使用新的值覆盖旧的值。

ALTER DATABASE

  1. ALTER DATABASE [catalog_name.]db_name SET (key1=val1, key2=val2, ...)

在数据库中设置一个或多个属性。若个别属性已经在数据库中设定,将会使用新值覆盖旧值。

ALTER FUNCTION

{% highlight sql%} ALTER [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF EXISTS] [catalog_name.][db_name.]function_name AS identifier [LANGUAGE JAVA|SCALA|PYTHON]

  1. 修改一个有 catalog 和数据库命名空间的 catalog function ,需要指定一个新的 identifier ,可指定 language tag 。若函数不存在,删除会抛出异常。
  2. 如果 language tag JAVA 或者 SCALA ,则 identifier UDF 实现类的全限定名。关于 JAVA/SCALA UDF 的实现,请参考 [自定义函数](//ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/table/functions/udfs/)。
  3. 如果 language tag PYTHON identifier UDF 对象的全限定名,例如 `pyflink.table.tests.test_udf.add`。关于 PYTHON UDF 的实现,请参考 [Python UDFs](//ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/python/table/udfs/python_udfs/)。
  4. **TEMPORARY**
  5. 修改一个有 catalog 和数据库命名空间的临时 catalog function ,并覆盖原有的 catalog function
  6. **TEMPORARY SYSTEM**
  7. 修改一个没有数据库命名空间的临时系统 catalog function ,并覆盖系统内置的函数。
  8. **IF EXISTS**
  9. 若函数不存在,则不进行任何操作。
  10. **LANGUAGE JAVA\|SCALA\|PYTHON**
  11. Language tag 用于指定 Flink runtime 如何执行这个函数。目前,只支持 JAVASCALA PYTHON,且函数的默认语言为 JAVA