如何将 Google Datastore CompositeFilter 与 Dataflow 一起使用?
How to use Google Datastore CompositeFilter with Dataflow?
当从数据存储读取数据作为管道的输入时,我能够创建一个 "simple" 查询,我在其中对单个 属性 设置过滤器,如下所示:
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()" 调用在查询上应用多个过滤器时,只有最后一组过滤器应用于查询。
经过一些研究,我发现了一个 CompositeFilter,它应该可以启用多个过滤器的组合。我可以构建一个复合过滤器,但是当我想在查询中将其设置为过滤器时,IDE 抱怨类型不匹配并且似乎没有另一种应用过滤器的方法。
我通过使用 GQL 设法使用具有多个过滤器的查询,并且可以在日志中看到它已转换为 CompositeFilter。我不是来这里抱怨的,因为 GQL 的使用比手动构建 queries/filters 好得多,而是想问一下如何在 DatastoreIO.v1().read 的上下文中使用库的复合过滤器(....) 或者如果不可能的话。
我正在使用 com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all/2.2.0
感谢您的帮助。
根据文档,您可以。您可以使用 CompositeFilter newBuilder
方法,并创建如下过滤器:
Filter composeFilter = Filter.newBuilder() .setCompositeFilter(CompositeFilter.newBuilder().addFilters(filter1).addFilters(filter2).build()).build();
此处的 Filter1 和 Filter2 是类似于您创建的过滤器。我的 IDE 允许我这样做(我使用的是 IntelliJ IDEA,最新版本)。
当从数据存储读取数据作为管道的输入时,我能够创建一个 "simple" 查询,我在其中对单个 属性 设置过滤器,如下所示:
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()" 调用在查询上应用多个过滤器时,只有最后一组过滤器应用于查询。
经过一些研究,我发现了一个 CompositeFilter,它应该可以启用多个过滤器的组合。我可以构建一个复合过滤器,但是当我想在查询中将其设置为过滤器时,IDE 抱怨类型不匹配并且似乎没有另一种应用过滤器的方法。
我通过使用 GQL 设法使用具有多个过滤器的查询,并且可以在日志中看到它已转换为 CompositeFilter。我不是来这里抱怨的,因为 GQL 的使用比手动构建 queries/filters 好得多,而是想问一下如何在 DatastoreIO.v1().read 的上下文中使用库的复合过滤器(....) 或者如果不可能的话。
我正在使用 com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all/2.2.0
感谢您的帮助。
根据文档,您可以。您可以使用 CompositeFilter newBuilder
方法,并创建如下过滤器:
Filter composeFilter = Filter.newBuilder() .setCompositeFilter(CompositeFilter.newBuilder().addFilters(filter1).addFilters(filter2).build()).build();
此处的 Filter1 和 Filter2 是类似于您创建的过滤器。我的 IDE 允许我这样做(我使用的是 IntelliJ IDEA,最新版本)。