Google cloud dataflow 扳手中的查询计划

Google cloud dataflow 扳手中的查询计划,google-cloud-dataflow,apache-beam,google-cloud-spanner,Google Cloud Dataflow,Apache Beam,Google Cloud Spanner,我正在执行一个查询:从emp中选择e.name,d.name作为e,department作为d,其中e.dept=d.dept;在扳手控制台上工作完全正常的扳手。 但是,当我尝试使用Apache Beam启动相同的查询时,会出现一个错误,即: java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: com.google.cloud.spanner.SpannerException: INVALID_ARGUM

我正在执行一个查询:从emp中选择e.name,d.name作为e,department作为d,其中e.dept=d.dept;在扳手控制台上工作完全正常的扳手。 但是,当我尝试使用Apache Beam启动相同的查询时,会出现一个错误,即:

java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: com.google.cloud.spanner.SpannerException: INVALID_ARGUMENT: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: Queries with more than one DistributedUnion are currently considered not partitionable. Please view the query plan through the dev console, gcloud or using the API.
我使用的Apache Beam代码是:

p.apply(SpannerIO.read()
    .withSpannerConfig(spannerConfig)
    .withQuery("SELECT e.name,d.name FROM emp as e, department as d WHERE e.dept = d.dept;"))
.apply(ParDo.of(new DoFn<Struct,Struct>(){
    private static final long serialVersionUID = 1L;
    @ProcessElement
    public void processElement(ProcessContext c)
    {
          System.out.println(c.element().toString());
    }
 }));

我尝试查看查询执行计划,但不确定当同样的事情在扳手UI/控制台上正常工作时,预期会发生什么。

默认情况下,扳手使用谷歌云扳手的批处理API。批处理API试图将查询划分为多个可以并行获取的部分,但您的查询不支持这一点。您应该尝试通过调用扳手配置来强制扳手使用普通的扳手APIosthttps://spanner.googleapis.com

如今,云数据流连接器仅支持SQL查询,其中查询执行计划中的第一个运算符是分布式联合。请关注更多信息


在以下Apache Beam 2.5.0版本中,可以使用span.read.withBatchingfalse禁用批处理,请参阅此处的更多信息。

要澄清,仅更改主机是不够的。Panerio使用不同的查询执行路径,请遵循文档和