Google cloud dataflow 扳手中的查询计划
我正在执行一个查询:从emp中选择e.name,d.name作为e,department作为d,其中e.dept=d.dept;在扳手控制台上工作完全正常的扳手。 但是,当我尝试使用Apache Beam启动相同的查询时,会出现一个错误,即: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
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使用不同的查询执行路径,请遵循文档和