Redashの有用性をご存じでない?


Ateam cyma Advent Calendar 2019、14日目です!
14日目は 株式会社エイチーム のちょっとおちゃめな帰国子女エンジニア @NamedPython がお送りします。(母国語は忘れました)

5日目では「見える化を新卒が進めるといい感じに成長できたよ〜」というお話ともうひとつ、 「Redashは最高だよ〜」というお話もしました。そこで今日はRedashについてのお話です。

とはいってもcymaのRedashを安易には公開できないので、自前でインスタンスを用意してやりました。

Redashってなんなのよ

俗にいうBIツールというやつです。データの分析や、可視化に特化したツールで、データベース等の情報源を繋ぐことでデータの抽出やグラフ化が容易にできます。
データベースからのデータ抽出といえばSQLを書くことが必要かと思われますが、そこすらグラフィカルなUIにした非エンジニアにも扱いやすいツールも出てきています。
Redashとよく比較されるものとしては、

  • metabase
  • Tableau
  • Google Data Portal
  • Superset

等があります。

RedashのUIはこんな感じ↓↓

じゃあRedashはどんなBIツールかという特徴を簡単にまとめると

  • OSS
  • SQLでゴリゴリデータを引ける
  • HTMLコンテンツを結果に描画できる
  • SQLで引いた結果をさらにSQLで引ける(Query Results)

といった感じです。Query Resultsが極め付けに最強です。

ここからは、Redashの機能の一部とその設定方法を紹介していきます!

データを取得する

Open data等からRDSにデータを注入してやろうとも考えましたが、時間の関係でGoogle Analyticsのデータを用いて紹介していきます。
幸いなことに、自分のブログには数年前からGoogle Analyticsを導入しているおかげで多少データがたまっています。

Data sourceの追加

RedashにはすでにGoogle Analyticsと連携する機能が備わっています。ここでは詳細には解説しませんが、少しステップを踏む必要があるので、挑戦する際は公式ドキュメントをご参照下さい。

Data sourceに名前をつけ、ドキュメントの手順に従い取得した認証情報のJSONをアップロードします。
すべてのData sourceには、Test connectionのボタンが必ず設置されているので、接続に成功するまでにらめっこできます。

データの取得方法

「SQLでゴリゴリデータを引ける」なんて言った矢先ですが、Google AnalyticsのData sourceはSQLを書くことができません。ここで書くのは、APIリクエストのBodyなのです。

例えば、「ページタイトル毎のUUを2年前から今日にかけて降順でみたい」というようなものを書くとします。

画面はこんな感じ。きちんと取得できていますね

スニペットもドン。

{
    "ids": "ga:********",
    "start_date": "365daysAgo",
    "end_date": "today",
    "metrics": "ga:users",
    "dimensions": "ga:pageTitle",
    "sort": "-ga:users"
}

ga:usersであったり、ga:pageTitleのようなキーワードが見て取れると思います。

FAQ

Q: 「そのキーワードはどこから知るんじゃ!」
A: 「Google Analytics APIのDimensions & Metrics Explorerから探しましょう」

この中から、自分の見たいメトリクス、その切り口を探します。
例えば、Google AnalyticsにAdwordsをつないでいる人はCPA(1CVあたりの広告費)を、ga:costPerConversionga:costPerGoalConversionをメトリクスに指定することで得られます。

切り口は、オーガニック, リスティングなどの流入元(ga:medium)や日付(ga:date)など様々な切り口で分析できます。

Query Results してみる

さて、データが取得できたところで続いての機能の紹介です。
どんなシチュエーションでこの機能を使うかを考えてみましょう

先ほどの「ページタイトル毎のUUを2年前から今日にかけて降順でみたい」というクエリの結果をよ~く見てみると、実は似たようなものがいくつかあるんです。
記事タイトルは同じでも僕がブログタイトルを何回か変えているせいで結果が複数に分かれてしまっているんですね。

じゃあこれをSQLの力で取り除くとしましょう。

Data sourceの設定

超絶簡単です。Google Analytics同様に追加できます。構成や接続を間違えていない限り作るだけで追加できます。

やっていく

さて、ここからはSQLを書きます。Query Resultsは、MySQLでもPostgreSQLでもありません!SQLiteです。少し癖はありますが調べながらやればよいでしょう。

データを加工する前に、とりあえず丸ごと引っ張ってみましょう。
Data sourceにQuery Resultsを指定するのを忘れずに

全部引っ張ってくるSQLはこれだけ。

SELECT *
FROM query_3

query_3...?そんなテーブル作ってないぞ...いやまさか...?!
そう。クエリ結果は勝手にこのような名前でテーブルに保存されているのです。

