Python BigQuery API - 获取表架构/标题

Posted

技术标签:

【中文标题】Python BigQuery API - 获取表架构/标题【英文标题】:Python BigQuery API - get table schema/header 【发布时间】:2017-11-08 18:49:49 【问题描述】:

给定一个查询示例,例如

import uuid

from google.cloud import bigquery


def query_shakespeare():
    client = bigquery.Client()
    query_job = client.run_async_query(str(uuid.uuid4()), """
        #standardSQL
        SELECT corpus AS title, COUNT(*) AS unique_words
        FROM `publicdata.samples.shakespeare`
        GROUP BY title
        ORDER BY unique_words DESC
        LIMIT 10""")

    query_job.begin()
    query_job.result()  # Wait for job to complete.

    destination_table = query_job.destination
    destination_table.reload()
    for row in destination_table.fetch_data():
        print(row)


if __name__ == '__main__':
    query_shakespeare()

如何获取表的架构? 行,在前面的示例中具有格式

Row(('august', -1, 'aaa', 333), 'col1': 0, 'col2': 1, 'col3': 2)

但我找不到,对于包 google-cloud-bigquery==0.28.0 提取标头 JSON 的方式。 当然,表模式的提取对我来说也很好,但是当前的 Google 文档看起来不适用于最新版本...

【问题讨论】:

【参考方案1】:

如果需要刚刚查询的表的schema,可以通过QueryJobresult方法获取:

client = bq.Client()
query = """
         #standardSQL
         SELECT corpus AS title, COUNT(*) AS unique_words
         FROM `publicdata.samples.shakespeare`
         GROUP BY title
         ORDER BY unique_words DESC
         LIMIT 10"""
query_job = client.query(query)
result = query_job.result()

schema = result.schema

结果:

[SchemaField(u'title', u'string', u'NULLABLE', None, ()),
 SchemaField(u'unique_words', u'integer', u'NULLABLE', None, ())]

(您在问题中提供的代码与版本0.27有关)。

至于获取标头 JSON 的问题,不确定我是否理解正确,但似乎您需要架构来找到 json 所在的位置(我在这里猜测)。

【讨论】:

非常有趣,因为文档说 table.schema【参考方案2】:
table_ref = client.dataset(dataset_id).table(table_id)
table = client.get_table(table_ref)
original_schema = table.schema

此代码将打印表架构。就我而言,它遵循输出

[SchemaField('guidislink', 'STRING', 'NULLABLE', None, ()),
 SchemaField('id', 'STRING', 'NULLABLE', None, ()),
 SchemaField('link', 'STRING', 'NULLABLE', None, ())]

【讨论】:

以上是关于Python BigQuery API - 获取表架构/标题的主要内容,如果未能解决你的问题,请参考以下文章

Python BigQuery API - 获取表架构/标题

使用 bigquery 表 GET api 获取表的最后修改日期

使用bigquery表GET api获取表的最后修改日期

是否可以使用 python 中的 bigquery API 将数据集中所有表的计数(*)发送到 csv 文件?

如何使用 API 在 BigQuery 中获取临时表的名称

在 python 中通过 API 对 BigQuery 表进行分区