Apache Flink 创建 Table

Apache Flink Create Table

我正在尝试使用以下代码在 Java 中使用 Table API 在 flink 中创建 table 使用 Eclipse。

EnvironmentSettings settings = EnvironmentSettings
            .newInstance()
            .inStreamingMode()
            .build();

TableEnvironment tEnv = TableEnvironment.create(settings);

tEnv.executeSql("CREATE TABLE sink_table (" +
            "    `user_a` BIGINT," +
            "    `product` VARCHAR," +
            "    `amount` BIGINT," +
            "    `name_list` ARRAY<STRING>," +
            "    `id_list` ARRAY<INT>," +
            "    PRIMARY KEY (user_a) NOT ENFORCED " +
            ") WITH (" +
            ")");

但是程序退出时没有在 Flink SQL 客户端中创建任何 table。如何创建 table?

注意:它是通过 SQL 客户端直接创建的。我的环境也是 运行 Word Count Program through the same setup of eclipse.

同时检查 https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/create/ 是否有类似的代码。

一个 Flink SQL table 只不过是描述如何解释 存储(或将存储)在别处的数据 。当您创建这样一个 table 时,有必要指定数据的实际位置(或将要写入的位置):例如,Kafka 主题、文件、PostgreSQL table 等. 有关数据存储位置的信息位于 CREATE TABLE 语句的 WITH (...) 部分。

如果您想在多个应用程序中使用此 table,在 SQL 客户端中使用 and/or,您有两种选择。您可以在每个要使用相同 table 的地方使用相同的“CREATE TABLE ...”的副本,或者您可以保存 table(不是基础数据,但只是目录中的 table 元数据)。

在您在问题中分享的 Java 代码中,您在临时目录中为该作业创建了一个 table。如果您希望 SQL 客户端能够直接使用它,则需要将其保存在永久目录中,或者您可以在 SQL 客户端中创建一个副本 table(此“ duplicate”将引用相同的基础数据;只有 table 元数据会被复制。

由于此 table 未与任何数据存储相关联,因此不太可用。