前回はGドライブのCSVファイルやスプレッドシートからデータを読み書きする方法をまとめましたが、今回はBigQueryデータの読み書きについてまとめたいと思います。
本当であれば1つの記事にまとめたかったのですが、思いのほかボリュームが大きかったために別記事としました。
データレイクとしてBigQueryを利用している企業が多いため、今回のテクニックはビックデータの解析をするPython/Colaboratoryとの相性は抜群だと思います。
準備
GCPのAPIキーの取得
ColaboratoryはGCPアカウントと紐付けがされているわけではないので、GCPサービスであるBigQueryにアクセスする際は事前にリンクする必要があります。
そもそものユーザーにGCPアクセス権限がなければ何もできないため、必要であればGCPアカウントを作成してBigQueryのアクセス権限を付与してください。
from google.colab import auth
auth.authenticate_user()
を実行すると接続認証へのリンクが表示されるため、画面遷移でアクセスリクエストの許可を行い、ログインコードをコピーして、もとのColaboratoryページにてログインコードを入力してください。
何もエラーが表示されなければOKです
読み込み
BigQueryのデータはPandasを利用して取得します。
pd.io.gbq.read_gbq()関数に実行したいSQL文とプロジェクト名を指定すればOKです。
import pandas as pd
# プロジェクトの定義
project_id='myProject'
# 発行するSELECT分を定義
sql='''
SELECT age, total, male, female
FROM population_of_wako
ORDER BY age ASC
'''
# SELECT文の実行
df=pd.io.gbq.read_gbq( sql, project_id=project_id )
# 取得結果を表示
df.head(2)
実行自体は1行でできるため超簡単です。
age | total | male | female | |
---|---|---|---|---|
1 | 0 | 798 | 392 | 406 |
2 | 1 | 814 | 414 | 400 |
書き込み
BigQueryの書き込みは読み込みよりももっと簡単です。
登録したいデータをデータフレームにセットしてto_gbq()関数を呼び出すだけです。
# プロジェクトの定義
project_id='myProject'
# テーブル名の定義
table='population_of_wako_2'
# データフレームの内容をBigQueryのテーブルに追加
df.to_gbq( table, project_id=project_id, if_exists="append")
エラーの表示なく登録ができたら指定したテーブル(今回の場合は'population_of_wako_2')にデータが格納されます。
ちなみに引数で指定するif_existsには以下の指定ができます
if_exists | 内容 |
---|---|
fail | 指定したテーブルが存在していたら、TableCreationErrorを発生させる |
replace | 指定したテーブルが存在していたら、テーブルの上書きをする |
append | 指定したテーブルが存在していたら、データを追記する |
今回はappendを指定しているため、テーブルにデータを追記しているイメージとなります。