Amazon web services 在使用BigQueryJava库从Bigquery读取数据时,我们是否可以将位置从我们更改为其他区域?

Amazon web services 在使用BigQueryJava库从Bigquery读取数据时,我们是否可以将位置从我们更改为其他区域?,amazon-web-services,google-cloud-platform,google-bigquery,cloud,Amazon Web Services,Google Cloud Platform,Google Bigquery,Cloud,我正在尝试使用从Bigquery读取数据 我的数据集不在美国位置,所以当我将我的数据集名称提供给库时,它抛出了一个错误,即数据集未在美国位置找到,因为它默认在美国位置搜索 我也尝试过使用setLocation(“asia-Southasth1”)给出位置,但它仍然在美国位置中找到 这是我的代码片段: val bigquery: BigQuery =BigQueryOptions.newBuilder().setLocation("asia-southeast1").build().getServ

我正在尝试使用Bigquery读取数据

我的数据集不在美国位置,所以当我将我的数据集名称提供给库时,它抛出了一个错误,即数据集未在美国位置找到,因为它默认在美国位置搜索

我也尝试过使用setLocation(“asia-Southasth1”)给出位置,但它仍然在美国位置中找到

这是我的代码片段:

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 根据数据集确定运行作业的位置 在请求中引用。例如,如果查询引用一个表 在存储在亚洲东北1地区的数据集中,查询作业将 在那个地区跑步

我刚刚在我在
asia-southeras1
中创建的一个数据集/表上使用JavaSDK进行了测试,它可以正常工作,无需显式指定位置

如果默认情况下它仍然不适用于您(请检查您引用的表是否实际存在),则可以通过在
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();
        }

谢谢你回答格雷厄姆。我能解决这个问题。实际上,数据集不在东南部的位置。当我在东南部创建它时,我能够解决这个问题。此外,我们还需要提到该位置,因为默认情况下,它只在美国搜索。我已经通过谷歌云BQ库进行了验证。这是我这边的愚蠢错误。