【问题标题】:Export BigQuery Result to Avro or JSON将 BigQuery 结果导出为 Avro 或 JSON
【发布时间】:2018-06-15 01:36:06
【问题描述】:

如果有办法将 BigQuery 结果保存为 JSON 或 Avro 格式,请告诉我。

我正在使用以下代码在 BigQuery Table 上运行查询。

client = bigquery.Client.from_service_account_json('/Users/gaurang.shah/Downloads/fb3735b731b9.json')

job_config = bigquery.QueryJobConfig()
job_config.priority = bigquery.QueryPriority.BATCH
sql = """
   select * 
    FROM `bigquery-public-data.samples.shakespeare`
    limit 1;
"""
location = 'US'
query_job = client.query(sql, location=location, job_config=job_config)
query_job = client.get_job(query_job.job_id, location=location)  
print(query_job.result())

我正在尝试在不使用 GCS 的情况下导出 BigQuery 表。这是我认为可以实现这一目标的一种方式。

我认为另一种方法是使用BQ command line 工具。但是不确定它是否对我可以触发多少个查询以及我可以检索多少数据有任何限制。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您需要先运行查询,将结果写入表中,然后挂钩到 BigQuery export/extract API,其中可以将结果/表以您想要的格式导出到 GCS。例如,这里是 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))
    

    查看更多here

    【讨论】:

    • 由于某些法律原因,我们不想使用GCS,这就是为什么我尝试在表上运行select 查询然后尝试将其保存在local 机器上.
    • 为什么不能使用 GCS?您不能将查询结果写入除表之外的任何其他位置。但是,您可以使用 Tabledata API (cloud.google.com/bigquery/docs/reference/rest/v2/tabledata/list) 并将其通过电线吸到您的机器上,但我不建议这样做,因为它不会扩展。
    • 我知道扩展和性能将是一个大问题,但是我们被告知我们不能使用它。 bq command line 转换为 Json 怎么样。但是我没有找到任何关于它可以获取的行/数据的限制的文档。
    • 在这里使用 bq 命令并不能真正帮助您 - 我相信它使用官方 API - 所以它只会使用 tabledata.list - 所以它不会扩展。我认为您可能应该将访问 GCS 的问题提交给告诉您不要使用它的人。它的安全性不亚于 bigquery 本身
    • @GrahamPolley 将查询结果转换为 json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多