簡體   English   中英

如何使用 Python + 服務帳戶創建 BigQuery 數據傳輸?

[英]How to create BigQuery Data Transfer w/ Python + Service Account?

我正在嘗試使用 Python 和google-cloud-bigquery- datatransfer 在 BigQuery 中創建一個的數據傳輸作業,但我遇到了錯誤:

google.api_core.exceptions.PermissionDenied:403 用戶沒有足夠的權限:項目 PROJECT_ID 需要 bigquery.transfers.update

我在下面包含了我的代碼,這並不是很有趣。 我在設置GOOGLE_APPLICATION_CREDENTIALS=/path/to/secrets/service-account.json時運行它。 此服務帳戶具有所有者狀態,因為我認為提高其權限可能會讓我通過權限錯誤。

現在我開始認為這個 API 根本無法使用服務帳戶,還是我瘋了? 我在文檔中看到了authorization_codeCheckValidAuth但它說它們是可選的。

Google BigQuery 數據傳輸 API 是否適用於服務帳戶?


import os
import boto3
from google.cloud import bigquery_datatransfer_v1
import google.protobuf.json_format

client = bigquery_datatransfer_v1.DataTransferServiceClient()

parent = client.project_path('PROJECT_ID')

transfer_config = {
    "destination_dataset_id": "neilo",
    "display_name": "NeilO Data Transfer Test",
    "data_source_id": "amazon_s3",
    "params": {
        "destination_table_name_template": "test_table",
        "data_path": "s3://bucket/path/to/files/*.csv.gz",
        "access_key_id": os.environ['AWS_ACCESS_KEY_ID'],
        "secret_access_key": os.environ['AWS_SECRET_ACCESS_KEY'],
        "file_format": "CSV"
    },
    "schedule": "daily"
}

transfer_config = google.protobuf.json_format.ParseDict(
    transfer_config, bigquery_datatransfer_v1.types.TransferConfig())

response = client.create_transfer_config(parent, transfer_config)

問題是

問題是我在設置時輸入了錯誤的GOOGLE_APPLICATION_CREDENTIALS ,所以我無意中使用了錯誤的服務帳戶。 我添加了以下代碼來驗證正確的項目:

from google.cloud import bigquery
assert bigquery.Client().project == 'PROJECT_ID'

我還使用Editor的最小內置角色確保服務帳戶具有bigquery.transfers.update權限:

支持 bigquery.transfers.update 權限的內置角色

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM