簡體   English   中英

BigQuery - 計划查詢錯誤“PermissionDenied: 403 The caller does not have permission”

[英]BigQuery - Scheduled Query Error "PermissionDenied: 403 The caller does not have permission"

計划查詢有問題,使用 python 腳本,在運行以下腳本時出現錯誤:“google.api_core.exceptions.PermissionDenied: 403 The caller does not have permission”。

#!/usr/bin/python
import sys
import json
import time
from google.cloud import bigquery_datatransfer
from google.oauth2 import service_account

prj_id = "project-id"
ds_id = "dataset_id"

gcp_info = json.load(open("key-file.json"))

creds = service_account.Credentials.from_service_account_info(gcp_info)
s_creds = creds.with_scopes(
    [
        'https://www.googleapis.com/auth/cloud-platform',
        'https://www.googleapis.com/auth/bigquery',
    ]
)
s_acc = "service-account@project_id.iam.gserviceaccount.com"

bq_tc = bigquery_datatransfer.DataTransferServiceClient(credentials=s_creds)
dataset = prj_id + '.' + ds_id + '.'

def main():
    argc = len(sys.argv) - 1
    if argc != 1:
        print("Usage: python3 /root/gcp_new-query.py <Temp-Table>")
        sys.exit()


    t_id = dataset + sys.argv[1] + '-temp'
    t2_id = dataset + sys.argv[1] + '-data'

    q2 = """
    DELETE FROM `{}` WHERE AddressID > 0 AND MsgTS < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), 
    INTERVAL 60 MINUTE)
    """.format(t_id)

    p = bq_tc.common_project_path(prj_id)

    tc_cfg2 = bigquery_datatransfer.TransferConfig(
        destination_dataset_id=ds_id,
        display_name=sys.argv[1]+"-RM-Old-Data",
        data_source_id="scheduled_query",
        params={
            "query": q2,
        },
        schedule="every hour",
    )

    tc_cfg2 = bq_tc.create_transfer_config(
        bigquery_datatransfer.CreateTransferConfigRequest(
            parent=p,
            transfer_config=tc_cfg2,
            service_account_name=s_acc,
        )
    )

    print("Created scheduled query '{}'".format(tc_cfg2.name))
main()

一旦進入 create_transfer_config(),我就會收到錯誤。 我已經閱讀了文檔並確保所有正確的權限都已授予“service-account@project_id”,它們是:

  • BigQuery 數據傳輸服務代理
  • BigQuery 管理員

我是否缺少權限或者我的腳本中有什么地方不太正確? 如果我沒有很好地解釋所有內容,我深表歉意。

編輯:我還確保服務帳戶具有關聯的密鑰 json 文件。

-一種。

我最終找到了解決方案。 我只是用:

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/json.json"

代替:

gcp_info = json.load(open("key-file.json"))

creds = service_account.Credentials.from_service_account_info(gcp_info)
s_creds = creds.with_scopes(
    [
        'https://www.googleapis.com/auth/cloud-platform',
        'https://www.googleapis.com/auth/bigquery',
    ]
)
s_acc = "service-account@project_id.iam.gserviceaccount.com"

暫無
暫無

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

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