将ValueProvider与DatastoreIO.Read一起使用

时间:2017-10-11 14:05:47

标签: google-cloud-dataflow

我在Java SDK 1.9.1版中使用了数据流。 我需要从数据存储区读取某种类型,使用DataStoreIO并创建一个PCollection<实体>。我使用TemplateRunner运行数据流作业。当模板启动时,我需要读取的类型的名称将通过PipelineOptions传递。 (即,在图形构建时不知道) 如何使用ValueProvider为类型名称创建KindExpression。

EG。如果在图形构建时知道名称,我可以这样做 -

KindExpression k = KindExpression.newBuilder().setName("abc").build()
PCollection<Entity> myentities = pipeline.apply(DatastoreIO.v1().read().withProjectId("my-project").withQuery(Query.newBuilder().addKind(k).build()));

如果我事先不知道名字,我该如何构建查询。例如,TextIO有一个使用“withoutValidation”的条款

PCollection<String> mergeRuleTemplateString = pipeline
            .apply(TextIO.Read.from(options.getInputFile()).withoutValidation());

DataStoreIO中是否有类似内容

1 个答案:

答案 0 :(得分:1)

是的,但不是在1.9.1中 - 对ValueProvider的支持已添加到2.0.0中的DatastoreIO(JIRA BEAM-1076)。请注意,目前仅通过.withLiteralGqlQuery(ValueProvider<String>)javadoc)支持文字GQL查询。