如果您从左侧列表中选择311_service_requests 表,则会出现一个“导出”按钮:
然后您可以选择Export to GCS,选择您的存储桶,输入文件名,选择格式(在 CSV 和 JSON 之间)并检查您是否要压缩导出文件 (GZIP)。
但是,BigQuery Exports 中有一些limitations。从适用于您的案例的文档链接中复制一些内容:
- 您最多可以将 1 GB 的表数据导出到单个文件中。如果要导出超过 1 GB 的数据,请使用通配符将数据导出到多个文件中。当您将数据导出到多个文件时,文件的大小会有所不同。
- 以 JSON 格式导出数据时,INT64(整数)数据类型被编码为 JSON 字符串,以在其他系统读取数据时保持 64 位精度。
- 使用 Cloud Console 或经典 BigQuery 网页界面导出数据时,您不能选择 GZIP 以外的压缩类型。
编辑:
将输出文件合并在一起的简单方法是使用gsutil compose 命令。但是,如果您这样做,带有列名的标题将在结果文件中出现多次,因为它出现在从 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
然后创建复合:
gsutil compose gs://<YOUR_BUCKET_NAME>/nyc_311_* gs://<YOUR_BUCKET_NAME>/all_data.csv
现在,all_data.csv 文件中根本没有标题。如果您仍然需要列名出现在第一行,您必须创建另一个包含列名的 CSV 文件并创建这两者的组合。这可以通过将以下(“311_service_requests”表的列名)粘贴到新文件中来手动完成:
unique_key,created_date,closed_date,agency,agency_name,complaint_type,descriptor,location_type,incident_zip,incident_address,street_name,cross_street_1,cross_street_2,intersection_street_1,intersection_street_2,address_type,city,landmark,facility_type,status,due_date,resolution_description,resolution_action_updated_date,community_board,borough,x_coordinate,y_coordinate,park_facility_name,park_borough,bbl,open_data_channel_type,vehicle_type,taxi_company_borough,taxi_pickup_location,bridge_highway_name,bridge_highway_direction,road_ramp,bridge_highway_segment,latitude,longitude,location
或使用以下简单的 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 文件上传到您的存储桶:
gsutil cp headers.csv gs://<YOUR_BUCKET_NAME/headers.csv
现在您已准备好创建最终的组合:
gsutil compose gs://<YOUR_BUCKET_NAME>/headers.csv gs://<YOUR_BUCKET_NAME>/all_data.csv gs://<YOUR_BUCKET_NAME>/all_data_with_headers.csv
如果您想要标题,您可以跳过创建第一个组合,而只使用所有源创建最后一个:
gsutil compose gs://<YOUR_BUCKET_NAME>/headers.csv gs://<YOUR_BUCKET_NAME>/nyc_311_*.csv gs://<YOUR_BUCKET_NAME>/all_data_with_headers.csv