Redashにはクエリの定期実行機能が存在します。
しかし、この機能には一つ難点があり、複数曜日の指定できません。
具体的にどういうことかというと、平日だけ毎日10時に定期実行したいクエリが存在したとしても、「月曜から金曜は実行する、土日はしない」のようなことができないのです。
この場合毎日10時に実行するという設定を行うことで一応回避はできるのですが、今度は土日に実行されてしまいます。
Google Cloudのような従量課金形態のデータ基盤を利用している場合、余計なお金がかかってしまうので可能なら避けたいです。データ量の少ない場合はいいですが、データ量が多くなればなるほど需要は大きくなります。
今回はそんなRedashでなんとか平日だけ定期実行させる方法をいくつか紹介します。
方法1: 毎日クエリを実行するようにして、土日はインスタンスを落とす
最初から力技ですみません。
AWSでいうところのautoscalingなどを利用し、Redashの休日はインスタンスを止めてしまう方法です。
インスタンス費用分もお得で一番楽だと思います。
一つ気をつけた方がいいのは、「毎月1日0時時点での特定のデータが欲しい」などの土日でも定期実行したいクエリが存在する場合、この方法は取れないもしくはautoscalingに工夫が必要になる点です。
利用しているメンバーにしっかりと問題ないか調査してから、実行するようにしましょう。
方法2: Redashでは定期実行の設定をせず、APIで更新する
RedashにはAPIが存在します。
定期実行したいクエリを更新するAPIをスケジューリングして実行することで、自在なスケジュール設定をが可能です。
APIにはQuery単位のAPIキーとユーザー単位のAPIキーが存在しますが、クエリ更新はユーザー単位のAPIキーを使います。
https://(Redashのドメイン)/users/me
にログイン後アクセスし、APIキーを取得します。
APIキーを取得後、以下のコマンドでAPIを実行することでクエリのRefreshを行うことができます。(zshで実行確認しています)
curl -XPost https://(Redashのドメイン)/api/queries/(クエリのID)/refresh\?api_key=\(取得したAPIキー)
このAPIをGitHub ActionsやGASあたりをつかって定期実行できるようにスクリプトとスケジュールを組めば、平日だけ実行することは実現できるかと思います。
まとめ
今回は平日だけ定期実行する、と題して定期実行を柔軟に行う方法を紹介しました。
そもそもこんなことしなくてももっと簡単にできるよ、という場合は容赦なくコメントでマサカリを振っていただけると幸いです。