План запросов в Шпаннере - PullRequest
0 голосов
/ 13 июня 2018

Я выполняю запрос: "SELECT e.name,d.name FROM emp as e, department as d WHERE e.dept = d.dept;" в Spanner, который прекрасно работает на консоли Spanner.Но когда я пытаюсь выполнить тот же запрос с использованием 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());
    }
 }));

Я пыталсяпрорабатывает план выполнения запроса, но не уверен, что именно ожидается, когда то же самое отлично работает в интерфейсе или консоли Spanner.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Сегодня коннектор Cloud Dataflow поддерживает только SQL-запросы, где первым оператором в плане выполнения запросов является Distributed Union.Пожалуйста, следуйте https://cloud.google.com/spanner/docs/dataflow-connector#troubleshooting_unsupported_queries для получения дополнительной информации.

В следующем выпуске Apache Beam 2.5.0 будет возможно отключить пакетирование с помощью SpannerIO.read().withBatching(false), подробнее здесь https://issues.apache.org/jira/browse/BEAM-3973.

0 голосов
/ 13 июня 2018

SpannerIO по умолчанию использует пакетный API Google Cloud Spanner (https://batch -spanner.googleapis.com / ).Пакетный API пытается разделить ваши запросы на несколько частей, которые могут быть извлечены параллельно, но ваш запрос не поддерживает это.Вы должны попытаться заставить SpannerIO использовать обычный API Spanner, вызвав SpannerConfig#setHost("https://spanner.googleapis.com")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...