是否可以压缩已保存在Google云存储中的文件?
文件由Google数据流代码创建和填充。数据流无法写入压缩文件,但我的要求是将其保存为压缩格式。
答案 0 :(得分:3)
标准TextIO.Sink不支持写入压缩文件,因为从压缩文件中读取的可伸缩性较低 - 在没有首先解压缩的情况下,不能将文件拆分为多个工作程序。
如果您想这样做(并且不担心潜在的可伸缩性限制),您可以考虑编写一个压缩文件的自定义基于文件的接收器。您可以查看TextIO
示例,还可以查看docs how to write a file-based sink。
TextIO
的主要变化是修改TextWriteOperation
(扩展FileWriteOperation
)以支持压缩文件。
另外,请考虑针对Cloud Dataflow和/或Apache Beam提交功能请求。
答案 1 :(得分:2)
另一种选择可能是略微改变你的管道。
而不是直接写入GCS的管道,您可以写入BigQuery中的表,然后在管道完成后,只需使用GZIP压缩集将BigQuery导出作业启动到GCS。
https://cloud.google.com/bigquery/docs/exporting-data https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.extract.compression
答案 2 :(得分:0)
您可以编写应用程序(可能使用App Engine或Compute Engine)来执行此操作。您可以在存储桶上配置通知,以便在编写新对象时通知您的应用程序,然后运行,读取对象,压缩对象并覆盖对象并设置Content-Encoding元数据字段。因为对象写入是事务性的,所以对象的压缩形式在完成之前不会变得可见。请注意,如果您这样做,那么使用数据的任何应用/服务都需要能够处理压缩或未压缩格式。作为替代方案,您可以更改数据流设置,以便将其输出到临时存储桶,并为该存储桶设置通知以使您的压缩程序运行 - 然后该程序将压缩版本写入生产存储桶并删除未压缩的对象。