show log include yuh

勉強したことの復習を兼ねて、IT関係(ネットワーク/サーバ/アプリケーション)についてまとめてます。たまに趣味のこと

スポンサーリンク

BigQueryのクエリ実行をGAE(PaaS)で連携

概要

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サービスは消せず、消すためにはプロジェクトを削除する必要があるようです。