【问题标题】:Query cannot have any inequality filters查询不能有任何不等式过滤器
【发布时间】:2016-01-22 21:30:48
【问题描述】:

使用 DirectPipelineRunner 运行数据流时

        DatastoreV1.Query q = DatastoreV1.Query.newBuilder()
        .addKind(DatastoreV1.KindExpression.newBuilder().setName("KIND").build())
        .setFilter(DatastoreHelper.makeFilter(
            DatastoreHelper.makeFilter(
                "date", 
                DatastoreV1.PropertyFilter.Operator.GREATER_THAN_OR_EQUAL, 
                DatastoreHelper.makeValue(date)).build(),
            DatastoreHelper.makeFilter(
                "date", 
                DatastoreV1.PropertyFilter.Operator.LESS_THAN,
                DatastoreHelper.makeValue(next_date)).build()
        ))
        .build()

按预期工作。将作业提交到 Dataflow 时,我收到以下错误:

(4e1bbdfd880a21c1): java.lang.IllegalArgumentException: Query cannot have any inequality filters. at 
com.google.api.services.datastore.client.QuerySplitterImpl.validateFilter(QuerySplitterImpl.java:109) at 
com.google.api.services.datastore.client.QuerySplitterImpl.validateFilter(QuerySplitterImpl.java:105) at 
com.google.api.services.datastore.client.QuerySplitterImpl.validateQuery(QuerySplitterImpl.java:128) at 
com.google.api.services.datastore.client.QuerySplitterImpl.getSplits(QuerySplitterImpl.java:71) at com.google.cloud.dataflow.sdk.io.DatastoreIO$Source.getSplitQueries(DatastoreIO.java:426) at com.google.cloud.dataflow.sdk.io.DatastoreIO$Source.splitIntoBundles(DatastoreIO.java:305) at 
com.google.cloud.dataflow.sdk.runners.dataflow.CustomSources.performSplit(CustomSources.java:305) at 
com.google.cloud.dataflow.sdk.runners.dataflow.CustomSources.performSourceOperation(CustomSources.java:151) at 
com.google.cloud.dataflow.sdk.runners.worker.SourceOperationExecutor.execute(SourceOperationExecutor.java:62) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.executeWork(DataflowWorker.java:254) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.doWork(DataflowWorker.java:191) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.getAndPerformWork(DataflowWorker.java:144) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.doWork(DataflowWorkerHarness.java:180) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:161) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:148) at 
java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

我在本地有 Dataflow SDK 版本:1.3.0。

【问题讨论】:

    标签: google-cloud-dataflow google-cloud-datastore


    【解决方案1】:

    这是 Dataflow SDK for Java 1.4.0 及更早版本中的代码问题。我们会将其跟踪为Issue #101 in the GitHub's repository issue tracker。我们会尽快解决这个问题——请关注那里的更新。

    我现在想不出任何简单的解决方法。很抱歉!

    解决方案是更新到较新版本的 Dataflow SDK。

    【讨论】:

    • 还是有同样的问题,使用1.9.0版本
    • 在我的机器上本地使用 DirectPipelineRunner
    • @Ticex 数据存储查询拆分器不支持不等式过滤器。因此查询将由单个工作人员执行,但它仍应运行而不会失败(如本文所述,会出现警告异常消息)。你能发布你的代码和你在 DirectPipelineRunner 中看到的异常吗?
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2021-06-05
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多