Bigquery API 的查询结果中的架构不完整

Posted

技术标签:

【中文标题】Bigquery API 的查询结果中的架构不完整【英文标题】:Incomplete schema in query result from Bigquery API 【发布时间】:2016-05-20 23:10:10 【问题描述】:

当使用 Jobs.query 通过 API 查询 Bigquery 表(简单的 SELECT * from [...])时,我将其作为架构返回:

 "schema": 
  "fields": [
   
    "name": "all",
    "type": "INTEGER",
    "mode": "NULLABLE"
   ,
   
    "name": "timestamp",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   ,
   
    "name": "last_timestamp",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   ,
   
    "name": "unique",
    "type": "INTEGER",
    "mode": "NULLABLE"
   ,...

但实际的架构(Tables.get 正确返回)是:

 "schema": 
  "fields": [
   
    "name": "all",
    "type": "INTEGER",
    "mode": "REQUIRED",
    "description": "All searches"
   ,
   
    "name": "timestamp",
    "type": "TIMESTAMP",
    "mode": "REQUIRED",
    "description": "Time of processing"
   ,
   
    "name": "last_timestamp",
    "type": "TIMESTAMP",
    "mode": "REQUIRED",
    "description": "Last event"
   ,
   
    "name": "unique",
    "type": "INTEGER",
    "mode": "REQUIRED",
    "description": "Unique users"
   ,

我在填充电子表格的应用脚本中使用查询结果,我想使用架构中的描述字段作为列名。我可以使用Table.get 来获取真正的架构,但我想了解为什么我在第一个查询中得到的架构不完整。

【问题讨论】:

【参考方案1】:

Jobs.query API 为您提供查询结果的架构(保存在后台的临时表中)。在这个表中 - 没有字段的描述,即使它们的类型、模式等是从查询表中涉及的模式派生的

Tables.get API 来自另一端 - 实际上返回表的架构,这就是为什么您会看到该表的所有信息,包括描述。

【讨论】:

谢谢。根据我得到的回应,这是有道理的。但是提出了一个问题,为什么Jobs.getQueryResults 文档中的示例响应包含架构中的描述字段? 我可能是错的 - 但我会说文档不是 100% 完美的。在这种特殊情况下,我认为这是在许多不同 API 中使用的表资源部分的复制粘贴问题 好收获。该文档是根据我们的 API 定义自动生成的,API 定义的模式部分在 API 中出现模式的各个位置之间共享。但是,由于查询引擎不会为查询结果模式生成描述,因此对于所有查询结果(至少目前是这样),该字段将被省略。

以上是关于Bigquery API 的查询结果中的架构不完整的主要内容,如果未能解决你的问题,请参考以下文章

通过 Google BigQuery API 将查询结果导出为 JSON

仅当查询不为空时,才从查询写入 BigQuery 中的表

如何通过 API 在 BigQuery 中创建没有架构的表?

基于字段位置而非名称的 BigQuery 联合架构

如何使用 BigQuery Python API 附加查询结果

BigQuery 将查询结果附加到具有必填字段的表中