こんにちは、ミナピピン(@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」を使って操作する […]