Как определить, из какого файла получена запись при чтении нескольких файлов паркета с помощью облачного потока данных Google - PullRequest
0 голосов
/ 18 сентября 2019

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

После многих попыток для массовых загрузок работает следующее, где options.input представляет собой RuntimeValueProvider и SplitFn просто yields str.split():

with beam.Pipeline(options=PipelineOptions(), argv=args) as p:
    mainPipe = p \
        | 'CSV of URIs' >> beam.Create([options.input]) \
        | 'Split URIs into records' >> beam.ParDo(SplitFn(',')) \
        | "Read Parquet" >> beam.io.parquetio.ReadAllFromParquet(columns=[k for k in fields.keys()]) 

К сожалению beam.io.parquetio.ReadAllFromParquet не скажет, из какого файла поступила каждая запись, и не будет ReadFromParquet, parquetio единственной другой функцией.

За исключением выхода из Google CloudПоток данных или обучение команде Java, что я могу сделать, чтобы загрузить много паркетных файлов одновременно в BigQuery и узнать, из какого файла пришла каждая запись?

1 Ответ

0 голосов
/ 19 сентября 2019

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

  • Расширение / изменение ReadAllFromParquet для добавления имени файла к выводу.
  • Использование BQ tools дляимпорт из паркета.Я не уверен, что у них точно такой же сценарий.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...