我有一个很大的查询表,我想使用pandas DataFrame来运行。该表很大,并且使用:pd.read_gpq()函数被卡住,无法检索数据。
我使用了有效的熊猫实现了一个块机制,但是获取时间很长(900万行需要一个小时)。所以我正在寻找一个新的sulotion。
我想将表格下载为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文件?
答案 0 :(得分:0)
如上所述here
bigquery导出的局限性是-您不能将数据导出到本地文件或Google云端硬盘,但可以将查询结果保存到本地文件。唯一受支持的导出位置是Cloud Storage。
有没有一种方法可以在不使用存储桶的情况下将表的数据下载为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)
此 rows 变量将具有所有表行,您可以直接使用它,也可以将其写入本地文件。