gpt4 book ai didi

java - 在从 Java 应用程序调用 getQueryResults 方法时,如何从 QueryResponse 访问架构?

转载 作者:行者123 更新时间:2023-12-02 10:27:03 24 4
gpt4 key购买 nike

我正在使用 google.cloud.bigquery 库使用 bigquery.query() 方法执行和创建查询。我想从响应中获取 Schema 详细信息,但每当查询没有返回结果时,我都会得到 EmptyTableResult 而不是应该具有 Schema 的响应> 和其中列出的字段。我使用了另一种方法来创建作业,然后使用查询作业,我调用 bigquery.getQueryResults ,它应该返回 QueryResponse 对象。下面是代码片段。

QueryJobConfiguration queryConfig = 
QueryJobConfiguration.newBuilder(queryString)

.setDefaultDataset(bqDatasetId).setUseLegacySql(false)

.setFlattenResults(true).build();

JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigQuery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

// Wait for the query to complete.
queryJob = queryJob.waitFor();

// Check for errors
if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new RuntimeException(queryJob.getStatus().getError().toString());
}

// Get the results.
QueryResponse response = bigQuery.getQueryResults(queryJob.getJobId());
System.out.println(response);

在这里,在 sysout 语句中,我得到了正确的响应,但是每当我尝试使用 response.getSchema() 时,它都会给我编译错误: getSchema() 不可见。谁能帮我这个?这种方法正确吗?或者还有其他方法可以做同样的事情吗?

最佳答案

您需要对 Job 对象调用 getQueryResults()。这将返回一个 TableResult 对象。然后,您可以调用 getSchema() 来获取查询/表/作业的架构。所以,把它们放在一起:

QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(
"SELECT "
+ "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, "
+ "view_count "
+ "FROM `bigquery-public-data.stackoverflow.posts_questions` "
+ "WHERE tags like '%google-bigquery%' "
+ "ORDER BY favorite_count DESC LIMIT 10")
.setUseLegacySql(false)
.build();

JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = BIGQUERY.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
queryJob = queryJob.waitFor();

TableResult result = queryJob.getQueryResults(); //<--you need this
Schema schema = result.getSchema(); //<--..and this

System.out.println(schema);

其产量:

Connected to the target VM, address: '127.0.0.1:64695', transport: 'socket'
Schema{fields=[Field{name=url, type=STRING, mode=NULLABLE, description=null}, Field{name=view_count, type=INTEGER, mode=NULLABLE, description=null}]}

关于java - 在从 Java 应用程序调用 getQueryResults 方法时,如何从 QueryResponse 访问架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53869770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com