では3とはなにか。それはクエリページのURLを見ればわかります。
先ほどのクエリ結果のURLが、/queries/3となっているので、テーブルの命名もquery_3となるわけです。

では本題に戻ってデータ加工をやっていきます。

「タイトル(ex: スマートフォンで撮った書類から影を取り除いてみた - 有能なフリ)から、ブログタイトル(ex: 有能なフリ)を取り除き、同タイトルのUU数を合算する」、をゴールにしましょう。

この記事はSQLのための記事ではないので、さっそくドーン!

データ加工のSQL(sqlite)
SELECT substr(q.ga_pageTitle, 1, instr(q.ga_pageTitle, ' - ')) AS page_title,
       SUM(q.ga_users) AS uu
FROM query_3 q
WHERE substr(q.ga_pageTitle, 1, instr(q.ga_pageTitle, ' - ')) != ""
GROUP BY 1
ORDER BY 2 DESC

結果もドーン!

うまく取り除けましたね。空白になってしまう結果があったので、それはWHERE句で取り除きました。
Google Analyticsの結果を取得しただけではできなかったことが、Query Resultsで簡単に実現できました。やったね

TIPS

偉大なる先輩 @ihsiek から教えてもらったんですが、上記の方法でQuery Resultsをすると、参照しているクエリを再実行し結果を待ってからQuery Resultsをしています。
すでに実行してあるクエリなら、そのキャッシュを使ってQuery Resultsがしたいですよね?

あるんです

テーブル名をcached_query_Nにしてあげればいいだけです。実行に時間のかかるクエリを扱う際には、キャッシュされた結果をQuery Resultsすると爆速です

グラフにしてみる

さて続いての機能は、BIツールの本領、可視化です。
先ほど綺麗にしたクエリ結果を、記事タイトルごとにグラフとして描画してみましょう。

Visualizationの追加

ここにボタンがありますのでポチー!

SQLを調整 & グラフを作る

UUトップ5の記事たちを並べて円グラフにしてみましょう!
トップ5なので、先ほどのSQLの最後にLIMIT 5を足してあげればいいですね。あとはカチカチっと...いじるところが多いので結果だけドーン!

ふむふむ、いいですね。
グラフもそこそこにカスタマイズが効くので何でもできそうです。

検索をつけてみる

実際の業務でRedashを運用し始めると、

  • この期間のこのデータが...
  • この特定の自転車のこのデータが...
  • こういう条件の注文データが...

というような需要がとても多くあります。Redashは、この需要をとても簡単にかなえることができます。

結果内を検索

言葉の通り、一度叩いたクエリ結果に対してかける検索です。

先ほどのクエリを、タイトルによって検索できるようなものにしてみましょう。
テーブルビューから、Edit Visualizationに行きましょう。

そして、Use for searchにチェックを入れ、せっかくなのでついでにカラム名もいい感じにしてあげます。

そうすると何やら、テーブルビューのカラム名の下に検索欄が現れました!
そう...もう検索するだけなんです。

しかもここリアルタイム検索なので、かなりキビキビ動きます。
ただ注意点として、Use for searchはどのカラムにも付与することができますが、付与しすぎるとむしろリアルタイム検索が非常に重くなりますので、欲しい検索を使用者とすり合わせるとGoodです

まとめ

Redashによるデータの取得から可視化、検索まで一通り紹介してみました。
これでもまだほ~~~~んの一部です。まだまだ紹介し足りません。

この記事を書くにあたって、RedashをEC2に建てるなどしましたが、そこまで手間取らずむしろAWSの構成の勉強にもなったくらいです。
インターネットにはOpen data含めいろいろなデータが転がっているので、皆さんもぜひお手元で試してみてください!

小ネタ

Redash on EC2を無料枠の中で試そうとするとt2.microを選ぶことになるんですが、それだとまったく性能が足りないので公式アナウンスのt2.smallか、t2シリーズより安価で性能の高いt3t3.smallか、t3とほぼ同性能だが10%ほど安価なt3at3a.smallあたりをお勧めします(実際にt2.microを試して動きませんでした)。

t3aシリーズは、CPUにIntel XeonではなくAMD EPYCを採用しており、互換性に若干の懸念(主観)がありますが、今回のRedashインスタンス構築の際は特に問題なく、むしろサクサク動きました。

おわりに

Ateam cyma Advent Calendar 2019、14日目いかがでしたか?
15日目は キャンプガチ勢デザイナーの @manooo さんが、キャリアパスやマネジメントに関する記事を書かれるそうですので、お楽しみに!

株式会社エイチームでは、一緒に働けるチャレンジ精神旺盛な仲間を募集しています。

エンジニアとしての働き方に興味を持たれた方はcymaのQiita Jobsをご覧ください。

そのほかの職種は、エイチームグループ採用サイトをご覧ください。