【发布时间】:2018-10-17 00:27:54
【问题描述】:
这是 blob 信息:
Blob{bucket=some_bucket, name=somefile-000000000001.json.gz, generation=1539720839099466, size=42455994, content-type=application/octet-stream, metadata=null}
somefile-...json.gz 是 BigQuery 的转储文件(添加所有文件时总共约为 4gig)
如您所知,大小约为 42 兆。但是,当我执行 blob.downloadTo(...file) 时,它会运行并运行,并且可以轻松达到 >300 GB 的大小,并且似乎可以永远运行...这对我来说似乎很奇怪,因为它几乎是相同的代码比谷歌的例子。
一文不值的有趣事实:
- 从 bigquery 到存储的转储创建了 122 个文件,每个文件约 40meg,当您将它们全部加起来时,总计约 5gb 压缩...这让我感到困惑,因为与所有文件的总和相比,我们的下载压缩为 56gb。
- 我们的 BigQuery 表大小为 19.08 GB
有人知道吗?
要转储到我们的存储桶的代码示例
String bucketUrl = "gs://" + BUCKET_NAME + "/"+table.getDataset()+"/"+filename+"-*." + EXPORT_EXTENSION;
log.info("Exporting table " + table.getTable() + " to " + bucketUrl);
ExtractJobConfiguration extractConfiguration = ExtractJobConfiguration.newBuilder(table, bucketUrl)
.setCompression(EXPORT_COMPRESSION)
.setFormat(EXPORT_FORMAT)
.build();
Job job = bigquery.create(JobInfo.of(extractConfiguration));
try {
// Wait for the job to complete
Job completedJob = job.waitFor(RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
RetryOption.totalTimeout(Duration.ofMinutes(3)));
if (completedJob != null && completedJob.getStatus().getError() == null) {
return true;
} else {
log.error(completedJob.getStatus().getError());
throw new BigQueryException(1, "Unable to complete the export", completedJob.getStatus().getError());
}
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return false;
以及要下载的代码(其中 blob = Blob{bucket=some_bucket, name=somefile-000000000001.json.gz, generation=1539720839099466, size=42455994, content-type=application/octet-stream, metadata=null} )
Blob blob = storage.get(BlobId.of(bucketName, srcFilename));
blob.downloadTo(destFilePath);
【问题讨论】:
-
我刚刚尝试通过执行 BigQuery 导出(7gig+ 表)来复制您的场景,然后使用
blob.downloadTo(destFilePath);代码下载其中一个文件,但该文件已被压缩。您能解释一下您是如何进行 BigQuery 转储的吗?如果可能,请包含您的代码 -
@F10 感谢您的回复!我们的流程如下: - 获取现有 3rd 方 bigquery 表的子集 - 获取新的 BigQuery 表并将其导出到我们的存储桶中 我已经更新了问题,其中包含获取我们的 bigquery 表并导出它的步骤! :)
-
我将我的代码附在答案上
标签: java google-bigquery google-cloud-storage