标准TextIO. Sink不支持写入压缩文件,因为从压缩文件读取的可扩展性较差——如果不首先解压缩,则无法将文件拆分到多个工作人员。
如果您想这样做(并且不担心潜在的可伸缩性限制),您可以考虑编写一个自定义的基于文件的接收器来压缩文件。您可以查看TextIO
中的示例,还可以查看文档如何编写基于文件的接收器。
TextIO
的关键变化是修改TextWrite操作
(它扩展了FileWrite操作
)以支持压缩文件。
此外,请考虑针对Cloud Dataflow和/或Apache Beam提交功能请求。
另一种选择是稍微更改管道。
您可以在BigQuery中写入表,而不是将管道直接写入GCS,然后当您的管道完成后,只需启动BigQuery导出作业以使用GZIP压缩集GCS。
https://cloud.google.com/bigquery/docs/exporting-data https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.extract.compression
您可以编写一个应用程序(可能使用应用程序引擎或计算引擎)来执行此操作。您可以在存储桶上配置通知,以便在写入新对象时通知您的应用程序,然后运行、读取对象、压缩对象并覆盖对象并设置Content-Encode元数据字段。因为对象写入是事务性的,所以对象的压缩形式在完成之前不会变得可见。请注意,如果您这样做,任何使用数据的应用程序/服务都需要能够处理压缩或未压缩的格式。作为替代方案,您可以更改数据流设置,使其输出到临时存储桶,并为该存储桶设置通知以使您的压缩程序运行-然后该程序将压缩版本写入您的生产存储桶并删除未压缩的对象。