使用Beam从oracle获取JDBC

时间:2016-11-10 10:27:53

标签: apache-beam apache-beam-io

以下程序是连接到Oracle 11g并获取记录。但是如何在pipeline.apply()中为编码器提供NullPointerException。

我已将ojdbc14.jar添加到项目依赖项中。

var host = req.headers.host;
var origin = req.headers.origin;

给出了以下错误。任何线索?

public static void main(String[] args) {

        Pipeline p = Pipeline.create(PipelineOptionsFactory.create());      
         p.apply(JdbcIO.<KV<Integer, String>>read()
                   .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
                          "oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@hostdnsname:port/servicename")
                   .withUsername("uname")
                   .withPassword("pwd"))
                   .withQuery("select EMPID,NAME from EMPLOYEE1")
                   .withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
                     public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
                       return KV.of(resultSet.getInt(1), resultSet.getString(2));
                     }
                   }));
         p.run();

    }

2 个答案:

答案 0 :(得分:1)

你好!

很抱歉,错误消息不是很有帮助,但事实上它是一个验证步骤。我已提交BEAM-959来改善这一点。

您需要提供编码器,例如via

.withCoder(KvCoder.of(VarIntCoder.of(), StringUtf8Coder.of())`

我已提交BEAM-960以改善此编码器的自动化,就像我们在Beam的其他大多数地方一样。

答案 1 :(得分:0)

试试这个。

 pipeline.apply(( JdbcIO.<KV<Integer, String>>read().withCoder(KvCoder.of(VarIntCoder.of(),StringUtf8Coder.of())) 
               .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
                      "com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/deepakgoyal")
                    .withUsername("root")
                    .withPassword("root"))
               .withQuery("select empid, name from employee")

               .withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
                 public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
                   return KV.of(resultSet.getInt(1), resultSet.getString(2));
                 }
               })
             ))

并且不要忘记在Project中添加mySql Connector jar。提前谢谢。