![](/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.