google-cloud-datastore - 如何将 Google Datastore CompositeFilter 与 Dataflow 结合使用?

标签 google-cloud-datastore google-cloud-dataflow apache-beam

当从数据存储区读取数据作为管道的输入时,我可以创建一个“简单”查询,在其中对单个属性设置过滤器,如下所示:

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 的使用比手动构建查询/过滤器要好得多,但我想问一下如何在 DatastoreIO.v1().read( 的上下文中使用库的复合过滤器。 ...)或者如果不可能的话。

我正在使用 com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all/2.2.0

感谢您的帮助。

最佳答案

根据文档,您可以。您可以使用CompositeFilter newBuilder 方法,并创建一个如下所示的过滤器:

过滤器 composeFilter = Filter.newBuilder() .setCompositeFilter(CompositeFilter.newBuilder().addFilters(filter1).addFilters(filter2).build()).build();

此处的 Filter1 和 Filter2 是与您创建的过滤器类似的过滤器。我的 IDE 允许我执行此操作(我使用的是 IntelliJ IDEA,最新版本)。

关于google-cloud-datastore - 如何将 Google Datastore CompositeFilter 与 Dataflow 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50879146/

相关文章:

google-cloud-dataflow - 数据流批处理作业卡在 GroupByKey.create() 中

python - Dataflow Streaming 使用 Python SDK : Transform for PubSub Messages to BigQuery Output

apache-flink - 在 EMR 上使用 flink yarn session 运行 beam pipeline

java - 无法使用相同的 ID 在数据库中重新创建 Google 数据存储 key

java - GCP数据流流模板: Not able to customize google provided java based PubSubToBQ template

google-app-engine - Google AppEngine-未捕获的异常“Google_IO_Exception”无法连接

google-cloud-dataflow - 谷歌云数据流使用的凭据

java - 在云数据库上使用 Apache Beam 更改文件元数据?

python - 我应该向继承 db.Model 的类添加方法,还是应该将这些类继承到新类中?

python - Google Cloud Datastore - 是否可以为单个根实体使用事务?