ヘッドレスBIツール Cube Cloud を Google BigQuery と連携して使ってみる
Cube Cloud という存在を知りました。オープンソースのヘッドレスBIツールだそうです。
まずは使ってみます。使い方にはふたとおりあるようです。
- Cube がホスティングするサーバーで動く Cube Cloud
- 自分でサーバーをたてる Cube
今回は Cube Cloud を試します。
Cube の特徴
まだ調査段階ですが、次のような優位性がありそうです。
- Athena や BigQuery にある分析データを、Cubeのモデルに従うことにより、一貫性のある書き方で抽出できる
- 抽出したデータはCubeの仕組みでキャッシュできる
- 抽出したデータはAPIとしてフロントエンドやBIツールから利用できる
複数の分析データソースを利用している状況だと、サービスごとにクエリが違ったりメンテナンスが大変になる印象ですので、それを解消しようというのは理解できます。
Cube: API-First Business Intelligence
目標
わたしはこのあたりのツールに詳しくないので、Cubeが他のBIツールに対してどのくらい優位性があるかはわかりません。まずは使ってみようと思います。
本稿では BigQuery の公開データセット「新型コロナウィルス感染者情報」を使って、Cube Cloud でグラフを作るところまでを目標にします。もうほとんどこのブログをなぞるだけなのですが、せっかくなので記録を残しておきます。
Cube Cloud に登録する
こちらのページ から登録できます。GitHub か Google アカウントが使えます。
Deploymentを作成する
このような画面に移ります。クラウドプラットフォームを指定するようです。どうやらVPC内に用意してくれる機能もあるようで(Enterpriseプランぽいですが)その絡みかもしれません。
deploymentの名前はなんでもいいですが test-covid19
とかにしておきます。デプロイ先には Google Cloud を選択しました。残念ながら、日本リージョンはデプロイ先として選択できないようですね。アイオワにしました。
次に、Cube.js をどうやって作りますかという画面になります。今回はスクラッチで、かつブラウザ上で試すので、+ Create
を選択しました。
データベースは、BigQueryを選択します。
Google Cloud の Project ID を入力し、さらに BigQuery へアクセスするためのキーファイルが求められます。
Google Cloud 側で Cube Cloud専用のサービスアカウントを作るのが無難だと思います。このとき、以下のロールが必要です。
- BigQuery Data Viewer
- BigQuery Job User
Google Cloud でこんなイメージでサービスアカウントを作り、JSONキーファイルを生成します。
キーファイルをアップロードしたら、Apply
します。接続がうまくいったら、Generate Data Schemaという画面で対象のデータセットを聞かれますが、今回は公開データに対して作業を行うのでSkip & Deploy
します。しばらく待機です。
Schema を編集する
deployment が終わったら、Schema を編集できます。JavaScript のファイルを用意して、そこでcube()
関数を実行することで、Cube.jsサーバー経由でBigQueryとやりとりできるようです。まず、画面上部Enter Development Mode
を押して、編集モードへ入ります。次に、schema/
配下にMeasures.js
ファイルを作ります。中身はブログから引用した以下です。
cube(`Measures`, {
sql: `
SELECT *
FROM \`bigquery-public-data.covid19_govt_response.oxford_policy_tracker\`
`,
measures: {
confirmed_cases: {
sql: `confirmed_cases`,
type: `max`
},
cancelPublicEvents: {
sql: `CAST(cancel_public_events AS NUMERIC)`,
type: `max`
},
},
dimensions: {
country: {
sql: `country_name`,
type: `string`
},
date: {
sql: `TIMESTAMP(${Measures}.date)`,
type: `time`
},
},
});
正直あまりDSLはわかっていませんが、ひとまずブログに従います。こんな感じになればOKです。画面右上のSave All
を押して保存してください。
Playground で試す
左ペインでPlayground
を押してください。今作ったMeasures.js
が試せます。Queryを選択するような見た目の画面にいくはずですので、以下のように選択していってください。
- Measures: Confirmed Cases
- Time: All time by Day
- Filters: Country equals Japan
日本国内の日毎の累計陽性者数
が出るはずです。
2021年9月8日時点の累計感染者数が1,617,099
で、これはNHKによる感染者数データともだいたい一致していそうです。
Cube Cloud のさわりを試した
まずは、Cube Cloud と BigQuery を連携して使ってみました。まだまだほんの一部しか試せていません。今後も調査を続けていきます。具体的には、以下のような点が気になっています。
- APIでどんなデータが呼べるのか
- ブラウザや他のサーバーかからAPIをコールするとき、認証はどうするのか
- Cube Cloud ではなく Cloud Run にデプロイして使ってみたい
参考
Discussion