迭代Google Cloud Bucket中的文件

时间:2017-08-21 20:16:30

标签: java scala google-cloud-platform google-cloud-storage

我正在尝试实现一个相对简单的ETL管道,它遍历Google云端存储桶中的文件。存储桶有两个文件夹:/ input和/ output。

我要做的是编写一个Java / Scala脚本来迭代/ input中的文件,并将转换应用于/ output中不存在的那些或者时间戳晚于/输出。我一直在查看Java API文档中我可以利用的函数(而不是只调用gsutil ls ...),但到目前为止还没有任何运气。有关在何处查看文档的任何建议? 编辑:有一种比使用数据传输对象更好的方法:

  public Page<Blob> listBlobs() {
    // [START listBlobs]
    Page<Blob> blobs = bucket.list();
    for (Blob blob : blobs.iterateAll()) {
      // do something with the blob
    }
    // [END listBlobs]
    return blobs;
  }

旧方法:

  def getBucketFolderContents(
      bucketName: String
  ) = {
    val credential = getCredential
    val httpTransport = GoogleNetHttpTransport.newTrustedTransport()
    val requestFactory = httpTransport.createRequestFactory(credential)
    val uri = "https://www.googleapis.com/storage/v1/b/" + URLEncoder.encode(
      bucketName,
      "UTF-8") +
      "o/raw%2f"
    val url = new GenericUrl(uri)
    val request = requestFactory.buildGetRequest(uri)
    val response = request.execute()
    response

  }
}

1 个答案:

答案 0 :(得分:1)

您可以通过在对象列表API上设置前缀字符串来列出文件夹下的对象:https://cloud.google.com/storage/docs/json_api/v1/objects/list 列表的结果已经过排序,因此您应该能够列出这两个文件夹,然后按顺序浏览它们并生成差异列表。