読者です 読者をやめる 読者になる 読者になる

Gunosyデータ分析ブログ

Gunosyで働くデータエンジニアが知見を共有するブログです。

Re:dashで異なるData Sourceのクエリ結果をJOINできるようになったので試してみた - Query Results (Alpha)

Re:dash KPI 分析基盤 可視化

こんにちは。グノシー開発部で部長をしている@cou_zです。最近はDJ RYOWのビートモクソモネェカラキキナ 2016 REMIXをよく聴いています。11/23のライブが楽しみですね。

Gunosyにおけるプロダクト改善は、データ可視化による現状把握から始まると考えています。Gunosyではデータ可視化にいくつかのツールを利用していますが、その中でも最近はRe:dashを用いることが多くなってきました。

先日、Re:dashを用いたリアルタイムKPI通知について紹介しました。 data.gunosy.io

今回は、Re:dashの新しい機能である Query Results (Alpha) Data Source を紹介します。 この機能により、複数Data Sourceのクエリ結果のJOINが可能になりました。アルバイトで分析を担当している松嶋も「ついに使えるようになったんですね!!redashが捗りそう」と期待の新機能です。

Re:dashのData Sourceとは

Re:dashを利用する基本的な流れは「接続先Data Sourceを登録 → クエリを書く → 結果をグラフで可視化 → グラフをダッシュボードに登録」となっています。 Data Sourceはクエリを書く接続先DBのことです。MySQLやBigQuery、Redshiftなどの他にも、Google SpreadsheetsやJSONを返すURLも指定することが出来ます。 下の図のようにたくさんのData Sourceに対応しています。 f:id:cou_z:20161030182920p:plain

Query Results (Alpha) Data Sourceとは

モチベーション

Re:dashを使っていて、異なるData Sourceの結果をJOINして可視化したいということがあります。グノシーでの例としては、人気記事の可視化があります。Redshiftのログをサマって記事ごとの閲覧数を集計し、MySQLにある記事テーブルとJOINし、記事のタイトルやURLと閲覧数をまとめて可視化したい場合です。

グノシーでは、こういう場合はAWSのData Pipelineを利用して、ログの集計前にデイリーでMySQLからRedshiftにデータをコピーしています。AWSのマネジメントコンソールをポチポチするだけで、簡単にデータをコピーすることが出来るので便利ですが、アドホックにクエリを書いている時にわざわざデータのコピーをするのは面倒ですし、コピーするテーブルが増えると管理も煩雑になります。Big QueryなどのAWS以外のサービスを利用している場合は、Data Pipelineのみだとデータのコピーが出来ないので、更に面倒です。

そんな時、Re:dashのみで異なるData Sourceの結果をJOIN出来れば最高ですよね。 2週間ほど前に、Re:dashのファウンダーのArikさんとチャットしている中で、こんな機能が欲しいと伝えてみたら、

It's a planned feature, and I still need to do some research to understand how much effort is involved. If there is a minimal version I can push out this week, I'll do that. Otherwise it will take longer (we're in the middle of upgrading the hosted version to version 0.12).

と「今週リリースいけたらいく」と返信がきました。

待つこと数日。このチャットのことを忘れかけていた先週金曜日にArikさんからαバージョンがリリースされたとチャットが来ました…!

The support for running queries on top of query results is finally deployed.

使い方

使い方は非常に簡単です。Query Results (Alpha)というData Sourceを追加すると、FROM内で他のクエリの結果を query_<id> で使用したクエリを書くことが出来るようになります。インメモリのSQLiteを使用しているため、 query_<id> の結果が大きい場合は、メモリ不足で失敗することがあるとのことです。

使ってみた

さっそく使用してみます。まずはじめに、結果をJOINしたいクエリを2個用意しておきます。

1つ目は、Redshfitから記事閲覧ログをサマって、記事ごとの閲覧数を取得するクエリです。ここではクリック数上位5記事のみを取得することにしました。 f:id:cou_z:20161103164723p:plain f:id:cou_z:20161103164733p:plain

2つ目は、MySQLから記事一覧を取得クエリです。ここでは直近3日間の記事のみを取得することにしました。 f:id:cou_z:20161103164132p:plain f:id:cou_z:20161103164041p:plain

次に、これらのクエリの結果をJOINするために、Query Results (Alpha)というData Sourceの設定をします。Data SourceのNameは、そのままQuery Resultsにしました。 f:id:cou_z:20161031233135p:plain

New Queryページにいくと、Data Sourceで追加したQuery Resultsが指定可能になっています。 f:id:cou_z:20161031233203p:plain

クエリを書いて実行してみます。( query_1は前日の記事の閲覧ログをサマるクエリで、query_2は記事一覧を返すクエリです。) f:id:cou_z:20161101002738p:plain

query_1とquery_2の結果がJOINされました。クエリ実行時に、 query_<id> で指定しているクエリも実行されるため、最新の結果を取得出来るみたいです。 f:id:cou_z:20161031235427p:plain

最後に

Re:dashに追加されたQuery Results (Alpha) Data Sourceを使用して、クエリの結果をJOINする方法を紹介しました。データ可視化がまた簡単になりました。 Arikさんはいつもチャットの返信も新機能開発も速くてすごいです。