こんにちは、ミナピピン(@python_mllover)です。今回はPythonからGCPのBigqueryにアクセスしてテーブルの作成からデータの挿入、呼び出すまでを一通り紹介していきたいと思います。
PythonからGCPにアクセスする
プログラムからGCPのAPIを使用するためにはまず認証が必要になります。
以下のページにアクセスしてください。

ページ内の手順に従ってサービスアカウントのキーをjson形式で作成して、自分のPCの適当な場所にダウンロードしてください。
次に必要なライブラリをインストールします。
# ライブラリをインストール $ pip install google-cloud-bigquery
これで前準備は完了です、ここからGCPにアクセスしていきます。まずBigqueryにテーブルを新規作成してみましょう。
PythonからBigqueryのテーブル作成
from google.cloud import bigquery
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/~.json' # JSONのパスは任意
client = bigquery.Client()
client = bigquery.Client(project=projectid) # プロジェクトIDはプロジェクトの選択で表示されるID
# テーブルの列名とデータ種類を指定
schema = [
bigquery.SchemaField("date", "TIMESTAMP", mode="REQUIRED"),
bigquery.SchemaField("ticker", "STRING", mode="REQUIRED"),
bigquery.SchemaField("open", "NUMERIC", mode="REQUIRED"),
bigquery.SchemaField("high", "NUMERIC", mode="REQUIRED"),
bigquery.SchemaField("low", "NUMERIC", mode="REQUIRED"),
bigquery.SchemaField("close", "NUMERIC", mode="REQUIRED")
]
# table_id = "your-project.your_dataset.your_table_name"
table = bigquery.Table(table_id,schema=schema)
table = client.create_table(table)
# できたか確認
print(
"Created table {}.{}.{}".format(table.project, table.dataset_id, table.table_id)
PythonからテーブルにデータをINSERT
#Set Project ID
project = projectid
# Set Dataset
dataset = dataset_name
## Set Table
table = table_name
bigquery_client = bigquery.Client()
query = "INSERT INTO `{0}.{1}.{2}` (date, symbol, open, high, low, close) SELECT TIMESTAMP('2019-03-01'), 'BTC', 2751440, 2811990, 2752700, 2700200 ".format(project, dataset, table)
rows = bigquery_client.query(query).result()
実装してて少しハマったのはdatetimeとかtimestampのデータを挿入する場合で、クエリの文字列の中でTIMESTAMP()とかDATE()とかDATETIME()みたいに関数で括っておかないと、以下のようなエラーが表示されます。
400 Query column 1 has type STRING which cannot be inserted into column date, which has type TIMESTAMP
また以下のエラーが表示される場合は支払い情報を登録していないこと原因なので、アカウントとクレカ情報を紐づけてアカウントをアップデートください。
403 Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction.
Pythonからテーブルのデータを呼び出す
from google.cloud.bigquery.table import RowIterator, Row
from google.cloud.bigquery.job import QueryJob
import itertools
# クエリ定義
query = "SELECT date,symbol,open,high,low,close FROM `{0}.{1}.{2}`".format(project, dataset, table)
# JOB実行
query_job: QueryJob = client.query(query)
rows: RowIterator = query_job.result() # APIリクエスト発生+結果待ち合わせ
# 取得したデータを確認
for row in rows:
print(row)
print('------------------')
終わり
以上がPythonからBigqueryへの基本操作です。最近はレンタルサーバーよりGCPみたいなクラウドでデータを管理した方が安上がりみたいなので、そっちに移行するため色々と試行錯誤している最中です笑
:2021/01/02追記
Bigqueryの操作はpandas-gbqの方がやりやすいです。
⇒


コメント
[…] 関連記事:【Python】GCPのBigqueryを「google-cloud-bigquery」を使って操作する […]