2016-08-09 2 views
2

Можно ли сжать файл, уже сохраненный в хранилище облачных хранилищ Google?Сжатие файлов, сохраненных в хранилище облачных хранилищ Google

Файлы создаются и заполняются кодом потока данных Google. Dataflow не может записывать в сжатый файл, но мое требование - сохранить его в сжатом формате.

ответ

0

Чтобы сделать это, вы можете написать приложение (возможно, с помощью App Engine или Compute Engine). Вы должны настроить уведомления в ведре, чтобы ваше приложение было уведомлено о том, когда новый объект написан, а затем запускается, читает объект, сжимает его и перезаписывает объект и задает поле метаданных Content-Encoding. Поскольку записи объектов являются транзакционными, сжатая форма вашего объекта не станет видимой до тех пор, пока она не будет завершена. Обратите внимание: если вы сделаете это, любые приложения/службы, которые потребляют данные, должны иметь возможность обрабатывать сжатые или несжатые форматы. В качестве альтернативы вы можете изменить свою настройку потока данных, чтобы она выходила во временное ведро и настраивала уведомления для этого ведра, чтобы заставить вашу программу сжатия запускаться, - и затем эта программа записывает сжатую версию в ваш производственный ковш и удаляет несжатый объект.

2

Другим вариантом может быть изменение конвейера.

Вместо того, чтобы ваш конвейер записывал непосредственно в GCS, вы можете писать в таблицу (ы) в BigQuery, а затем, когда ваш конвейер закончен, просто отправьте задание на экспорт BigQuery в GCS с набором GZIP-сжатия.

https://cloud.google.com/bigquery/docs/exporting-data https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.extract.compression

3

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

Если вы хотите сделать это (и не беспокоитесь о потенциальных ограничениях масштабируемости), вы можете посмотреть на создание пользовательской файловой системы, которая сжимает файлы. Вы можете посмотреть на TextIO для примера, а также посмотреть на docs how to write a file-based sink.

Изменение ключа от TextIO будет изменять TextWriteOperation (который расширяет FileWriteOperation) для поддержки сжатых файлов.

Также рассмотрите вопрос о подаче заявки на функцию с Cloud Dataflow и/или Apache Beam.