ダッシュボードの「Schedules」から Email や Slack などへ定期的な配信設定を行う事が可能ですが、先日、下記メッセージとともにとある配信が失敗してしまいました。
Error: Error occurred while generating this dashboard - contact administrator (error: Render job XXXXXXXXXXXXXXXXXXX failed [query failed: Failed to retrieve data - Not found: Table XXXXXXXXXXXXXXXX was not found in location US])
この数分後に当該ダッシュボードを開いてみると問題なく表示されたため、おそらくデータソースとなっているテーブルが洗い替えなどで一時的に利用できない状態にあったのではないか?と考えています。
とはいえ配信が欠けてしまうと周知ができなくなってしまうので、このとき Schedule 側で任意の回数のリトライを設定することができないか?あるいは他のワークアラウンドがあるか?をお聞きしたいのと、もしなければリトライ設定の追加を要望にあげたいと考えています。よろしくお願いいたします。
失敗したスケジュールのリトライについて、残念ながら現在管理画面等から設定できる機能はございません。
既にグローバルで複数のお客様から同様の機能要望をいただいており、そちらに+1させていただきます。
スケジュールが失敗した場合、基本的にはエラーメールが飛びますのでそれを元に管理者が手動で再実行という運用にはなってしまうのですが、ワークアラウンドとしてはAPIを使ってそれを自動化する方法が考えられます。具体的には以下の流れになるかと思います。
- System Activity のExploreで失敗したスケジュールを抽出するLookを用意する
- APIで1から失敗したスケジュールの Scheduled Plan ID * を取得
- 2で取得したJobに対して run_once を実行する
1. 失敗したスケジュールを抽出するLookの作成
管理 > Labs
より System Activity Model
を有効化いただくことで、System Activity
のExploreがご利用いただけるようになります。
System Activityは、ご利用のLookerインスタンスにおけるLookやDashboardの利用状況、User情報などを保持しているものになります。詳細はこちらをご参照ください。
このSchedule Plan
のExploreでは、スケジュール設定したジョブの情報を取得することができます。
(管理 > Schedule History
で見られるものと同じ情報ですね)
以下のようにStatus = failure, 必要に応じて期間を指定することで、失敗したスケジュールだけを抽出します。
尚、当該のModelのキャッシュ更新頻度は12時間となります。必要に応じてキャッシュクリアしてご利用ください。
2. APIで1から失敗したスケジュールのScheduled Plan IDを取得
Run Look
のAPIを利用して、1のLookから失敗したスケジュールのScheduled Plan IDを取得します。
APIの詳細についてはこちら をご参照ください。
3. 2で取得したJobに対してrun_onceを実行する
Run Scheduled Plan Once by Id
のAPIを利用して、2で取得したIDのスケジュールを一度実行します。
APIの詳細についてはこちらをご参照ください。
上記の2, 3を定期的に実行するスクリプトを作成することで、失敗したスケジュールを定期的に取得→再実行を自動化することが可能となります。
(発想としてはユーザー権限の自動Revoke運用に近しいかと思います)
とはいえスケジュールのリトライ機能は多くのユーザー様にとって有用な機能と思いますので、Lookerとしましては将来的に標準機能として組み込まれるよう引き続きフィードバックさせていただきたいと思います。
ありがとうございます!ご教授いただいたワークアラウンド設定してみます!
こちら元の回答内容ではRun Onceを実行する際に Job IDを取得するとしておりましたが、正しくは Scheduled Plan ID でした。
お詫びして訂正いたします(上記回答内も訂正済)