首页 > 解决方案 > Apache Flink:JDBCInputFormat 返回什么类型的记录?

问题描述

我收到与setRowTypeInfofor a相关的错误JDBCInputFormat。错误如下。显然,的Tuple2类型DataSet不喜欢RowTypeInfoJDBCInputFormat但我找不到任何地方提供有关如何定义格式的说明。

[错误] 无法执行目标 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()
            );

标签: apache-flink

解决方案


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()
    );

推荐阅读