2017-06-03 15 views
0

GC Dataflowを初めて使用しましたが、ここで関連する回答が見つかりませんでした。もし私がこれをすでに見つけたなら、謝罪してください。Google Cloud Dataflow、BigQueryIO、TableRow.getのNullPointerException

私はv2.0 SDKを使用して単純なパイプラインを作成しようとしていますが、BigQueryIOを使用してPCollectionにデータを読み込む際に問題があります。 .withQueryメソッドを使用していて、BigQueryインターフェイスでクエリをテストしたところ、正常に動作しているようです。最初のPCollectionは問題なく作成されたようですが、セットアップで単純なParDo関数を使ってTableRowの値をPCollectionに変換すると、TableRowオブジェクトの.getを実行するコード行でNullPointerExceptionが発生します。

ここに私のコードです。 (私はおそらく、単純な何かが欠けている。私は、パイプラインのプログラミングでの総初心者です。任意の入力が最もいただければ幸いです。)

public class ClientAutocompletePipeline { 
    private static final Logger LOG = LoggerFactory.getLogger(ClientAutocompletePipeline.class); 


    public static void main(String[] args) { 
     // create the pipeline 
     Pipeline p = Pipeline.create(
       PipelineOptionsFactory.fromArgs(args).withValidation().create()); 

     // A step to read in the product names from a BigQuery table 
     p.apply(BigQueryIO.read().fromQuery("SELECT name FROM [beaming-team-169321:Products.raw_product_data]")) 

     .apply("ExtractProductNames", ParDo.of(new DoFn<TableRow, String>() { 
      @ProcessElement 
      public void processElement(ProcessContext c) { 
       // Grab a row from the BigQuery Results 
       TableRow row = c.element(); 

       // Get the value of the "name" column from the table row. 
       //NOTE: This is the line that is giving me the NullPointerException 
       String productName = row.get("name").toString(); 

       // Make sure it isn't empty 
       if (!productName.isEmpty()) { 
        c.output(productName); 
       } 
      } 
     })) 

問い合わせは間違いBigQueryのUIで動作し、「名前」という列がありますクエリをテストするときに返されます。この行にNullPointerExceptionが表示されるのはなぜですか:

String productName = row.get("name").toString(); 

アイデアはありますか?

+0

'name'列のすべての値がヌルでないことが保証されていますか? –

+1

BigQueryでSELECT name FROM [beaming-team-169321:Products.raw_product_data] nameを実行すると、null値があることがわかります。したがって、パイプラインでこれを考慮する必要があります。 –

+0

さて、今言えば、それは完璧な意味合いがあります。私は自分のコードに何らかのエラーがあったために何かがnullになるという誤った印象の下にあったと思うが、それはそうではないかもしれないと思う。返信ありがとう! – MrSimmonsSr

答えて

0

これは、BigQueryとDataflowを使用して作業しているときによく発生する問題です(おそらく、フィールドは実際にはnullです)。 Scalaを使用しても問題ない場合は、Scio(データフロー用のScala DSL)とBigQuery IOをご覧ください。

+0

お返事いただきありがとうございます!私はScalaの経験はありませんが、時間があると確かにチェックします。ありがとう! – MrSimmonsSr

関連する問題