概要
BigQueryはペタバイト規模のデータベースに対して超高速にクエリを実行することができるデータウェアハウスです。
クエリ発行はSQLベースでありGUIでもクエリ発行することができます。さらにプログラムで実行する際にもBigQuery連携のライブラリも用意されています。
今回はこのライブラリをGAEで動かしてみます。
GAE + Flask
GAEはGCPのPaaSになります、PaaSはコードの実行環境を提供されユーザはコードを用意すれば実行するときだけコンピュートリソースが割当がされます。
今回はPaaSとWeb-API フレームワークである"Flask"を用いて実装します。
ファイル構成
PaaSを使う場合ファイル名をあわせる必要があります。
・app.yaml : 構成状態を記載するファイル
・requirements.txt: インストールするモジュールを指定
・main.py : プログラム本体
app.yaml
service部分で今回のサービス名を指定します。プロジェクトでユニークに指定する必要があります。
service: bigquery runtime: python37
requirements.txt
インストールするモジュールです
flask google.cloud
main.py
# -*- coding: utf-8 -*- from flask import Flask, request, json, jsonify from flask_sslify import SSLify from google.cloud import bigquery import os app = Flask(__name__) sslify = SSLify(app) @app.route("/bigquery", methods=["GET"]) def list_bigquery(): #BigQueryクライアントを用意する client = bigquery.Client() #発行するクエリを作成する query_job = client.query(""" {#BigQueryのクエリを指定} """) results = query_job.result() data = [ { "data": test['value'], } for row in results ] return jsonify(data), 200 if __name__ == '__main__': app.run(debug=True, ssl_context='adhoc', host='0.0.0.0', port=443) ~~~ # GAEのサービスアカウントを利用する方法は別途
requirements.txt
インストールするモジュールを記載します。
ここで記載しているpip freeze
を使うと簡単に使っているモジュールをエクスポートしてくれます。
yunabe.hatenablog.com
flask google.cloud
実行
デプロイ
事前にプロジェクトの指定等ができていればコマンド1つでデプロイすることができます。
gcloud app deploy
できていない場合はこちらを参照
アプリケーションのテストとデプロイ | Node.js 用 App Engine スタンダード環境に関するドキュメント | Google Cloud
GCP にて確認
App Engine をブラウザで開くとサービスに今回作成したbigqueryがあり自動的にbase uri が作られています。
この{base uri}/bigquery をgetすることでjsonで取得することができるようになりました。
余談ですがちなみにdefaultサービスは消せず、消すためにはプロジェクトを削除する必要があるようです。