如何从BigQuery API获取列名? [英] How to get column name from BigQuery API?

查看:41
本文介绍了如何从BigQuery API获取列名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用以下代码获取列值:

I can get column values using the following codes:

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'C:\\Users\xxx\Desktop\key.json'
bq_client = Client()
query = "SELECT msts, coreuserid, spend_usd FROM `project.f_purchase` where dt = '2019-04-02' limit 5"
query_job = bq_client.query(query)
results = query_job.result()   

for row in results:
    print("{}, {}, {}".format(row.msts, row.uid, row.spend_amount))

但是,如最后一行所示,这需要直接的列名.现在,我有多个查询,并且希望在外观中运行它们并显示结果.有没有一种类似 .format(row.column1,row.column2 ...)的方法?另外,查询的结果列数也不同.

But as shown in the last row, this requires direct column name. Now I have multiple queries and I want to run them in a look and display the result. Is there a way like .format(row.column1, row.column2...)? In addition, number of result columns are different for the queries.

感谢您的帮助.

推荐答案

每个BigQuery Python客户端文档,您可以按以下方式遍历行对象,而无需指定确切的列名:

Per BigQuery Python client documentation you can loop over the row object as follow without specifying the exact column name:

for row in query_job:  # API request - fetches results
    # Row values can be accessed by field name or index
    assert row[0] == row.name == row["name"]
    print(row)

此外,您始终可以使用 SchemaField值,如此 answer

In addition, you can always use the SchemaField values as described in this answer

result = ["{0} {1}".format(schema.name,schema.field_type) for schema in table.schema]

这是一个使用BigQuery公共数据集的示例,该示例说明了如何在不指定字段名称的情况下访问字段:

This is an example using a BigQuery public dataset on how to access fields without specifying the field name:

from google.cloud import bigquery
from pprint import pprint
import json

client = bigquery.Client()

query = (
    "SELECT state,max(gender) as gender FROM `bigquery-public-data.usa_names.usa_1910_2013` "
    'GROUP BY state '
    "LIMIT 10"
)
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
)  # API request - starts the query

for num, row in enumerate(query_job, start=1):  # API request - fetches results
    # Row values can be accessed by field name or index
    # assert row[0] == row.name == row["name"]
    print("{} AS {}, {} AS {}".format(row[0], query_job._query_results._properties['schema']['fields'][0]['name'], row[1], query_job._query_results._properties['schema']['fields'][1]['name']))

    #print(row[0], row[1])

print(json.dumps(query_job._query_results._properties['schema']['fields'][0]['name']))
print(query_job._query_results._properties)
#pprint(vars(query_job._query_results._properties))

哪个会产生以下输出:

superQuery:bin tamirklein$ python test.py
AK AS state, M AS gender
AL AS state, M AS gender
AR AS state, M AS gender
AZ AS state, M AS gender
CA AS state, M AS gender
CO AS state, M AS gender
CT AS state, M AS gender
DC AS state, M AS gender
DE AS state, M AS gender
FL AS state, M AS gender

这篇关于如何从BigQuery API获取列名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