[英]Extracting BigQuery Data From a Shared Dataset
是否可以使用客户端API(python)从共享数据集(我只有查看权限)中提取数据(到Google云存储)?
我可以使用网络浏览器手动完成此操作,但无法使用API使其正常工作。
我已经创建了一个项目(MyProject)和一个服务帐户,供MyProject使用API创建服务时用作凭据。 此帐户对共享数据集(MySharedDataset)具有查看权限,并对我的Google云存储桶具有写入权限。 如果我尝试在自己的项目中运行作业以从共享项目中提取数据:
job_data = {
'jobReference': {
'projectId': myProjectId,
'jobId': str(uuid.uuid4())
},
'configuration': {
'extract': {
'sourceTable': {
'projectId': sharedProjectId,
'datasetId': sharedDatasetId,
'tableId': sharedTableId,
},
'destinationUris': [cloud_storage_path],
'destinationFormat': 'AVRO'
}
}
}
我得到错误:
googleapiclient.errors.HttpError:https://www.googleapis.com/bigquery/v2/projects/sharedProjectId/jobs?alt=json返回“内容中的值“ myProjectId”与值sharedProjectId不一致。当通过参数设置的值与请求中设置的值不一致。“>
在jobReference和sourceTable中都使用sharedProjectId,我得到:
googleapiclient.errors.HttpError:https://www.googleapis.com/bigquery/v2/projects/sharedProjectId/jobs?alt=json返回“拒绝访问:作业myJobId:用户myServiceAccountEmail没有权限在项目中运行作业sharedProjectId“>
将myProjectId用于这两个作业将立即返回状态为“ DONE”且没有错误,但是没有导出任何内容。 我的GCS存储桶是空的。
如果使用API确实无法做到这一点,是否还有另一种方法/工具可用于自动从共享数据集中提取数据?
*更新*
使用在我的Google Analytics(分析)登录名下运行的API资源管理器,这可以很好地工作。 在我的代码中,我使用以下方法:
service.jobs().insert(projectId=myProjectId, body=job_data).execute()
并删除了包含projectId的jobReference对象
job_data = {
'configuration': {
'extract': {
'sourceTable': {
'projectId': sharedProjectId,
'datasetId': sharedDatasetId,
'tableId': sharedTableId,
},
'destinationUris': [cloud_storage_path],
'destinationFormat': 'AVRO'
}
}
}
但这会返回错误
拒绝访问:表sharedProjectId:sharedDatasetId.sharedTableId:用户'serviceAccountEmail'无权导出数据集sharedProjectId:sharedDatasetId中的表
我的服务帐户现在是共享数据集的所有者,并且对MyProject拥有编辑权限,还需要在何处设置权限,或者是否可以使用我的GA登录凭据而不是服务帐户来使用python API?
*更新*
终于让它工作了。 怎么样? 确保服务帐户具有查看数据集的权限(如果您无权自己检查此数据集,并且有人告诉您可以这样做,请要求他们仔细检查/向您发送屏幕截图!)
尝试重现该问题后,我遇到了解析错误。 我做了过开发者控制台[2]上的API的试用,并且可以正常工作。 我注意到的是,下面的请求代码与网站上的文档格式不同,因为它具有单引号而不是双引号。
这是我运行以使其工作的代码。
{
'configuration': {
'extract': {
'sourceTable': {
'projectId': "sharedProjectID",
'datasetId': "sharedDataSetID",
'tableId': "sharedTableID"
},
'destinationUri': "gs://myBucket/myFile.csv"
}
}
}
HTTP请求
POST https://www.googleapis.com/bigquery/v2/projects/myProjectId/jobs
如果仍然遇到问题,可以尝试在网站[2]上尝试jobs.insert API或尝试bq命令工具[3]。
以下命令可以执行相同的操作:
bq提取sharedProjectId:sharedDataSetId.sharedTableId gs://myBucket/myFile.csv
希望这可以帮助。
[2] https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert
确保服务帐户具有查看数据集的权限(如果您无权自己检查此数据集,并且有人告诉您可以这样做,请要求他们仔细检查/向您发送屏幕截图!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.