apache-flink - Apache Flink:JDBCInputFormat 返回什么类型的记录?
问题描述
我收到与setRowTypeInfo
for a相关的错误JDBCInputFormat
。错误如下。显然,的Tuple2
类型DataSet
不喜欢RowTypeInfo
,JDBCInputFormat
但我找不到任何地方提供有关如何定义格式的说明。
[错误] 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project flink: Compilation failure [ERROR] /Users/rocadmin/Desktop/flink/flink/src /main/java/svalarms/BatchJob.java:[125,48] 不兼容类型:推断类型不符合等式约束 [错误] 推断:org.apache.flink.api.java.tuple.Tuple2 [错误] 等式约束:org.apache.flink.api.java.tuple.Tuple2,org.apache.flink.types.Row [ERROR] [ERROR] -> [Help 1]
DataSet< Tuple2<Integer, Integer> > dbData =
env.createInput(
JDBCInputFormat.buildJDBCInputFormat()
.setDrivername("oracle.jdbc.driver.OracleDriver")
.setDBUrl("jdbc:oracle:thin:@//[ip]:1521/sdmprd")
.setQuery("" +
"SELECT T2.work_order_nbr, T2.work_order_nbr " +
"FROM sdm.work_order_master T2 " +
"WHERE " +
"TO_DATE(T2.date_entered + 19000000,'yyymmdd') >= CURRENT_DATE - 14 " +
"AND T2.W_O_TYPE = 'TC' " +
"AND T2.OFFICE_ONLY_FLG = 'N' " +
"")
.setRowTypeInfo(new RowTypeInfo(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO))
.finish()
);
解决方案
AJDBCInputFormat
返回类型为 的记录Row
。因此,结果DataSet
应输入为Row
,即
DataSet<Row> dbData =
env.createInput(
JDBCInputFormat.buildJDBCInputFormat()
.setDrivername("oracle.jdbc.driver.OracleDriver")
.setDBUrl("jdbc:oracle:thin:@//[ip]:1521/sdmprd")
.setQuery(
"SELECT T2.work_order_nbr, T2.work_order_nbr " +
"FROM sdm.work_order_master T2 " +
"WHERE " +
"TO_DATE(T2.date_entered + 19000000,'yyymmdd') >= CURRENT_DATE - 14 " +
"AND T2.W_O_TYPE = 'TC' " +
"AND T2.OFFICE_ONLY_FLG = 'N' "
)
.setRowTypeInfo(Types.ROW(Types.INT, Types.INT))
.finish()
);
推荐阅读
- excel - 如何编写一个 VBA 代码,它将遍历一个固定范围并在另一张表中填充该范围的每一行 N 次(带编号)?
- node.js - 使用 discord.js 命令处理程序捕获 NodeJS 错误
- python-3.x - 通过 httpd 导入 gurobi 时出现问题
- python - Python - 如何禁用从父目录导入的模块的日志记录?
- nginx - 如何调试 Kubernetes nginx 入口重定向从 HTTP 到 HTTPS
- python-3.x - 在 python 上使用 apsw 在 SQLite 中搜索值
- azure-devops - 如何将 Sonarqube 扫描添加到 NativeScript 应用程序?
- ruby-on-rails - 不能从 PostgreSQL/Rails 中的数组中降低值以进行不区分大小写的搜索
- laravel - Laravel 7 将数据传递给另一个控制器
- angular - Angular Session Storage Set 和 Get 在同一页面上