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

но я не могу найти для пакета google-cloud-bigquery==0.28.0 способ извлечь заголовок JSON. Конечно, для меня было бы неплохо извлечь схему таблицы, но текущая документация Google, похоже, не работает для последней версии...

1 ответ

Решение

Если вам нужна схема таблицы, которую вы только что запросили, вы можете получить ее из result метод из QueryJob:

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, ())]
Другие вопросы по тегам