2016-01-22 52 views
1

當與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。

回答

2

這是Dataflow SDK for Java版本1.4.0及更早版本中的代碼問題。我們會將其追蹤爲Issue #101 in the GitHub's repository issue tracker。我們會盡快解決這個問題 - 請按照這裏進行更新。

我現在不能認爲任何瑣碎的解決方法的。對於那個很抱歉!

該解決方案將更新到數據流SDK的更新版本。

+0

仍然有同樣的問題,使用版本1.9.0 – Ticex

+0

在本地機器上使用DirectPipelineRunner – Ticex

+0

@Ticex數據存儲區查詢拆分器不支持不等式過濾器。因此,查詢將由單個工作人員執行,但它應該仍然運行而不失敗(如本文所述,有警告異常消息)。你可以發佈你的代碼和你看到的DirectPipelineRunner異常嗎? –