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)
参考