我有一个大的查询表,我想使用pandas DataFrame运行。该表很大并且使用:pd.read_gbq()函数卡住并且无法检索数据。
我实现了一个使用pandas工作的块机制,但是获取需要很长时间(9M行需要一个小时)。所以我正在寻找新的骚动。
我想将表下载为csv文件,然后阅读它。我在google云文档中看到了这段代码:
# from google.cloud import bigquery
# client = bigquery.Client()
# bucket_name = 'my-bucket'
project = 'bigquery-public-data'
dataset_id = 'samples'
table_id = 'shakespeare'
destination_uri = 'gs://{}/{}'.format(bucket_name, 'shakespeare.csv')
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)
extract_job = client.extract_table(
table_ref,
destination_uri,
# Location must match that of the source table.
location='US') # API request
extract_job.result() # Waits for job to complete.
print('Exported {}:{}.{} to {}'.format(
project, dataset_id, table_id, destination_uri))
但是示例中显示的所有URI都是google cloud buckets URI而不是本地的,我没有设法下载它(尝试放置一个本地URI,这给了我一个错误)。
有没有办法在不使用存储桶的情况下将表的数据下载为csv文件?
正如提到的here
bigquery导出的限制是 - 您无法将数据导出到本地文件或Google Drive,但您可以将查询结果保存到本地文件。唯一受支持的导出位置是云存储。
有没有办法在不使用存储桶的情况下将表的数据下载为csv文件?
所以现在我们知道我们可以将查询结果存储到本地文件中,因此您可以使用以下内容:
from google.cloud import bigquery
client = bigquery.Client()
# Perform a query.
QUERY = (
'SELECT * FROM `project_name.dataset_name.table_name`')
query_job = client.query(QUERY) # API request
rows = query_job.result() # Waits for query to finish
for row in rows:
print(row.name)
此行变量将包含所有表行,您可以直接使用它,也可以将其写入本地文件。