chisataki’s blog

リコリス・リコイルじゃありません

GCP外部からBigQueryに接続する方法

1. IAM管理画面からサービスアカウントを作成する(付与ロール例: BigQuery編集者)

 

2. サービスアカウントのキーを作成し、秘密鍵(.json)をダウンロードする

 

3. ダウンロードした秘密鍵のパスを環境変数GOOGLE_APPLICATION_CREDENTIALS として保存する

(例:GOOGLE_APPLICATION_CREDENTIALS = C:\Users\yourname\yourproject-12345-fef892f8w8.json

 

4. BigQueryライブラリのインストール

pip install google-cloud-bigquery

備考:サポートされているPythonのバージョン >= 3.7, < 3.11(2023/03/24時点)

 

5. クエリを実行する

(例:データセット内テーブルの全レコードを取得)

 

from google.cloud import bigquery

# クライアントの作成

client = bigquery.Client()

# クエリ作成

query_job = client.query(
    """
    SELECT
      *
    FROM `projectname.dataset.sometable`
    """
)

results = query_job.result() 

# 実行結果の表示

for i,row in enumerate(results):
    print('{0}:'.format(i+1),row)

 

 

注意事項:

"google.api_core.exceptions.Forbidden: 403 Access Denied:"というエラーが出たら以下2点を確認

1. サービスアカウントに適切なロールが付与されているか(例:"BigQueryデータ閲覧者"ロールでテーブルを作成しようとしている)

2. (Spread sheetから作成されたテーブルの場合) Spread sheetがサービスアカウントと共有されているか。 また以下コードをクライアントのインスタンス化の直前に挿入する

credentials, project = google.auth.default(
    scopes=[
        "https://www.googleapis.com/auth/drive",
        "https://www.googleapis.com/auth/cloud-platform",
    ]
)
client = bigquery.Client(credentials=credentials, project=project)

 

参考

cloud.google.com

discourse.metabase.com

 

cloud.google.com