【问题标题】:export big query table locally本地导出大查询表
【发布时间】:2019-02-18 11:58:36
【问题描述】:

我有一个很大的查询表,我想使用 pandas DataFrame 来运行它。表很大,使用 pd.read_gpq() 函数会卡住,无法检索数据。

我使用 pandas 实现了一个有效的块机制,但它需要很长时间才能获取(9M 行需要一个小时)。所以我正在寻找一个新的解决方案。

我想将表格下载为 csv 文件,然后阅读。我在谷歌云文档中看到了这段代码:

# 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 都是谷歌云存储桶 URI,而不是本地的,我没有设法下载它(试图放置一个本地 URI,但结果出错了)。

有没有办法在不使用存储桶的情况下将表的数据下载为 csv 文件?

【问题讨论】:

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


    【解决方案1】:

    如上所述here

    bigquery 导出的限制是 - 您不能将数据导出到本地文件或 Google Drive,但可以将查询结果保存到本地文件。唯一受支持的导出位置是 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 变量将包含所有表格行,您可以直接使用它,也可以将其写入本地文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多