PythonでBQからデータを抽出
ゴール
サーバーを立ち上げて、curl http://localhost:8080
を実行すると「BQからデータを抽出」ができる
※グレーになっている部分はターミナルで実行
前提
「Hello World」が表示できる環境からスタート
※今回は下記の記事でBQにデータが格納されている状態を想定してます。
使用するライブラリ
- google-cloud-bigquery
手順
① サービスアカウントの作成 ※既に作成されている場合は②へ
「GCP > APIとサービス > 認証情報」( https://console.cloud.google.com/apis/credentials )に移動して作成
1. サービスアカウント名を入力
2. 作成して続行をクリック
3. ロールを選択(今回は編集者にしました)
4. 続行をクリック
5. 完了
keyの作成
1. 上記手順で作成したアカウントがあることを確認
2. そのアカウントのリンクをクリック
3. 「キー」を選択
4. 鍵を追加、「新しい鍵を作成」をクリック
5. 「JSON」で作成
JSON
・ 上記でダウンロードした「JSON」をapp.pyと同じ階層でcredentials.jsonとして保存
② 1つのファイルを作成する
– bigquery.py
from google.cloud import bigquery
DATASET = 'BQデータセット'
BQ_TABLE = 'BQテーブル'
def select(datetime_bq_partition):
bq_client = bigquery.Client()
table_id = bq_client.dataset(DATASET).table(f'{BQ_TABLE}_{datetime_bq_partition}')
return bq_client.query(f'select * from `{table_id}`')
③ 既存のファイルを編集
import os
from flask import Flask
import bigquery
from datetime import datetime, timedelta, timezone
app = Flask(__name__)
@app.route("/")
def test():
data = []
JST = timezone(timedelta(hours=+9), 'JST')
now = datetime.now(JST)
datetime_bq_partition = now.strftime('%Y%m%d') # BQテーブルのパーティション取得用日時
rows = bigquery.select(datetime_bq_partition)
for row in rows:
data.append(row)
print(data)
return "Hello World!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
④ ライブラリをインストールする
pip install -r requirements.txt
⑤ 確認
– ターミナルでpython3 app.py を実行すると、Running on http://....8080
と表示される
– 別ターミナルでcurl http://localhost:8080
を実行し「Hello World!」が表示
– ターミナルで格納されていたデータが抽出できていればOK!
credential.jsonの「パスをコピー」して、下記をターミナルで実行する
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
ディスカッション
コメント一覧
まだ、コメントがありません