![](/img/trans.png)
[英]How can we change aws instances region from US East (N. Virginia) us-east-1 to Asia Pacific (Mumbai) ap-south-1?
[英]Can we change location from US to other region while reading data from Bigquery using Bigquery java library?
我正在尝试使用Bigquery java 库从Bigquery读取数据。
我的数据集不在美国位置,所以当我将我的数据集名称提供给 library 时,它会抛出一个错误,即在美国位置找不到数据集,因为它默认在美国位置搜索。
我也尝试使用 setLocation("asia-southeast1") 给出位置,但它仍然在美国位置找到。
这是我的代码片段:
val bigquery: BigQuery =BigQueryOptions.newBuilder().setLocation("asia-southeast1").build().getService
val query = "SELECT TO_JSON_STRING(t, true) AS json_row FROM "+dbName+"."+tableName+" AS t"
logger.info("Query is " + query)
val queryResult: QueryJobConfiguration = QueryJobConfiguration.newBuilder(query).build
val result: TableResult = bigquery.query(queryResult)
我正在 SCALA 中编写代码。 因为它使用与 JAVA 相同的库,而且 JAVA 更受欢迎,这就是为什么我要求 JAVA 这样做。
请帮助我知道如何将位置从美国更改为东南部。
我是否可以更改QueryJobConfiguration 中的某些内容,因为我已经搜索了很多但我找不到任何东西。
我唯一的要求是我希望最终结果为 TableResult。
这是抛出的异常
com.google.cloud.bigquery.BigQueryException: Not found: Dataset XXXXXXXX was not found in location US
at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:106)
at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.getQueryResults(HttpBigQueryRpc.java:584)
at com.google.cloud.bigquery.BigQueryImpl$34.call(BigQueryImpl.java:1203)
at com.google.cloud.bigquery.BigQueryImpl$34.call(BigQueryImpl.java:1198)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
at com.google.cloud.bigquery.BigQueryImpl.getQueryResults(BigQueryImpl.java:1197)
at com.google.cloud.bigquery.BigQueryImpl.getQueryResults(BigQueryImpl.java:1181)
at com.google.cloud.bigquery.Job$1.call(Job.java:329)
at com.google.cloud.bigquery.Job$1.call(Job.java:326)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.poll(RetryHelper.java:64)
at com.google.cloud.bigquery.Job.waitForQueryResults(Job.java:325)
at com.google.cloud.bigquery.Job.getQueryResults(Job.java:291)
at com.google.cloud.bigquery.BigQueryImpl.query(BigQueryImpl.java:1168)
...
提前致谢。
您实际上不需要指定位置,因为 BigQuery 会从查询中引用的数据集推断出它。 见这里。
在加载数据、查询数据或导出数据时,BigQuery 会根据请求中引用的数据集确定运行作业的位置。 例如,如果查询引用存储在 asia-northeast1 区域中的数据集中的表,则查询作业将在该区域中运行。
我刚刚在asia-southeast1
创建的数据集/表上使用 Java SDK 进行了测试,它无需明确指定位置即可工作。
如果默认情况下它仍然不适合您(检查您引用的表是否实际存在),那么您可以通过在JobId
设置它并将其传递给重载方法来指定位置:
String query = "SELECT * FROM `grey-sort-challenge.asia_southeast1.a_table`;";
QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(Boolean.FALSE)
.build();
JobId id = JobId.newBuilder().setLocation("asia-southeast1")
.setRandomJob()
.build();
try {
for (FieldValueList row : BIGQUERY.query(queryConfig, id).iterateAll()) {
for (FieldValue val : row) {
System.out.printf("%s,", val.toString());
}
System.out.printf("\n");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.