2016-11-10 12 views
1

以下のプログラムは、Oracle 11gに接続してレコードをフェッチします。 pipeline.apply()のコーダーのNullPointerExceptionをどうやって受け取っていますか?JDBC Beamを使用したOracleからのフェッチ

ojdbc14.jarをプロジェクトの依存関係に追加しました。

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

    } 

は以下のエラーを示しています。手がかりはありますか?そこ

Exception in thread "main" java.lang.NullPointerException: coder 
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:228) 
    at org.apache.beam.sdk.io.jdbc.JdbcIO$Read.validate(JdbcIO.java:283) 
    at org.apache.beam.sdk.io.jdbc.JdbcIO$Read.validate(JdbcIO.java:216) 
    at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:399) 
    at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:307) 
    at org.apache.beam.sdk.values.PBegin.apply(PBegin.java:47) 
    at org.apache.beam.sdk.Pipeline.apply(Pipeline.java:158) 
    at org.apache.beam.examples.v030.JdbcUtil.main(JdbcUtil.java:21) 

答えて

1

こんにちは!

ご迷惑をおかけして申し訳ございませんが、実際には確認のステップです。私はこれを改善するためにBEAM-959を提出しました。

あなたは、このような私たちはビーム内の他のほとんどの場所で持っているように、このコーダの自動化を向上させるためにBEAM-960を提出した

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

経由としてコーダを提供するために必要とされます。

+0

上記の変更を加えて、上記の投稿を編集しました。以下のエラーが出ています。スレッド「main」の例外org.apache.beam.runners.direct.repackaged.com.google.common.util.concurrent.UncheckedExecutionException:org.apache.beam.sdk.util.UserCodeException:java.lang.AbstractMethodError:oracle。 jdbc.driver.T4CConnection.isValid(I)Z – naga

+0

紛失しているものはありますか? – naga

+0

@ Kenn、この問題を解決するには、追加情報が必要な場合はお知らせください。 – naga

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

また、mySql Connector jarをプロジェクトに追加することを忘れないでください。前もって感謝します。

+0

提供されたコードにいくつかのコンテキストを追加しようとします。 – Alexei

+0

謝罪、しかし、私はあなたが何を望んでいるのか理解していませんでした。 –

関連する問題