如何将Google Cloud Platform上的文件从一个存储桶压缩到另一个存储桶

时间:2020-04-27 15:14:19

标签: google-cloud-platform

我正在尝试 gzip 在Google Cloud Platform上的文件。

我无法做到。我已经尝试了很多天了。我研究了许多答案,但没有一个人问得这么直。

因此,如果我有文件gs://source/data.csv 6gb

我想在新存储段gs://target/data.csv.gz 1.5gb

上输出

cp -z或-Z选项不会更改文件大小。我们是否有一个班轮指令可以执行相同的操作。

尝试的命令是:-

user@cloudshell:~ (userx)$ gsutil cp -z text/csv gs://databucket/xyzppp/test_folder/usuals_1_0_20200412084238_P.csv gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv.gz
Copying gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv [Content-Type=text/csv]...
- [1 files][ 31.7 MiB/ 31.7 MiB]
Operation completed over 1 objects/31.7 MiB.
user@cloudshell:~ (userx)$ gsutil cp -z text/gzip gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv.gz                                                                                                                              
Copying gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv [Content-Type=text/csv]...
- [1 files][ 31.7 MiB/ 31.7 MiB]
Operation completed over 1 objects/31.7 MiB.
user@cloudshell:~ (userx)$ gsutil cp -z text/plain gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P1.csv.gz                                                                                                                            
Copying gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv [Content-Type=text/csv]...
- [1 files][ 31.7 MiB/ 31.7 MiB]
Operation completed over 1 objects/31.7 MiB.
user@cloudshell:~ (userx)$ gsutil cp -z gzip gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P1.csv.gz                                                                                                                                  
Copying gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv [Content-Type=application/octet-stream]...
- [1 files][ 31.7 MiB/ 31.7 MiB]
Operation completed over 1 objects/31.7 MiB.
user@cloudshell:~ (userx)$ gsutil cp -z application/gzip gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P1.csv.gz                                                                                                                                  
Copying gs://databucket/xyzppp/test_folder/XXXX_1_0_20200412084238_P.csv [Content-Type=application/octet-stream]...
- [1 files][ 31.7 MiB/ 31.7 MiB]
Operation completed over 1 objects/31.7 MiB.

下面是示例,在尝试对18 gb文件进行压缩之前,我尝试先gzip小文件。我们可以注意到-z选项后文件大小保持不变。好像我在linux上复制相同文件并运行"gzip filename"一样,它的大小变为6mb。

an example for doing same with 37 mb file

1 个答案:

答案 0 :(得分:0)

根据John的评论,并按照documentation

由于-z / -Z选项会在上传之前压缩数据

您不能使用-Z标志来压缩已经上传的文件。

如果要压缩已上传到Google Cloud Storage的文件,可以使用Dataflow templates for Bulk Compress

这可以使用一个命令来完成:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates/latest/Bulk_Compress_GCS_Files \
    --parameters \
inputFilePattern=gs://YOUR_BUCKET_NAME/uncompressed/*.txt,\
outputDirectory=gs://YOUR_BUCKET_NAME/compressed,\
outputFailureFile=gs://YOUR_BUCKET_NAME/failed/failure.csv,\
compression=COMPRESSION

或者您可以按照上面链接的说明在控制台上执行此压缩。