org.apache.flink.table.api.TableException: Sink does not exists

FlinkSQL_1.12_用DDL实现Kafka到MySQL的数据传输_实现按照条件进行过滤写入MySQL_flink从kafka拉取数据并过滤数据写入mysql_旧城里的阳光的博客-CSDN博客

参考这篇文章,写了kafka到mysql的代码例子,因为自己改了表结构,运行下面代码:

java 复制代码
package org.test.flink;
 
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
 
//TODO 用DDL实现Kafka到MySQL的数据传输
public class FlinkSQL15_SQL_DDL_Kafka_MySQL {
    public static void main(String[] args) throws Exception {
        //1.获取执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
 
        //2.使用DDL的方式加载数据--注册SourceTable
        tableEnv.executeSql("create table source_sensor(account_id  BIGINT)" +
                "with (" +
                "'connector.type' = 'kafka'," +
                "'connector.version' = 'universal'," +
                "'connector.topic' = 'testtopic'," +
                "'connector.properties.bootstrap.servers' = '11.0.24.216:9092'," +
                "'connector.properties.group.id' = 'bigdata1109'," +
                "'format.type' = 'json'"
                + ")");
 
        Table table = tableEnv.sqlQuery("select * from source_sensor");
 
        //3.注册SinkTable:Mysql
        tableEnv.executeSql("CREATE TABLE spend_report (\n" +
                "    account_id BIGINT,\n" +
                "    PRIMARY KEY (account_id) NOT ENFORCED)" +
                "with (" +
                "'connector' = 'jdbc'," +
                "'url' = 'jdbc:mysql://11.0.24.216:4306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false',"+
                "'table-name' = 'spend_report',"+
                "'username' = 'root',"+
                "'password' = '123456'"
                + ")");
 
       //4.执行查询kafka数据
//        Table source_sensor = tableEnv.from("source_sensor");
//        //5.将数据写入Mysql
//        source_sensor.executeInsert("sink_sensor");
//
        table.executeInsert("sink_sensor");
 
        //6.执行任务
        env.execute();
    }
}

发现报错如下:

java 复制代码
Exception in thread "main" org.apache.flink.table.api.TableException: Sink `default_catalog`.`default_database`.`sink_sensor` does not exists
	at org.apache.flink.table.planner.delegation.PlannerBase.translateToRel(PlannerBase.scala:247)
	at org.apache.flink.table.planner.delegation.PlannerBase.$anonfun$translate$1(PlannerBase.scala:159)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)
	at scala.collection.Iterator.foreach(Iterator.scala:943)
	at scala.collection.Iterator.foreach$(Iterator.scala:943)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
	at scala.collection.IterableLike.foreach(IterableLike.scala:74)
	at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
	at scala.collection.TraversableLike.map(TraversableLike.scala:286)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:279)
	at scala.collection.AbstractTraversable.map(Traversable.scala:108)
	at org.apache.flink.table.planner.delegation.PlannerBase.translate(PlannerBase.scala:159)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.translate(TableEnvironmentImpl.java:1329)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.executeInternal(TableEnvironmentImpl.java:676)
	at org.apache.flink.table.api.internal.TableImpl.executeInsert(TableImpl.java:572)
	at org.apache.flink.table.api.internal.TableImpl.executeInsert(TableImpl.java:554)
	at org.test.flink.FlinkSQL15_SQL_DDL_Kafka_MySQL.main(FlinkSQL15_SQL_DDL_Kafka_MySQL.java:50)

点击table.executeInsert看了下源码:

java 复制代码
    /**
     * Writes the {@link Table} to a {@link TableSink} that was registered under the specified path,
     * and then execute the insert operation.
     *
     * <p>See the documentation of {@link TableEnvironment#useDatabase(String)} or {@link
     * TableEnvironment#useCatalog(String)} for the rules on the path resolution.
     *
     * <p>A batch {@link Table} can only be written to a {@code
     * org.apache.flink.table.sinks.BatchTableSink}, a streaming {@link Table} requires a {@code
     * org.apache.flink.table.sinks.AppendStreamTableSink}, a {@code
     * org.apache.flink.table.sinks.RetractStreamTableSink}, or an {@code
     * org.apache.flink.table.sinks.UpsertStreamTableSink}.
     *
     * <p>Example:
     *
     * <pre>{@code
     * Table table = tableEnv.fromQuery("select * from MyTable");
     * TableResult tableResult = table.executeInsert("MySink");
     * tableResult...
     * }</pre>
     *
     * @param tablePath The path of the registered TableSink to which the Table is written.
     * @return The insert operation execution result.
     */
    TableResult executeInsert(String tablePath);

发现executeInsert方法的参数tablePath需要传入表名,这里的表名应该和

java 复制代码
tableEnv.executeSql("create table source_sensor(account_id  BIGINT)"

的表名source_sensor一致。

将:

java 复制代码
table.executeInsert("sink_sensor");

改成:

java 复制代码
table.executeInsert("source_sensor");

后执行成功。

flink1.2的demo完整代码:flink-java-1.12.7: flink1.12.7的java demo,包括flink wordcount示例,如何连接kafka

相关推荐
盘古信息IMS15 分钟前
富乐德传感技术&盘古信息 | 锚定“未来工厂”新坐标,开启传感器制造行业数字化转型新征程
大数据·人工智能·制造
lboyj20 分钟前
从AI到新能源:猎板PCB的HDI技术如何定义高端制造新标准?
大数据·人工智能
开目软件23 分钟前
开目新一代MOM:AI赋能高端制造的破局之道
大数据·人工智能·制造·mom·开目软件
郭不耐26 分钟前
DeepSeek智能时空数据分析(八):NL2SQL绘制河流-轨迹缓冲区如何生成
大数据·数据分析·云计算·aigc·数据可视化
果冻人工智能1 小时前
AI能否取代软件架构师?我将4个大语言模型进行了测试
大数据·人工智能·深度学习·语言模型·自然语言处理·ai员工
Acrel136119655141 小时前
Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计
大数据·人工智能·能源·创业创新
大腾智能2 小时前
五一旅游潮涌:数字化如何驱动智慧旅游升级
大数据·人工智能·数字化·旅游数字化
斯普信专业组2 小时前
Elasticsearch内存管理与JVM优化:原理剖析与最佳实践
大数据·jvm·elasticsearch
网安INF4 小时前
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437)
java·网络安全·apache
Wnq100724 小时前
数据链共享:从印巴空战到工业控制的跨越性应用
大数据·人工智能·数据链共享