Проблемы при извлечении данных из большого запроса во второй раз с использованием потока данных [apache beam] - PullRequest
0 голосов
/ 12 января 2020

У меня есть требование извлечь данные из таблицы BigQuery с использованием Dataflow и записать в корзину GCS. Поток данных строится с использованием луча apache (Java). Поток данных извлекается из BigQuery и идеально записывается в GCS в первый раз.

Но когда вращается второй поток данных для извлечения данных из той же таблицы после успешного выполнения первого конвейера, он не извлекает никаких данных из Big Запрос. Единственная ошибка, которую я вижу в журнале стекового драйвера:

Blockquote "Запрос не выполнен с кодом 409, выполнено 0 попыток из-за исключений IOException, выполнено 0 попыток из-за неудачных кодов состояния, HTTP-структура сообщает, что запрос может быть retried, (вызывающий абонент отвечает за повторную попытку): https://www.googleapis.com/bigquery/v2/projects/dataflow-begining/jobs "

Пример кода, который я использовал для извлечения:

 pipeline.apply("Extract from BQ", BigQueryIO.readTableRows().fromQuery("SELECT * from bq_test.employee"))

Любая помощь приветствуется

1 Ответ

2 голосов
/ 12 января 2020

Я видел это раньше при использовании шаблонов. Согласно документам здесь , в Использование с шаблонами раздел:

При использовании read () или readTableRows () в шаблон, необходимо указать BigQueryIO.Read.withTemplateCompatibility (). Указывать это в не шаблонном конвейере не рекомендуется, поскольку он имеет несколько более низкую производительность.

и в разделе withTemplateCompatibility:

Используйте новую реализацию, совместимую с шаблоном. Эта реализация совместима с повторяющимися вызовами шаблонов.

Если это так, вы должны использовать:

pipeline.apply("Extract from BQ", BigQueryIO
        .readTableRows()
        .withTemplateCompatibility()
        .fromQuery("SELECT * from bq_test.employee"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...