我正在尝试实现一个相对简单的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
}
}
答案 0 :(得分:1)
您可以通过在对象列表API上设置前缀字符串来列出文件夹下的对象:https://cloud.google.com/storage/docs/json_api/v1/objects/list 列表的结果已经过排序,因此您应该能够列出这两个文件夹,然后按顺序浏览它们并生成差异列表。