[英]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.