java - 使用标准 sql 时无法在 Bigquery 的单个表中写入多个分区
问题描述
我正在从多个表中读取数据并创建 7 天的分区,尝试将数据写入相应的日期分区以调整特定日期的更改。
我正在使用该WRITE.TRUNCATE
方法来避免重复。但是,在写入表时,我只获取最后一天分区的数据,并且没有填充所有其他分区。旧作业在 Legacy SQL 中运行并且运行良好,但是我正在尝试迁移到标准 SQL,并且从那时起这个问题一直存在。附上以下代码:
for (int i = 1; i <= PARTITION_CREATE_DAYS; ++i) {
LocalDate partDate = params.referenceDate.minusDays(PARTITION_CREATE_DAYS - i);
String query = String.format(sql, partDate.toString(), params.referenceDate.toString(),params.TableA, params.TableB, params.TableC, params.TableD);
jobs.add(createJob(params, bq, query, partDate));
}
boolean allSucceeded = waitForJobs(jobs.listIterator());
if (allSucceeded) System.out.println("Job finished successfully!");
else System.exit(1);
}
private static Job createJob(Params params, BigQuery bq, String query, LocalDate partDate) {
String partition = "$" + partDate.format(BQ_PARTITION_FORMAT);
TableId tableId = TableId.of(params.outProj, params.outDataset, params.outTable + partition);
Job job = bq.create(JobInfo.of(QueryJobConfiguration.newBuilder(query)
.setDestinationTable(tableId)
//.setAllowLargeResults(true)
.setUseLegacySql(false)
.setUseQueryCache(true)
.setPriority(QueryJobConfiguration.Priority.values()[params.priority == 'i' ? 0 : 1])
.setWriteDisposition(JobInfo.WriteDisposition.WRITE_TRUNCATE)
.build()));
System.out.println("Submitted BQ job " + job.getJobId().getJob() + " for partition " + partition);
return job;
}
}
PARTITION_CREATE_DAYS = 8
referenceDate = current date
解决方案
推荐阅读
- kubernetes - 缩小 kubernetes 作业,但在完成之前不要删除 pod
- android - 如何修复 MessageQueue 泄漏?
- nssm - NSSM 无法为服务设置启动参数!正在删除服务
- c# - 会话超时未命中操作过滤器
- javascript - JQuery 可调整大小的拆分器异常行为
- javascript - 返回 true 不更改按钮名称
- python - Python:使用python从一行中写入匹配的单词以数字开头
- android - 来自现有 SQLite 数据库的微调器
- javascript - 从父类扩展反应组件
- c# - 在 Umbraco 中对媒体选择器图像进行排序