我目前正在编写一个软件,用于导出大量BigQuery数据并将查询结果作为CSV文件存储在本地 . 我使用Python 3和谷歌提供的客户端 . 我做了配置和验证,但问题是,我无法在本地存储数据 . 每次我执行,我得到以下 error message :
googleapiclient.errors.HttpError:https://www.googleapis.com/bigquery/v2/projects/round-office-769/jobs ?alt = json返回“无效的提取目标URI”响应/文件名 - * .csv ' . 必须是有效的Google存储路径 . “>
This is my Job Configuration:
def export_table(service, cloud_storage_path,
projectId, datasetId, tableId, sqlQuery,
export_format="CSV",
num_retries=5):
# Generate a unique job_id so retries
# don't accidentally duplicate export
job_data = {
'jobReference': {
'projectId': projectId,
'jobId': str(uuid.uuid4())
},
'configuration': {
'extract': {
'sourceTable': {
'projectId': projectId,
'datasetId': datasetId,
'tableId': tableId,
},
'destinationUris': ['response/file-name-*.csv'],
'destinationFormat': export_format
},
'query': {
'query': sqlQuery,
}
}
}
return service.jobs().insert(
projectId=projectId,
body=job_data).execute(num_retries=num_retries)
我希望我可以使用本地路径而不是 Cloud 存储来存储数据,但我错了 .
So my Question is:
我可以在本地(或本地数据库)下载查询数据,还是必须使用Google Cloud 端存储?
5 回答
您需要将Google Cloud 端存储用于导出作业 . 从BigQuery导出数据解释here,同时检查不同路径语法的变体 .
然后,您可以将文件从GCS下载到本地存储 .
Gsutil工具可以帮助您进一步将文件从GCS下载到本地计算机 .
您无法在本地单步下载,首先需要导出到GCS,而不是转移到本地计算机 .
您可以使用分页机制直接下载所有数据(无需通过Google Cloud 端存储路由) . 基本上,您需要为每个页面生成页面标记,下载页面中的数据并重复此操作,直到所有数据都已下载,即不再有可用的标记 . 这是Java中的示例代码,希望澄清这个想法:
您可以在该表上运行tabledata.list()操作并设置“alt = csv”,它将以CSV格式返回表格的开头 .
另一种方法是从UI,一旦查询结果返回,您可以选择"Download as CSV"按钮 .
如果您安装了Google BigQuery API和pandas以及pandas.io,您可以在Jupyter笔记本中运行Python,查询BQ表,并将数据导入本地数据帧 . 从那里,您可以将其写入CSV .