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