博客背景
最近,使用flink读取postgresql的表数据时,代码一直报错,提示表不存在。通过debug发现,flink-jdbc的JDBCDialect类存在一点问题,现记录如下。
环境说明
flink版本:1.9.1
scala版本:2.12
postgresql数据库表结构:
ipark_datacenter:
--ods
– t_test(id, name)
测试代码
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.SqlTimeTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.io.jdbc.JDBCAppendTableSink;
import org.apache.flink.api.java.io.jdbc.JDBCOptions;
import org.apache.flink.api.java.io.jdbc.JDBCTableSource;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.table.api.java.StreamTableEnvironment;
import org.apache.flink.table.descriptors.Json;
import org.apache.flink.table.descriptors.Kafka;
import org.apache.flink.table.descriptors.Rowtime;
import org.apache.flink.table.descriptors.Schema;
import org.apache.flink.table.types.DataType;
import org.apache.flink.table.types.utils.TypeConversions;
import org.apache.flink.types.Row;
/**
* @Author: maozl
* @Date: 2019/10/17 17:14
* @Description:
*/
public class FlinkJdbcDialectBugShow {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
//jdbc
JDBCOptions jdbcOptions = JDBCOptions.builder()
.setDriverName("org.postgresql.Driver")
.setDBUrl("jdbc:postgresql://127.0.0.1:65432/ipark_datacenter")
.setUsername("root")
.setPassword("admin")
.setTableName("ods.t_test")
.build();
TableSchema tableSchema = TableSchema.builder()
.fields(new String[]{
"id", "name"}, new DataType[]{
TypeConversions.fromLegacyInfoToDataType(BasicTypeInfo.INT_TYPE_INFO), TypeConversions.fromLegacyInfoToDataType

在使用Flink 1.9.1版本读取PostgreSQL数据库时,遇到表不存在的错误。经过Debug发现,由于JDBCDialect类中quoteIdentifier()方法处理表名时,额外添加了引号导致问题。解决方案是对含schema的表名进行特殊处理,避免直接调用该方法。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



