我正在使用Bigquery的Java API。我正在运行一个选择查询,并希望将结果保存到目标表。
我已经设置了loadConfig.setDestinationTable(),但我得到“加载配置必须至少指定一个源URI”。
你能解释一下我做错了什么吗?
答案 0 :(得分:2)
您不希望设置loadConfig目标表,而是设置queryConfig.setDestinationTable()(因为这不是加载作业 - 它是查询作业)。正如Fh所说,如果你分享你正在使用的代码,我们可以提供更详细的帮助。
答案 1 :(得分:1)
这是我用来执行此操作的代码:
public static String copyTable(String project, String dataSet, String table) {
String newTableName = table + "_copy_"+System.currentTimeMillis();;
try {
Job copyJob = new Job();
TableReference source = new TableReference();
source.setProjectId(project);
source.setDatasetId(dataSet);
source.setTableId(table);
TableReference destination = new TableReference();
destination.setProjectId(project);
destination.setDatasetId(dataSet);
destination.setTableId(newTableName);
JobConfiguration configuration = new JobConfiguration();
JobConfigurationTableCopy copyConf = new JobConfigurationTableCopy();
copyConf.setSourceTable(source);
copyConf.setDestinationTable(destination);
configuration.setCopy(copyConf);
copyJob.setConfiguration(configuration);
bigquery.jobs().insert(project, copyJob).execute();
return newTableName;
} catch (Exception e) {
e.printStackTrace();
logger.warn("unable to copy table :" + project + "."
+ dataSet + "." + table, e);
throw new RuntimeException(e);
}
}
如果您还有其他问题,请与我联系
答案 2 :(得分:0)
假设您正在运行交互式异步查询,您实际上希望在一个请求正文中传递查询,目标projectId,目标dataSetId和目标tableId。请参阅此处的Java API示例:https://developers.google.com/bigquery/querying-data#asyncqueries