簡體   English   中英

使用 Bigquery Java 庫從 Bigquery 讀取數據時,我們可以將位置從美國更改為其他地區嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM