2017-01-20 17 views
0

を失敗し、私は、テンプレートデータフロージョブのこの単純な例を作成しました:ステージングデータフローテンプレートジョブがデータフロー<a href="https://cloud.google.com/dataflow/docs/templates/creating-templates" rel="nofollow noreferrer">Creating Templates</a>ガイドに続き

public class Runner { 
    public static void main(final String[] args) { 
    final PlaygroundPipelineOptions options = 
     PipelineOptionsFactory.fromArgs(args).withValidation().as(PlaygroundPipelineOptions.class); 

    options.setRunner(TemplatingDataflowPipelineRunner.class); 
    options.setZone("***"); 
    options.setNetwork("***"); 
    options.setSubnetwork("***"); 
    options.setStagingLocation("***"); 
    options.setDataflowJobFile("***"); 

    final Pipeline pipeline = Pipeline.create(options); 

    pipeline 
     .apply(TextIO.Read.from(options.getInput()).named("TextIO.Read")) 
     .apply(MapElements.via(new SimpleFunction<String, String>() { 
      @Override 
      public String apply(String input) { 
      return input.toUpperCase(); 
      } 
     })) 
     .apply(TextIO.Write.to(options.getOutput()).named("TextIO.Write")); 

    pipeline.run(); 
    } 

    private interface PlaygroundPipelineOptions extends DataflowPipelineOptions { 
    @Description("Input path") 
    @Validation.Required 
    ValueProvider<String> getInput(); 

    void setInput(ValueProvider<String> input); 

    @Description("Output path") 
    @Validation.Required 
    ValueProvider<String> getOutput(); 

    void setOutput(ValueProvider<String> input); 
    } 
} 

をしかし、それを実行しようとした後、それが次の例外で失敗します

Exception in thread "main" java.lang.IllegalStateException: Cannot validate with a filepattern provided at runtime. 

ValueProvider#get()が呼び出されたときに問題が発生しますが、テンプレートジョブをステージングする上で適切な方法はありますが、これらのエラーはありません。

答えて

0

これはTextIO sourceから来ているようです。この解決策は、TextIOソースの検証を無効にする可能性があります。withoutValidation()を呼び出すには、検証中にfilepatternを使用できないためです。

+0

これはまさに私がアドホックな解決策として行ったことですが、ガイドを読み、ジョブをテンプレート化することによってsdkはこれを適切に処理する必要があります。一般的に、ValueProvider#isAccessible()は、ValueProvider#get()が例外をスローするのと同じ、falseを返します。 – robosoul

+0

私はそれが単にドキュメントが不足していると信じています。パイプラインテンプレートの作成時に検証が実行されます。 filepatternの値は、パイプラインテンプレートを使用してジョブを実行するまで利用できないため、アクセスできず、テンプレートの作成中に検証することもできません。したがって、エラー(明確にする必要があります)。 –

関連する問題