30行ぐらいで Redash のクエリ実行結果を Google スプレッドシートに書き込むサンプルコード

この記事は Redash Advent Calendar 14日目の記事です。

adventar.org

タイトルの通り、Redash の利用事例で話されることが多く、私も活用している Redash と Google スプレッドシートの連携について、Python のサンプルコードを公開してみます。

使うもの

主に以下のパッケージを利用します。

github.com

github.com

github.com

github.com

サンプルコード

GitHub で公開しました。

github.com

正確には 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

f:id:ariarijp:20181214204422p:plain

実行が完了すると、上記のようにスプレッドシートの指定した範囲に結果が書き出されるはずです。

まとめ

Redash とスプレッドシートを簡単に連携されることができました。

まだスプレッドシート連携までは手が出せていない。というかたは、よろしければ試してみてください。

明日の Redash Advent Calendar は Redash のメンテナーでもある deecay さんによる「2018年の活動振り返り」です!お楽しみに!

Redash のアラート通知先を独自拡張する

この記事は Redash Advent Calendar 13日目の記事です。折返し地点ですね!

adventar.org

きっかけ

このツイートを見てやってみようと思いました。

やりかた

コードをパッケージ化する

redash/destinations に置いているコードを以下のような感じにパッケージ化します。

github.com

必ずしも 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.ymlserverworkerenvironment に以下を追加します。

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

管理者ユーザーの追加などの設定は割愛します。

設定画面を見ると、アラートの通知先が追加されています。

f:id:ariarijp:20181213203749p:plain

f:id:ariarijp:20181213203907p:plain

まとめ

この手順は、去年書いたクエリランナーを追加するという記事とほとんど同じだったりします。

ariarijp.hatenablog.com

今朝、先のツイートを見るまでやってみようと思ったことがなかったのですが、結果として同じようにできたのでよかったです。

Redash v6 でクエリの読み込みが早くなる?

Redash Advent Calendar 12日目の記事です。

adventar.org

v6 のベータ版リリースに気になる一文が

先日 v6 のベータ版がリリースされました🎉

discuss.redash.io

新データソースの対応、既存のデータソースの改善、今までは毎回クエリを発行していた Query Results データソースでキャッシュが使えるようになるなど、多くの変更が含まれていますが、そのなかで気になるものがありました。

Fast queries will now load faster.

気になりますね。私は気になりました。

調べてみる

ここ最近の変更を追いかけてみたところ、以下の PR を見つけました。

github.com

仕組みはかんたんで、Redash ではクエリを実行するとジョブが発行され、そのジョブをポーリングするのですが、最初の10回は0.5秒間隔、その後は3秒間隔でポーリングすることで、すぐ実行が完了するようなクエリであれば今までより画面に結果が現れるまでの時間が短くなる。というものでした。

まとめ

シンプルなクエリであったり、Query Results でキャッシュを使うケースにおいては体感がかなり変わってきそうですね。

ちょっとした変更ですが、副作用も少なくユーザーにはうれしい変更だなと思いました。

Redash 関連の OSS を GitHub 上のスター数上位5つ紹介する

Redash Advent Calendar 10日目の記事です。

adventar.org

Redash 関連の OSSGitHub で検索し、スターの多い順上位5つを紹介します。

スター数は 2018/12/10 現在のものです。

ピックアップのルール

  • オーガニゼーションが getredash のものは除外
  • 明らかに Redash と関連がなさそう(同名の別プロダクトなど)なものは除外
  • Docker, CentOS, k8s などでのセットアップスクリプトは除外

1位: kakakakakku/redash-hands-on スター数: 135

github.com

Redash Meetup のきっかけにもなった Redash のハンズオン資料です。

公式に次ぐスター数。Redash を導入検討する際にお世話になった方も多いのでは。

2位: hakobera/redashbot スター数: 53

github.com

話しかけると Redash のグラフを送ってくれる Slack Bot

以下の記事も合わせて、Redash ユーザー内では有名になった気がします。

qiita.com

最終更新が2017年4月と少し時間が空いていますが、フォーク数も17と多く、各社で手を加えて利用されているのかもしれません。

3位: toritori0318/redash-dynamic-query スター数: 24

github.com

Python で動的なクエリを実行するためのモジュール。

個人的には Redash 運用と共に歩んできたツールのひとつで、いまでも元気にこのモジュールを使ったツールがいくつも弊社の業務を支えています。

4位: mozilla/redash_client スター数: 15

github.com

Mozilla でも Redash を STMO という内部のツールで使っているようです。

toritori0318/redash-dynamic-query とは異なり、クエリの検索やダッシュボードの作成など、いくつかの API に対応していますが、すべての API を網羅しているわけではありません。

余談ですが、メインの開発者である Marina Samuel さんは、最近 Redash の開発チームに参加されています。

5位: dwyl/learn-redash スター数: 11

github.com

Redash を学習するための資料です。内容はシンプルで、マニュアル+αのような内容です。

最終更新が 2018年1月 なので、おそらく v3 ベースの資料だと思います。

まとめ

ここに紹介したもの以外も、Redash 関連の OSS はいろいろ公開されています。

調べてみて気づいたのですが、今回はランクから除外したセットアップスクリプトなども含めると、スター数上位の多くが日本人ユーザーによって公開されているものでした。

この記事も含め、ささやかながら国内のユーザー向けに情報発信をしている身として、Redash ユーザーを増やしたり、ユーザー同士の知見が集まる場を作っていくことによって、これらの活動を支えていけたらいいかなと思います。

Redash のクエリ名を空にしてしまうと困るから直した

Redash Advent Calendar 8日目の記事です。

adventar.org

昨日の記事の続きです。

ariarijp.hatenablog.com

直した

直せてよかったです。

github.com

英語は誰かに直してほしいです。

考察

この問題はおそらく Angular から React への移行のなかで入り込んでしまったものだと思います。

クエリ編集をするための EditInPlace コンポーネントmaster ブランチでは React コンポーネントですが、v5.0.2 タグでは以下のように Angular のコンポーネントになっていたのが怪しいなと思って眺めてみたところ、問題を見つけられたので今回の修正・PR につながりました。

redash/edit-in-place.js at v5.0.2 · getredash/redash · GitHub

Redash は積極的に React への移行を進めていて、v6 のリリースノートにもその記載があります。

Release v6.0.0-beta · getredash/redash · GitHub

v6 リリース前にいろいろバグは潰されると思いますが、他にも React 移行でバグがでてくるかもしれませんね。

明日の告知

明日は anntoque さんによる「Redashから参照してるPrestoのカタログクリーニングの話」です!