当前位置: 首页 > 面试题库 >

从BigQuery结果PCollection获取TableSchema

宫俊才
2023-03-14
问题内容

当我在BigQuery Web
UI中运行查询时,结果显示在一个表中,在该表中,每个字段的名称和类型均已知(即使字段是COUNT(),AVG(),…操作,类型领域当然是已知的)。然后可以将结果直接导出为table
/ json / csv。

我的问题是,当我在Java项目中检索查询结果时,例如使用查询:

String query =  "SELECT nationality, COUNT(DISTINCT personID) AS population 
                 FROM Dataset.Table 
                 GROUP BY nationality";

PCollection<TableRow> result = p.apply(BigQueryIO.Read.fromQuery(query));

…可以在result不显式定义的情况下在PCollection中获取TableRow的架构吗?我认为这是有可能的,因为使用BigQuery Web
UI时使用相同的查询是可能的。但是我不知道该怎么做…

TableSchema schema =  // function of PCollection<TableRow> result ?

result.apply(BigQueryIO.Write
                .named("Write Results Table")
                .to(getTableReference(tableName))
                .withSchema(schema));

这样,查询结果可以始终自动导出/保存到新表中(然后只需显式提供表名)。

有任何想法吗?任何帮助,将不胜感激 :)


问题答案:

不幸的是,Dataflow SDK并未公开BigQuery通过Dataflow的BigQueryIOAPI 返回的架构。单独在Dataflow
API中没有“好的”解决方法。

手动定义架构是一种解决方法。

另外,您可以jobs: query在管道构建时直接通过BigQuery单独查询,然后将其结果传递给BigQueryIO.Write转换。这可能会产生额外的成本,但是可以通过稍微更改查询以减少处理的数据量来减轻。输出的正确性无关紧要,因为您仅存储模式。



 类似资料:
  • 我正在学习使用Python客户端库v0的BigQueryAPI。28https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html#run-简单查询 编写了以下简单代码以从表中获取数据 1) 创建客户端对象 2) 开始新的异步查询作业 3)轮询,直到查询完成 4) 在迭代中获取结果 在这个阶段

  • 问题内容: 我如何得到一个数组的结果? 我有一个像这样的数组: 并将其保存在数据库中,例如JSON编码: 现在我想再次从数据库中获取数组。但是当我使用时: 我得到: 而不是数组。如何获取数组而不是对象? 问题答案: 将第二个参数设置为true以强制关联数组:

  • 问题内容: 我正在尝试使用PDO从表中检索数据,只是我似乎无法向浏览器输出任何内容,只是得到了一个纯白页。 问题答案: 例。 这是您的dbc类 您的PHP页面:

  • 问题内容: 好的,所以我试图从Wikidata中获取有关电影的信息,以以下电影为例: https //www.wikidata.org/wiki/Q24871 在页面上,数据清楚地以可读格式显示,但是当您尝试通过API提取数据时,会得到以下信息:https : //www.wikidata.org/w/api.php?action=wbgetentities&ids=Q24871 这是其中的一部分

  • 我有一个类,它使用CompletableFutures向两个依赖的服务发出并发请求。 我的代码如下所示: 我需要两次调用相关服务的结果。如何在不执行阻塞调用的情况下获取它们?我最初想做future1.get(),但这是一个阻塞调用,我必须等到第一个API调用的结果出来。 有没有一种方法可以从两个调用中获得结果?

  • 你能帮我弄清楚为什么这个查询不返回结果吗? 我使用ogr2ogr导入了一个形状文件将其转换为GeoJson,然后使用以下命令将其导入到Mongo:“mongoimport--db ht--集合设施 下面是一个示例文档,以及未返回任何内容的查询和索引: 以下是文档(为简洁起见删除了属性): } 这是索引。我尝试了“geometry”和“geometry.coordinates”,结果相同: }