Google bigquery 如何将多个文件作为事务上传到google云存储桶

Google bigquery 如何将多个文件作为事务上传到google云存储桶,google-bigquery,google-cloud-storage,Google Bigquery,Google Cloud Storage,用例: 将多个文件上载到云存储桶中,然后将该数据用作bigquery导入的源。使用bucket的名称作为元数据,以驱动数据应该进入哪个分片表 问题: 为了防止部分导入到bigquery表,理想情况下,我希望执行以下操作: 将文件上载到临时存储桶中 验证是否已正确上载所有文件 将暂存桶重命名为其最终名称(例如,gs://20130112) 触发bigquery导入以将bucket加载到分片表中 由于gsutil似乎不支持bucket重命名,有哪些替代方法可以实现这一点?谷歌云存储不支持重命名b

用例:

将多个文件上载到云存储桶中,然后将该数据用作bigquery导入的源。使用bucket的名称作为元数据,以驱动数据应该进入哪个分片表

问题:

为了防止部分导入到bigquery表,理想情况下,我希望执行以下操作:

  • 将文件上载到临时存储桶中
  • 验证是否已正确上载所有文件
  • 将暂存桶重命名为其最终名称(例如,gs://20130112)
  • 触发bigquery导入以将bucket加载到分片表中

由于gsutil似乎不支持bucket重命名,有哪些替代方法可以实现这一点?

谷歌云存储不支持重命名bucket,或者更一般地说,不支持一次操作多个对象的原子方式

如果您主要关心的是所有对象都已正确上载(而不是需要确保只有在所有对象上载后,bucket内容才可见),那么gsutil cp支持这一点——如果任何对象未能上载,它将报告未能上载的数量,并以非零状态退出

因此,一个可能的实现是运行gsutil cp以上载所有文件的脚本,然后在创建BigQuery表加载作业之前检查gsutil退出状态


谷歌云存储团队迈克·施瓦茨(Mike Schwartz)

在谷歌云存储中,对象名称实际上是扁平的;从服务的角度来看,“/”只是名称中的另一个字符。文件夹抽象由客户机提供,如gsutil和各种GUI工具。重命名文件夹需要客户端请求对文件夹中的每个对象执行一系列复制和删除操作。没有重命名文件夹的原子方法


Mike Schwartz,谷歌云存储团队

感谢您的快速响应。把文件夹放在桶里怎么样?例如,gs://data/20130130.staging,准备好后重命名为gs://data/20130130?云将文件从staging bucket复制到final bucket如何?又名gsutil cp/local/file gs://staging bucket;gsutil cp gs://staging bucket gs://最终bucketThanks。我认为这是复制,然后删除而不是重命名。但是,是的,它应该比从本地复制更可靠。