Как написать в BigQuery, используя схему, вычисленную во время выполнения потока данных?

У меня есть следующий сценарий:

  1. Pipeline A looks up table A in BigQuery, does some computation and returns a list of column names.
  2. This list of columns names is used as the BigQuery schema for output of pipeline B.

Не могли бы вы сообщить мне, что является лучшим вариантом для достижения этого?

Может ли конвейер A использовать TextIO для записи списка имен столбцов во временные или промежуточные файлы местоположения, которые затем считываются исполнителем конвейера для определения схемы для конвейера B. Если этот подход выглядит нормально, не могли бы вы сообщить мне, есть ли Утилита потока данных для чтения файлов из временного или промежуточного местоположения или если следует использовать GCS API.


person Lukasz Cwik    schedule 03.04.2015    source источник


Ответы (2)


Вам нужно будет сделать следующее:

  1. Construct Pipeline A to write to some location such as GCS (any durable location which you can reference when constructing pipeline B would work).
  2. Use the BlockingDataflowPipelineRunner to run and wait till Pipeline A is done.
  3. Construct Pipeline B by using the schema information by reading from the location you defined in step 1.
  4. Run Pipeline B.

Я бы не стал использовать временное местоположение, потому что мы можем очистить его, прежде чем вы приступите к строительству трубопровода B. Можно использовать промежуточное местоположение (если оно отличается от временного местоположения). Я бы также посоветовал использовать уникальное имя файла, чтобы, если конвейер A запускается несколько раз, вы не считывали устаревшие результаты с помощью конвейера B.

Это должно помочь вам читать и писать в GCS: https://github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/master/sdk/src/main/java/com/google/cloud/dataflow/sdk/util/GcsUtil.java

Вы можете получить экземпляр GcsUtil из объекта PipelineOptions: https://github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/master/sdk/src/main/java/com/google/cloud/dataflow/sdk./options/GcsOptions.java#L43

person Lukasz Cwik    schedule 03.04.2015

Это возможно с последней версией Apache Beam. См. мой более общий вопрос с самостоятельным ответом по адресу ">Запись разных значений в разные таблицы BigQuery в Apache Beam .

person jkff    schedule 04.05.2017