本地导出大查询表

时间:2019-02-18 11:58:36

标签: pandas google-cloud-platform google-bigquery

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

1 个答案:

答案 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 变量将具有所有表行,您可以直接使用它,也可以将其写入本地文件。