在本地导出大查询表

问题描述 投票:0回答:1

我有一个大的查询表,我想使用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文件?

pandas google-cloud-platform google-bigquery
1个回答
0
投票

正如提到的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)

此行变量将包含所有表行,您可以直接使用它,也可以将其写入本地文件。

© www.soinside.com 2019 - 2024. All rights reserved.