Google bigquery 如何将公共数据集导入Google Cloud Bucket

Google bigquery 如何将公共数据集导入Google Cloud Bucket,google-bigquery,export,google-cloud-storage,bucket,Google Bigquery,Export,Google Cloud Storage,Bucket,我将研究一个数据集,其中包含美国311个电话的信息。此数据集在BigQuery中公开可用。我想把它直接复制到我的桶里。然而,我不知道如何做到这一点,因为我是一个新手 以下是数据集在谷歌云上的公共位置截图: 我已经在我的谷歌云存储中创建了一个名为311_nyc的bucket。我如何直接传输数据,而不必下载12 gb文件并通过我的VM实例再次上载它?如果从左侧列表中选择311\u服务请求表,将出现一个“导出”按钮: 然后,您可以选择导出到GCS,选择您的存储桶,键入文件名,选择格式(CSV和JS

我将研究一个数据集,其中包含美国311个电话的信息。此数据集在BigQuery中公开可用。我想把它直接复制到我的桶里。然而,我不知道如何做到这一点,因为我是一个新手

以下是数据集在谷歌云上的公共位置截图:


我已经在我的谷歌云存储中创建了一个名为311_nyc的bucket。我如何直接传输数据,而不必下载12 gb文件并通过我的VM实例再次上载它?

如果从左侧列表中选择
311\u服务请求
表,将出现一个“导出”按钮:

然后,您可以选择
导出到GCS
,选择您的存储桶,键入文件名,选择格式(CSV和JSON之间),并检查是否要压缩导出文件(GZIP)

但是在BigQuery导出中有一些。从适用于您的案例的文档链接复制一些:

  • 最多可以将1 GB的表数据导出到单个文件。如果要导出超过1 GB的数据,请使用通配符将数据导出到多个文件中。将数据导出到多个文件时,文件的大小会有所不同
  • 以JSON格式导出数据时,INT64(整数)数据类型被编码为JSON字符串,以在其他系统读取数据时保持64位精度
  • 使用云控制台或经典的BigQuery web UI导出数据时,不能选择GZIP以外的压缩类型
编辑: 合并输出文件的一种简单方法是使用命令。但是,如果执行此操作,带有列名的标题将在结果文件中多次出现,因为它会出现在从BigQuery提取的所有文件中

为了避免这种情况,您应该通过将
print_header
参数设置为
False
来执行BigQuery导出:

bq extract --destination_format CSV --print_header=False bigquery-public-data:new_york_311.311_service_requests gs://<YOUR_BUCKET_NAME>/nyc_311_*.csv
或者使用以下简单的Python脚本(如果您希望将其用于包含大量列的表,而这些列很难手动完成),查询表的列名并将其写入CSV文件:

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT column_name
    FROM `bigquery-public-data`.new_york_311.INFORMATION_SCHEMA.COLUMNS
    WHERE table_name='311_service_requests'
"""
query_job = client.query(query)

columns = []
for row in query_job:
    columns.append(row["column_name"])
with open("headers.csv", "w") as f:
    print(','.join(columns), file=f) 
请注意,要运行上述脚本,您需要安装BigQuery Python客户端库:

pip install --upgrade google-cloud-bigquery 
headers.csv
文件上载到您的bucket:

gsutil cp headers.csv gs://<YOUR_BUCKET_NAME/headers.csv

gsutil cp headers.csv gs://如果从左侧列表中选择
311_服务_请求
表,将出现一个“导出”按钮:

然后,您可以选择
导出到GCS
,选择您的存储桶,键入文件名,选择格式(CSV和JSON之间),并检查是否要压缩导出文件(GZIP)

但是在BigQuery导出中有一些。从适用于您的案例的文档链接复制一些:

  • 最多可以将1 GB的表数据导出到单个文件。如果要导出超过1 GB的数据,请使用通配符将数据导出到多个文件中。将数据导出到多个文件时,文件的大小会有所不同
  • 以JSON格式导出数据时,INT64(整数)数据类型被编码为JSON字符串,以在其他系统读取数据时保持64位精度
  • 使用云控制台或经典的BigQuery web UI导出数据时,不能选择GZIP以外的压缩类型
编辑: 合并输出文件的一种简单方法是使用命令。但是,如果执行此操作,带有列名的标题将在结果文件中多次出现,因为它会出现在从BigQuery提取的所有文件中

为了避免这种情况,您应该通过将
print_header
参数设置为
False
来执行BigQuery导出:

bq extract --destination_format CSV --print_header=False bigquery-public-data:new_york_311.311_service_requests gs://<YOUR_BUCKET_NAME>/nyc_311_*.csv
或者使用以下简单的Python脚本(如果您希望将其用于包含大量列的表,而这些列很难手动完成),查询表的列名并将其写入CSV文件:

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT column_name
    FROM `bigquery-public-data`.new_york_311.INFORMATION_SCHEMA.COLUMNS
    WHERE table_name='311_service_requests'
"""
query_job = client.query(query)

columns = []
for row in query_job:
    columns.append(row["column_name"])
with open("headers.csv", "w") as f:
    print(','.join(columns), file=f) 
请注意,要运行上述脚本,您需要安装BigQuery Python客户端库:

pip install --upgrade google-cloud-bigquery 
headers.csv
文件上载到您的bucket:

gsutil cp headers.csv gs://<YOUR_BUCKET_NAME/headers.csv

gsutil cp headers.csv gs://您还可以使用gcoud命令:

  • 创建一个bucket:

    gsutil mb gs://my-bigquery-temp  
    
  • 提取数据集:

    bq extract --destination_format CSV --compression GZIP 'bigquery-public-data:new_york_311.311_service_requests' gs://my-bigquery-temp/dataset*
    
  • 请注意,您必须使用
    gs://my bigquery temp/dataset*
    ,因为数据集太大,无法导出到单个文件

  • 检查铲斗:

    gsutil ls gs://my-bigquery-temp
    
    gs://my-bigquery-temp/dataset000000000
    
    ......................................
    
    gs://my-bigquery-temp/dataset000000000045
    
    你可以找到更多信息

  • 编辑: 要从导出的数据集文件组成对象,可以使用gsutil工具:

     gsutil compose gs://my-bigquery-temp/dataset*  gs://my-bigquery-temp/composite-object
    
    请记住,您不能使用超过32个blob(文件)来组成对象


    相关SO问题

    您也可以使用gcoud命令:

  • 创建一个bucket:

    gsutil mb gs://my-bigquery-temp  
    
  • 提取数据集:

    bq extract --destination_format CSV --compression GZIP 'bigquery-public-data:new_york_311.311_service_requests' gs://my-bigquery-temp/dataset*
    
  • 请注意,您必须使用
    gs://my bigquery temp/dataset*
    ,因为数据集太大,无法导出到单个文件

  • 检查铲斗:

    gsutil ls gs://my-bigquery-temp
    
    gs://my-bigquery-temp/dataset000000000
    
    ......................................
    
    gs://my-bigquery-temp/dataset000000000045
    
    你可以找到更多信息

  • 编辑: 要从导出的数据集文件组成对象,可以使用gsutil工具:

     gsutil compose gs://my-bigquery-temp/dataset*  gs://my-bigquery-temp/composite-object
    
    请记住,您不能使用超过32个blob(文件)来组成对象


    相关SO问题

    您好,谢谢您的回答。如果我使用通配符,我如何才能将这些文件合并成一个可以有效处理的文件?@KaustubhMulay我编辑了我的答案,提供了尽可能多的详细信息。如果你有任何问题,请告诉我。非常感谢你的详细回答。我很感激你。如果我有任何问题,我一定会让你知道。再次感谢@KaustubhMulay因为它很有帮助,如果你能接受我的回答就好了!完成。有没有办法将斑点限制在32个?嗨,谢谢