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

В настоящее время используется Dataflow для чтения в таблице данных из BigQuery и записи в облачное хранилище с заданным количеством шардов.

//Read Main Input
PCollection<TableRow> input = pipeline.apply("ReadTableInput",
    BigQueryIO.readTableRows().from("dataset.table"));

// process and write files
input.apply("ProcessRows", ParDo.of(new Process())
    .apply("WriteToFile", TextIO.write()
        .to(outputFile)
        .withHeader(HEADER)
        .withSuffix(".csv")
        .withNumShards(numShards));

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

Можно ли вместо заданного количества шардов установить размер файла и сделать его динамическим?

1 Ответ

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

По замыслу это невозможно.Если вы глубоко погрузитесь в ядро ​​Beam, вы программно определяете график выполнения, а затем запускаете его.Процесс является массово параллельным (ParDo означает «Параллельное выполнение») на одном и том же узле или на нескольких узлах / виртуальных машинах.

Здесь количество шардов - это просто число «писателей», которые будут работать параллельно для записи файлов.Затем PCollection будет разделен на все рабочие записи.

Размер очень изменчив (например, размер сообщения, кодировка текста, сжатие или нет и коэффициент сжатия, ...), и Beam не может полагаться на него длястроит свой график.

...