Python BigQuery API-获取表模式/头



给定一个类似的查询示例

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})

但是我找不到,对于包googlecloudbigquery==0.28.0提取头JSON的方法。当然,表模式的提取对我来说也很好,但目前的谷歌文档似乎不适用于上一个版本。。。

如果您需要刚才查询的表的模式,您可以从QueryJob:的result方法获得它

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_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, ())]

最新更新