当从数据存储中读取数据作为管道的输入时,我能够创建一个简单的"查询,我在一个属性上设置过滤器,如下所示:
Pipeline p = ...
Filter filter = Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()
.setProperty(PropertyReference.newBuilder()
.setName("propertyA"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder().setStringValue("valueA").build())
.build())
.build();
Query query = Query.newBuilder()
.addKind(KindExpression.newBuilder().setName("myKind").build())
.setFilter(filter)
.build();
p.apply("read", DatastoreIO.v1().read().withProjectId("myProjectId")
.withNamespace("myNamespace").withQuery(query)).apply(.....
当我尝试通过连接" setFilter()" -calls在查询上应用多个过滤器时,只有最后一组过滤器应用于查询。
经过一些研究,我发现了一个CompositeFilter,它应该能够组合多个过滤器。我可以构建一个复合过滤器,但是当我想在查询中将其设置为过滤器时,IDE会抱怨这些类型不匹配,并且似乎不是应用过滤器的另一种方法。 / p>
我设法通过使用GQL使用带有多个过滤器的查询,并且可以在日志中看到它被转换为CompositeFilter。我不是在抱怨因为GQL的使用比手工构建查询/过滤器要好得多,但是想问一下如何在数据库中使用数据库WOULD的复合过滤器。读取(。 ......)或者如果不可能的话。
我正在使用com.google.cloud.dataflow / google-cloud-dataflow-java-sdk-all / 2.2.0
感谢您的帮助。
答案 0 :(得分:1)
根据文档,您可以。您可以使用CompositeFilter newBuilder
方法,并创建一个如下所示的过滤器:
Filter composeFilter = Filter.newBuilder() .setCompositeFilter(CompositeFilter.newBuilder().addFilters(filter1).addFilters(filter2).build()).build();
Filter1和Filter2类似于您创建的过滤器。我的IDE允许我执行此操作(我使用的是IntelliJ IDEA,最新版本)。