Wait.on (сигналы) использовать в Apache Beam - PullRequest
0 голосов
/ 22 мая 2018

Возможно ли выполнить запись во 2-ю таблицу BigQuery после того, как запись в 1-ю завершена в пакетном конвейере с использованием метода Wait.on () (новая функция в Apache Beam 2.4)?Пример, приведенный в документации по Apache Beam:

 PCollection<Void> firstWriteResults = data.apply(ParDo.of(...write to first database...));
 data.apply(Wait.on(firstWriteResults))
     // Windows of this intermediate PCollection will be processed no earlier than when
     // the respective window of firstWriteResults closes.
     .apply(ParDo.of(...write to second database...));

Но зачем мне писать в базу данных из ParDo?Разве мы не можем сделать то же самое, используя преобразования ввода / вывода, данные в Dataflow?

Спасибо.

1 Ответ

0 голосов
/ 17 июля 2018

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

Чтобы выполнить эту работу, вы можете сделать что-то вроде следующего:

WriteResult writeResult = data.apply(BigQueryIO.write()
     ...
     .withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS) 
);

data.apply(Wait.on(writeResults.getFailedInserts()))
    .apply(...some transform which writes to second database...);

Следует отметить, что это работает только с потоковыми вставками и не работает с загрузками файлов.В то же время в настоящее время проводится определенная работа для лучшей поддержки этого варианта использования, которому вы можете следовать здесь

Полезные ссылки:

...