絶対に真似してはいけない。闇のRedash入門
絶対に真似してはいけない。闇のRedash入門:
Lobi事業部データエンジニア(自称)の池田です。
この記事はKAYAC Advent Calendar 2018の4日目です。
以前、本ブログでは、健康的な使用事例を紹介しました。
techblog.kayac.com
techblog.kayac.com
今現在のKayacでも、事業の様々な数値や状態を可視化、お問い合わせからの調査等の業務支援ツールとして広く活用されています
本日は、Redashの非健康的な使用事例を紹介します。
Lobiを開発・運用するLobi事業部では、Redashを活用する上で2つの問題を抱えていました。
この問題を解決するソリューションとして、Pythonデータソース
このようなPythonデータソースを使うRedashのクエリが誕生する。
techblog.lclco.com
カスタマーサポート担当から
別のある平日。
営業担当から
そして、一ヶ月後のある平日
等々、様々な業務を行う関係各所から
Kayacでは多くの場合、Google スプレットシート*2を使ってリストが渡されます。
そんな依頼にこちらのソリューション
なんと! エンジニア以外でも扱える素敵なデータソースとして、Googleスプレットシートを使えます。
もちろん!Google Apps Scriptも併用して更に便利になるチャンス!
皆様お気づきだろうか、ここまで環境を整えたRedashは以下のように捉えられるということに。
そう、環境の整ったRedashはMVVMとみなすこともできる!!?
そして、いつの間に、Redash上で動く簡易アプリケーションの爆誕することになります。
もちろん、Git管理されてない
そして、事業の中核になるアプリケーションのリポジトリ外なのでコードレビュー対象外
この簡易アプリケーションは非健康的です。保守の観点で…
PythonデータソースもGoogleスプレットシートデータソースも適切に利用すれば、とても『イノベーティブ』です。
しかし、過度の利用は保守が大変な簡易アプリケーションの生んでしまいます。
用法・用量を守って素晴らしきRedashライフを送りましょう!
そんな感じで、あらゆる業務改善・事業可視化をするエンジニアもカヤックでは募集しております!
Lobi事業部データエンジニア(自称)の池田です。
この記事はKAYAC Advent Calendar 2018の4日目です。
Redashとは
Redashは様々な種類のデータソースにアクセスできる、OSSの素晴らしいダッシュボードツールです。以前、本ブログでは、健康的な使用事例を紹介しました。
techblog.kayac.com
techblog.kayac.com
今現在のKayacでも、事業の様々な数値や状態を可視化、お問い合わせからの調査等の業務支援ツールとして広く活用されています
本日は、Redashの非健康的な使用事例を紹介します。
すべての始まり【Pythonデータソース】
Lobi - Chat & Game Communityは今年で開発・運用が8年目になるスマホゲーマーSNSサービスです。Lobiを開発・運用するLobi事業部では、Redashを活用する上で2つの問題を抱えていました。
- ShardingされたDBが参照しづらい問題
- Detail JSON Parse辛い問題
detail_json
という名前の、どうみてもJSONな文字列
が入ったTEXTカラムが存在するテーブルがあります。単純なSQL文では特定のキーの情報だけ参照するのはとても大変です。この問題を解決するソリューションとして、Pythonデータソース
このようなPythonデータソースを使うRedashのクエリが誕生する。
import json import re # query_params validation validator = re.compile('[0-9]+(,[0-9]+)*') ids = '{{{ids}}}' if not validator.match(ids): print 'plz Comma-Separated Values format' return #shard_map access shard_map_query = ''' select user_id, shard from shard_map where user_id in (%s) ''' % ids rows = execute_query('mysql main',shard_map_query)['rows'] ids_by_shard = {} for row in rows: shard = row['shard'] if not shard in ids_by_shard: ids_by_shard[shard] = [] ids_by_shard[shard].append(row['user_id']) del rows #query detail json data_source_by_shard = { 'shard01': 'mysql shard1', 'shard02': 'mysql shard2', } for current_shard, current_ids in ids_by_shard.items(): query = ''' select id, detail_json from user_opt where id in (%s) ''' % (','.join(map(lambda x:str(x), current_ids))) data_source = data_source_by_shard[current_shard] rows = execute_query(data_source,query)['rows'] for row in rows: data1 = '' data2 = '' if row['detail_json'] != '': detail = json.loads(row['detail_json']) if 'data1' in detail: data1 = detail['data1'] if 'data2' in detail: data2 = detail['data2'] add_result_row(result, { 'id': row['id'], 'data1': data1, 'data2': data2, }) add_result_column(result, 'id', '', 'integer') add_result_column(result, 'data1', '', 'string') add_result_column(result, 'data2', '', 'string')このときは最強のソリューションに見えた。
参考文献
tbpgr.hatenablog.comtechblog.lclco.com
気軽にエンジニア以外でも扱える【Googleスプレットシートデータソース】
とある平日。カスタマーサポート担当から
『こちらのリストにのっている方のアクセス情報を一覧できない?』
別のある平日。
営業担当から
『このリストにのっているグループの発言量を一覧できない?』
そして、一ヶ月後のある平日
『この間の一覧した情報、定期的に自動更新できない?』
等々、様々な業務を行う関係各所から
このリストにのっている○○
シリーズの業務支援を依頼されることがあります。 Kayacでは多くの場合、Google スプレットシート*2を使ってリストが渡されます。
そんな依頼にこちらのソリューション
なんと! エンジニア以外でも扱える素敵なデータソースとして、Googleスプレットシートを使えます。
もちろん!Google Apps Scriptも併用して更に便利になるチャンス!
これは仕事が捗ります
そして、簡易アプリケーション爆誕
ここまでは、健康的な範疇の活用方法ですが、皆様お気づきだろうか、ここまで環境を整えたRedashは以下のように捉えられるということに。
Redash機能 | 要素 | |
---|---|---|
様々なデータソース | Model | 特に、柔軟に入出力可能なGoogleスプレットシートは扱いやすい |
様々なVisualization | View | 折れ線グラフや棒グラフ、箱ひげ図、サンキーチャートなど。 |
Pythonデータソース | ViewModel | 柔軟なデータ処理を行える。module importすれば可能性は無限大 |
そして、いつの間に、Redash上で動く簡易アプリケーションの爆誕することになります。
もちろん、Git管理されてない
そして、事業の中核になるアプリケーションのリポジトリ外なのでコードレビュー対象外
この簡易アプリケーションは非健康的です。保守の観点で…
現在のLobi事業部のRedash運用
保守が必要になるような割と業務で重要なものは、アプリケーションのリポジトリにredash/query_3121.py redash/query_3122.py ︙のように保存してGit管理するケースが出てきています。
まとめ
Redashの登場により、Kayacではいたるところで業務改善が行われました。PythonデータソースもGoogleスプレットシートデータソースも適切に利用すれば、とても『イノベーティブ』です。
しかし、過度の利用は保守が大変な簡易アプリケーションの生んでしまいます。
用法・用量を守って素晴らしきRedashライフを送りましょう!
そんな感じで、あらゆる業務改善・事業可視化をするエンジニアもカヤックでは募集しております!
次回予告
明日は、id:wyumikokhさんが『gitbookで幸せ計画』について書いてくれるようです。*1:詳しくは、#6「Shardingマジ怖い」tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blogをご参照の上
*2:https://www.google.com/intl/ja_jp/sheets/about/
*2:https://www.google.com/intl/ja_jp/sheets/about/
オリジナルのエンクロージャ: |
コメント
コメントを投稿