前準備
GoogleColaboratoryはGoogleアカウントさえあれば使えますが、GCPアカウントと直接紐づいているわけではないのでユーザーの認証を事前に通しておく必要があります。
#グーグルアカウント認証でgooglecolabとBQを繋ぐ from google.colab import auth auth.authenticate_user()
上記のコードを実行すると、アカウント連携を許可するかどうかホップアップが出るのでアカウント連携を許可します。
*ColaboratoryでGoogleアカウントを認証するだけなので、対象のGoogleアカウントがGCPのBigQueryにアクセスする権限を持っていなければクエリも実行不可能です。
BigQueryのテーブルをSELECTする
認証が通ったらいよいよColabからBQのテーブルにクエリを叩くわけですが、その方法としてはColaboratoryのMagic Commandの%%bigqueryを使うなどいろいろありますが、JupyterNotebookからであれば自分がアクセス可能なGCPプロジェクトのIDがわかっていればマジックコマンドを使ってクエリを実行することができます。
<実行イメージ>
# BigQueryのテーブルからデータをセレクトする %%bigquery --project <プロジェクトID> df SELECT * FROM `<プロジェクトID>.<テーブル名>` LIMIT 1000 ;
実際に、BQで誰でもアクセスできる公開データセットの1つの野球のデータをSEELCTで引っ張ってみます。
# BigQueryの公開データセットの野球に関するテーブルの件数を数えて # pd.DataFrameにdfという名称で突っ込む %%bigquery --project {GCPのProjectID} df SELECT COUNT(*) as cnt FROM `bigquery-public-data.baseball.games_post_wide` ;
これを実行すると変数dfにクエリの結果が格納されます
おまけ
他にもGCPがPython用に作ったの公式ライブラリを使用する方法もあります。
from google.cloud import bigquery project_id = '<プロジェクトID>' # authが終わっていたら普通にクライアント認証は通る client = bigquery.Client(project=project_id) # 実行するクエリ query = """ SELECT * FROM `<プロジェクトID>.<テーブル名>` LIMIT 1000 ; """ # メソッドに`to_dataframe()`をつけるとpd.DataFrameで結果を受け取れる df = client.query(query).to_dataframe()
BigQueryにデータの書き込み・テーブル作成
Python上のデータをBigQueryの書き込むのは読み込みより簡単で、登録したいデータをデータフレームにセットしてto_gbq()関数を呼び出すだけです。
# プロジェクトの定義 project_id='myProject' # テーブル名の定義 table='test_table' # データフレームの内容をBigQueryのテーブルに追加 df.to_gbq( table, project_id=project_id, if_exists="append")
ちなみに引数で指定するif_existsには以下の指定ができます
・if_exists=”replace” テーブルを置き換える
・if_exists=”append” テーブルにデータを追加する
・if_exists=”fail” 既に同名のテーブルがある場合はエラーを吐く
参照:https://qiita.com/Hyperion13fleet/items/a77ca93a61cb39d50138
コメント
[…] 関連記事:GoogleColaboratoryでBigQuery上のテーブル情報の読み込み・書き出し […]