根据BigQuery API中dryRun
字段的文档,当设置为true
时,查询将不会被执行,而是会验证它并返回一些基本统计信息:
[可选]如果设置为true,则BigQuery不会运行该作业。相反,如果 查询有效,BigQuery返回有关作业的统计信息,如 将处理多少字节。如果查询无效,则会出错 回报。默认值为false。
但是,使用Java client lib for BigQuery并将dryRun
设置为true
会抛出NullPointerException:
[...]
JobConfiguration jobConfiguration = newBuilder(query)
.setAllowLargeResults(true)
.setUseLegacySql(false)
.setDryRun(true)
.setDestinationTable(TableId.of("<project>", "<dataset>", "<table>"))
.setCreateDisposition(CREATE_IF_NEEDED)
.setWriteDisposition(WRITE_TRUNCATE)
.setPriority(INTERACTIVE)
.build();
JobInfo jobInfo = JobInfo.of(jobConfiguration);
Job job = bigQuery.create(jobInfo);
[...]
Exception in thread "main" java.lang.NullPointerException
at com.google.cloud.bigquery.JobConfiguration.fromPb(JobConfiguration.java:140)
at com.google.cloud.bigquery.JobInfo$BuilderImpl.<init>(JobInfo.java:182)
at com.google.cloud.bigquery.Job.fromPb(Job.java:324)
at com.google.cloud.bigquery.BigQueryImpl.create(BigQueryImpl.java:229)
这是Java客户端库中的错误,还是我正在使用/错误使用它?
注意:将其设置为false
按预期工作。
Note2 :jobConfiguration
和jobInfo
都已初始化,即不是null
答案 0 :(得分:0)
这是客户端库中的一个错误。这是GitHub中的问题。
https://github.com/GoogleCloudPlatform/google-cloud-java/issues/525