Java 试图从MS SQL读取数据集时JDBCInputFormat.open中的NullPointerException

Java 试图从MS SQL读取数据集时JDBCInputFormat.open中的NullPointerException,java,sql-server,jdbc,apache-flink,Java,Sql Server,Jdbc,Apache Flink,为了使用ApacheFlink,我尝试从Microsoft SQL数据库中提供的数据创建一个数据集。test_表有两列,“numbers”和“strings”,分别包含int和VARCHARs // supply row type info TypeInformation<?>[] fieldTypes = new TypeInformation<?>[] { BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.CHAR_

为了使用ApacheFlink,我尝试从Microsoft SQL数据库中提供的数据创建一个数据集。test_表有两列,“numbers”和“strings”,分别包含int和VARCHARs

// supply row type info
TypeInformation<?>[] fieldTypes = new TypeInformation<?>[] {
    BasicTypeInfo.INT_TYPE_INFO,
    BasicTypeInfo.CHAR_TYPE_INFO,
};

RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);

// create and configure input format
JDBCInputFormat inputFormat = JDBCInputFormat.buildJDBCInputFormat()
    .setDrivername("com.microsoft.sqlserver.jdbc.SQLServerDriver")
    .setDBUrl(serverurl)
    .setUsername(username)
    .setPassword(password)
    .setQuery("SELECT numbers, strings FROM test_table") 
    .setRowTypeInfo(rowTypeInfo)
    .finish();

// create and configure type information for DataSet
TupleTypeInfo typeInformation = new TupleTypeInfo(Tuple2.class, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);

// Read data from a relational database using the JDBC input format
DataSet<Tuple2<Integer, String>> dbData = environment.createInput(inputFormat, typeInformation);

// write to sink
dbData.print();
这让我没有真正的线索在哪里以及如何寻找解决方案。奇怪的是,在我将Flink JDBC版本从0.10.2更改为1.1.3之前,这段代码就工作了。旧版本不需要RowTypeInfo部分,这意味着它可能会检查类型本身,但除了将其添加到代码中之外,没有任何更改

那么,它很可能与RowTypeInfo有关。我尝试对它们进行一些更改,例如使用
BasicTypeInfo.CHAR\u TYPE\u INFO
而不是
BasicTypeInfo.STRING\u TYPE\u INFO
(因为该列是VARCHAR列),但错误仍然存在


理想情况下,我希望修复空指针问题,并继续处理包含数据库信息的数据集。考虑到缺乏文档/教程和(工作)示例,我还提出了一个更一般的问题:在Flink中尝试处理SQL数据到底是一个好主意,还是根本不适合这样做?到目前为止,我开始认为,在开始Flink作业之前,创建一个从数据库读取并将其内容保存到CSV文件的例程可能更容易,尽管这很乏味

您说您已经将Flink JDBC版本更新为1.1.3,但是Flink的其余部分呢?建议如果你有Flink其他部分的旧版本,那么你可能会得到这样的NPE。你是对的。我的pom.xml通过一个变量引用了Flink版本,在测试了Flink JDBC的新版本后,我忘记了更改它。哦。非常感谢!
Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.
    at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$7.apply$mcV$sp(JobManager.scala:714)
    at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$7.apply(JobManager.scala:660)
    at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$7.apply(JobManager.scala:660)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:401)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.NullPointerException
    at org.apache.flink.api.java.io.jdbc.JDBCInputFormat.open(JDBCInputFormat.java:231)
    at org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:147)
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:559)
    at java.lang.Thread.run(Thread.java:745)