Redash v6 で追加されたオートコンプリートの無効化について挙動とコードを追ってみる
この記事は Redash Advent Calendar 19日目の記事です。勤務先でも師走ムードを感じ始めました。
お題
Redash、入力補完(スニペットとか)が出てこなくなってしまって困った...シークレットモードだとちゃんと動く!キャッシュクリアとかスーパリロードしても出てこない...謎 😢(解決方法知っている人いたら、教えてください...)
— mario (@mario_kada) 2018年12月17日
この問題と関係あるかどうかはわかりませんが、オートコンプリートと聞いて、先日リリースされた Redash v6 (正確には 6.0.0-beta から追加)で以下の機能が追加されたことを思い出しました。
If the live autocomplete in the code editor annoys you, you can disable it now
今日はこの機能について検証しつつ、ざっくりと実装を追ってみます。
検証環境は docker-compose
で起動し、Docker イメージは redash/redash:6.0.0.b8537
を使用しました。
影響範囲
この機能はクエリ編集画面に影響があります。
以下はオートコンプリートを無効にする前の画面で、今までのバージョンと同じくオートコンプリートが有効になっています。
上記の画面で表示されている、雷のマークがオートコンプリートの有効・無効を切り替えるトグルになっていて、無効にすると静止画ではわかりにくいですが、以下の画面のようにオートコンプリートが効かなくなります。
オートコンプリートの設定はどこに保持されているか?
Chrome の開発者ツールなどで見るとすぐに分かりますが、LocalStorage に保持されています。
liveAutocompleteDisabled
が false
だとオートコンプリートが有効になるようです。
オートコンプリートを制御しているのはどのコードか?
client/app/components/QueryEditor.jsx
で liveAutocompleteDisabled
を操作しています。
redash/QueryEditor.jsx at v6.0.0 · getredash/redash · GitHub
Redash は現在 Angular から React への移行を進めていて、クエリエディタ周りも v6.0.0 時点では React のコンポーネントに書き換わっています。
このコンポーネントのなかでオートコンプリートのボタンがクリックされるたび、コンポーネントの State と一緒にブラウザの Local Storage を書き換えているようです。
toggleAutocomplete
で呼ばれている localOptions.set
は Redash 独自のもので、Web Storage API を薄くラップしたもののようでした。
redash/localOptions.js at v6.0.0 · getredash/redash · GitHub
まとめ
まとめと書きつつ、これといったまとめはありませんが、オートコンプリート周りの実装を読んだことで、また少し Redash についての理解が深まりました。
それも元ツイートのおかげなので、ありがたい限りです。
お知らせ
Redash についての疑問などを Twitter で拾えることもあるのですが、できればフォーラムへの投稿をしていただけるとありがたいです!日本語でOK!
30行ぐらいで Redash のクエリ実行結果を Google スプレッドシートに書き込むサンプルコード
この記事は Redash Advent Calendar 14日目の記事です。
タイトルの通り、Redash の利用事例で話されることが多く、私も活用している Redash と Google スプレッドシートの連携について、Python のサンプルコードを公開してみます。
使うもの
主に以下のパッケージを利用します。
サンプルコード
GitHub で公開しました。
正確には 27行です。行数を削るために少し苦しい書き方になっている部分はご了承ください。
動かし方
まずは venv
で環境構築します。
$ python3 -m venv .venv $ source .venv/bin/activate $ pip install -r requirements.txt
Google のサービスアカウントを使用して API にアクセスします(この記事ではサービスアカウントの作成などについては割愛します)
サービスアカウントの JSON 鍵ファイルを環境変数で指定します。
$ export CLIENT_SECRET_FILE="/path/to/json/key/credential.json"
Redash のユーザー API キーも同様に環境変数で指定します。
このサンプルコードでは、Redash のデモサイトを使用していますが、お使いの環境にあわせてサンプルコードの URL を変更してください。
$ export REDASH_API_KEY="YOUR_REDASH_USER_API_KEY"
最後に、 main.py
を編集します。
spreadsheet_id="スプレッドシートID", spreadsheet_range="シート1!A1",
スプレッドシート ID と書き込み先の範囲を指定します。
書き込み対象のスプレッドシートには、サービスアカウントから書き込み可能な権限を付与してください。
デモサイトを使用しない場合は、以下のコードを書き換えて使用したいクエリ ID を指定してください。
df = query_to_df(redash, 1)
以下のようにパラメータを使用することもできます。
df = query_to_df(redash, 123, {'foo': 1, 'bar': 2})
実行してみる
準備ができたら実行してみましょう。
$ python main.py
実行が完了すると、上記のようにスプレッドシートの指定した範囲に結果が書き出されるはずです。
まとめ
Redash とスプレッドシートを簡単に連携されることができました。
まだスプレッドシート連携までは手が出せていない。というかたは、よろしければ試してみてください。
明日の Redash Advent Calendar は Redash のメンテナーでもある deecay さんによる「2018年の活動振り返り」です!お楽しみに!
Redash のアラート通知先を独自拡張する
この記事は Redash Advent Calendar 13日目の記事です。折返し地点ですね!
きっかけ
このツイートを見てやってみようと思いました。
Redashってプラグイン機構あるのかな…
— 睦月@インフラ技術…者? (@mutsuki99) 2018年12月12日
オリジナルの Destination 作ったのはいいんだけど、デプロイが Python ファイルのコピーってのがとてもいけてない感じがしている。環境変数のリスト見てる限りプラガブルな仕組みがある雰囲気なんだけどなぁ。
やりかた
コードをパッケージ化する
redash/destinations
に置いているコードを以下のような感じにパッケージ化します。
必ずしも GitHub や Git を使わなくてもよいのですが、今回は説明を省きたいのでこれで進めます。
この記事の本題にはたいして関係ありませんが、この Destination はアラートを JSONL 形式でログファイルに書き出す。というものにしてみました。
Redash の requirements.txt を変更する
アラート通知のパッケージを requirements.txt
に追加します。
-e git+https://github.com/ariarijp/redash-json-logger-destination.git#egg=redash-json-logger-destination-0.1.0
Redash の docker-compose.yml を変更する
検証には Docker を使用するので、docker-compose.yml
の server
と worker
の environment
に以下を追加します。
REDASH_ADDITIONAL_DESTINATIONS: "redash_json_logger_destination"
この REDASH_ADDITIONAL_DESTINATIONS
環境変数で、アラート通知先を追加することができます。
追加したいものが複数ある場合はカンマ区切りで設定できます。
ビルドする
requirements.txt
の変更を反映したイメージをビルドします。
これにはかなり時間がかかるので気長に待ちましょう。
$ docker-compose build
起動してみる
これで準備は完了です。起動してみましょう。
$ docker-compose run --rm server create_db $ docker-compose up -d
管理者ユーザーの追加などの設定は割愛します。
設定画面を見ると、アラートの通知先が追加されています。
まとめ
この手順は、去年書いたクエリランナーを追加するという記事とほとんど同じだったりします。
今朝、先のツイートを見るまでやってみようと思ったことがなかったのですが、結果として同じようにできたのでよかったです。
Redash v6 でクエリの読み込みが早くなる?
Redash Advent Calendar 12日目の記事です。
v6 のベータ版リリースに気になる一文が
先日 v6 のベータ版がリリースされました🎉
新データソースの対応、既存のデータソースの改善、今までは毎回クエリを発行していた Query Results データソースでキャッシュが使えるようになるなど、多くの変更が含まれていますが、そのなかで気になるものがありました。
Fast queries will now load faster.
気になりますね。私は気になりました。
調べてみる
ここ最近の変更を追いかけてみたところ、以下の PR を見つけました。
仕組みはかんたんで、Redash ではクエリを実行するとジョブが発行され、そのジョブをポーリングするのですが、最初の10回は0.5秒間隔、その後は3秒間隔でポーリングすることで、すぐ実行が完了するようなクエリであれば今までより画面に結果が現れるまでの時間が短くなる。というものでした。
まとめ
シンプルなクエリであったり、Query Results でキャッシュを使うケースにおいては体感がかなり変わってきそうですね。
ちょっとした変更ですが、副作用も少なくユーザーにはうれしい変更だなと思いました。
Redash 関連の OSS を GitHub 上のスター数上位5つ紹介する
Redash Advent Calendar 10日目の記事です。
Redash 関連の OSS を GitHub で検索し、スターの多い順上位5つを紹介します。
スター数は 2018/12/10 現在のものです。
ピックアップのルール
- オーガニゼーションが getredash のものは除外
- 明らかに Redash と関連がなさそう(同名の別プロダクトなど)なものは除外
- Docker, CentOS, k8s などでのセットアップスクリプトは除外
1位: kakakakakku/redash-hands-on スター数: 135
Redash Meetup のきっかけにもなった Redash のハンズオン資料です。
公式に次ぐスター数。Redash を導入検討する際にお世話になった方も多いのでは。
2位: hakobera/redashbot スター数: 53
話しかけると Redash のグラフを送ってくれる Slack Bot。
以下の記事も合わせて、Redash ユーザー内では有名になった気がします。
最終更新が2017年4月と少し時間が空いていますが、フォーク数も17と多く、各社で手を加えて利用されているのかもしれません。
3位: toritori0318/redash-dynamic-query スター数: 24
Python で動的なクエリを実行するためのモジュール。
個人的には Redash 運用と共に歩んできたツールのひとつで、いまでも元気にこのモジュールを使ったツールがいくつも弊社の業務を支えています。
4位: mozilla/redash_client スター数: 15
Mozilla でも Redash を STMO という内部のツールで使っているようです。
toritori0318/redash-dynamic-query とは異なり、クエリの検索やダッシュボードの作成など、いくつかの API に対応していますが、すべての API を網羅しているわけではありません。
余談ですが、メインの開発者である Marina Samuel さんは、最近 Redash の開発チームに参加されています。
5位: dwyl/learn-redash スター数: 11
Redash を学習するための資料です。内容はシンプルで、マニュアル+αのような内容です。
最終更新が 2018年1月 なので、おそらく v3 ベースの資料だと思います。
まとめ
ここに紹介したもの以外も、Redash 関連の OSS はいろいろ公開されています。
調べてみて気づいたのですが、今回はランクから除外したセットアップスクリプトなども含めると、スター数上位の多くが日本人ユーザーによって公開されているものでした。
この記事も含め、ささやかながら国内のユーザー向けに情報発信をしている身として、Redash ユーザーを増やしたり、ユーザー同士の知見が集まる場を作っていくことによって、これらの活動を支えていけたらいいかなと思います。