我正在尝试使用bigquery的java客户机库对bigquery中的表执行查询。我创建了一个作业,然后使用job.getqueryresults().iterateall()方法获得作业的结果。
这种方法是可行的,但对于像600k这样的大数据,需要大约80-120秒的时间。我看到bigquery以4-4.5万个批次获取数据,每个批次大约需要5-7秒。
我想更快地得到结果,我在互联网上发现,如果我们能从作业中获得bigquery创建的临时表,并从该表中读取avro格式或其他格式的数据,if将非常快,但在bigquery api(使用版本:1.124.7)中,我不这么认为。有没有人知道如何在java中做到这一点,或者在有大量记录的情况下如何更快地获取数据。感谢您的帮助。
读取表的代码(需要20秒)
Table table = bigQueryHelper.getBigQueryClient().getTable(TableId.of("project","dataset","table"));
String format = "CSV";
String gcsUrl = "gs://name/test.csv";
Job job = table.extract(format, gcsUrl);
// Wait for the job to complete
try {
Job completedJob = job.waitFor(RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
RetryOption.totalTimeout(Duration.ofMinutes(3)));
if (completedJob != null && completedJob.getStatus().getError() == null) {
log.info("job done");
// Job completed successfully
} else {
log.info("job has error");
// Handle error case
}
} catch (InterruptedException e) {
// Handle interrupted wait
}
使用查询读取相同表的代码(需要90秒)
Job job = bigQueryHelper.getBigQueryClient().getJob(JobId.of(jobId));
for (FieldValueList row : job.getQueryResults().iterateAll()) {
System.out.println(row);
}
暂无答案!
目前还没有任何答案,快来回答吧!