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()
が呼び出されたときに問題が発生しますが、テンプレートジョブをステージングする上で適切な方法はありますが、これらのエラーはありません。
これはまさに私がアドホックな解決策として行ったことですが、ガイドを読み、ジョブをテンプレート化することによってsdkはこれを適切に処理する必要があります。一般的に、ValueProvider#isAccessible()は、ValueProvider#get()が例外をスローするのと同じ、falseを返します。 – robosoul
私はそれが単にドキュメントが不足していると信じています。パイプラインテンプレートの作成時に検証が実行されます。 filepatternの値は、パイプラインテンプレートを使用してジョブを実行するまで利用できないため、アクセスできず、テンプレートの作成中に検証することもできません。したがって、エラー(明確にする必要があります)。 –