見出し画像

リンクされたタスクのスケジュールで注意してること[TableauPrepConductor]

業務でTableauPrepConductorをガッツリ運用しているのですが、その中で色困ったり・事故ったりしたことが多々ありまして、そんな経験を記事にして残しておくことで少しでも世の中の役に立てればと思って筆をとります。

かなりニッチな内容だと思うので、説明含めた前書きを多めにしています。
「どんなものか知ってるよ」という方は1~4の具体的な記載へ飛んでしまって構いません。


きっかけと機能説明

きっかけは、XでRikakoさんがまとめてくれたこちらの記事です。そもそもTableauPrepConductorは、有償のアドオンであるTableauDataManagementを利用していないと使えない機能で、おそらくかなり利用者が限られてくると思います。その一機能である「リンクされたスケジュール」の使い方って、めちゃくちゃ貴重なノウハウの共有だなと感じて、それを見てしまったからには自分も何か残さねばという衝動に駆られました。

TableauPrepConductorとは、ざっくり「TableauServer/Cloud上で、Prepフローをスケジュール実行するための機能」です。Prepフローを作っても、更新が必要なたびに手動実行してたら大変なので、決まったタイミングで勝手に実行してくれたら楽ですよね?という時に役に立ちます。

この機能をフル活用して運用していると、「このフローの次に別のフローを動かしたい」みたいなことが出てくるのですが、そのときに「リンクされたタスク」を設定することで「フローの実行順序を指定する」ことができます。
この「リンクされたタスク」に対して実行スケジュールを設定することで、「毎日決まった時間になったら、フローが順番に動き出し、Server/Cloud上のデータソースが更新されていく」ということが実現できます。

外部のDWHやETLが自由に使えず、TableauServer/Cloudでデータ処理の運用をしなければならないときは非常に便利な機能なのですが、結構落とし穴的なものがたくさんありまして、自分は何度も事故ってはデータソースの復旧対応に追われていました…。そんな悲劇を少しでも減らすべく、事故りがちなポイントなどを4つ紹介していきます。

1.「増分更新」のフローを設定するとき

Prepフローの実行は、接続元データソースのすべてのレコードに対して処理を実行する「完全更新」と、出力先のデータソースの特定フィールドを参照して「該当フィールドの最大値・最新値より大きいレコード」のみを処理する「増分更新」という処理方法があります。
いわゆる「差分更新」にあたる機能で、「データソースに毎日新しいデータが入ってくるから、その分だけを追加する」みたいな運用が実現できます。処理するレコードを最小限にできるので、全期間を再作成するよりも遥かに効率的にデータ処理を行うことができます。

増分更新の設定方法。この場合は「Order Date」の日付フィールドを参照しており、フロー実行時にデータソース側の最新日付を調べて、それより大きい値のレコードのみを処理します。出力側はほとんど「テーブルに追加」で設定するのではないかと思います(Insert/Appendで処理)

で、この「増分更新」で実行することを想定したフローをスケジュール設定するとき、単一のタスクであれば「完全更新/増分更新」の選択がパッと見てわかる場所にあるので迷わず設定できるのですが、リンクされたタスクの場合は設定箇所の階層が深くてわかりにくいのです…。

単一のタスク(フロー)の場合。これはすぐわかるですが…
リンクされたタスクの場合、更新タイプの設定がパッと見ではわからない!どこ!
正解はここ。ちょっとわかりにくいですよね…

リンクされたタスクを設定するとき=他のフローの設定も同時に行うことも多いのではないかというときに、増分更新のフローが少しだけ紛れていたりすると、うっかり更新タイプの設定をし忘れてしまう。という事故を何度も起こしておりました…orz

そうすると、「本来、増分更新しなきゃいけないもデータを完全更新してしまう」ということが起き、処理時間が異常にかかるor過去データが吹っ飛ぶなどの事故に繋がってしまいます(そもそも増分更新を設定しているということは、過去データを蓄積したい・全期間処理してたら処理できない、などの課題があると思います)。皆さん、気を付けてくださいね!

2.特定のフローのみを削除するとき

リンクされたタスクのスケジュールを長く運用していると、利用データのスケジュールの変更や運用停止などで「フローのスケジュールを止めたい」というケースが出てくると思います。そのとき、気を付けないとうっかり事故を起こしてしまいそうになるポイントがあるので気を付けてください。

ここでは、下記キャプチャの「New Flow」を止めるケースを想定します。

例)この「New Flow」のスケジュールを止めたいとき
リンクされたタスク中身。このうち「1」だけを消したいというケースを考えます

先に正しい方法から書きます。上記キャプチャにある「タスクの編集」からタスクの設定画面を開いて、その中で削除したいフローを選択してから、「タスクを削除」というボタンで削除します。その後、「適用」を押したらスケジュールの変更が反映されます。

OK例。5クリックくらい必要で、結構深いところにある印象です

そしてこのとき、うっかりやってしまいたくなるNG操作が、「アクションの"…"から削除」でして、この操作だとリンクされたタスクとして設定されている全てのフローが削除されてしまいます

NG例。「アクション>削除」だと、リンクされたタスクが全て消えます(この場合は2件)

単一のフローのスケジュール削除やサブスクリプション停止もこういう操作なので、本当に普通にやってしまうと思います…。やってしまうと、ログとか確認して度のフローがどういう順番で実行されてたかを確認して再設定とかって復旧作業が発生することになるので、マジで気を付けましょう。フローの実行スケジュールの管理台帳を作っておくのも良いと思います。

3.タスク全体を手動実行するとき

何かしらの理由でスケジュール実行が失敗したときなどに、復旧作業として「リンクされたタスクに設定されているフローの全てを順番に実行したい」ということがあると思います。そのとき、「すべてのフローの画面を開いてひとつずつ実行していく…」という方法だと面倒なので、一発で実行できる方法を紹介します。自分はこれを知らなくて、だいぶ損してました…orz

方法は簡単です。一括実行したいタスクに含まれるフロー画面の「スケジュールされたタスク」のタブを開き、再実行したいタスク(スケジュール)の行の「アクション(…)」→「今すぐ実行」と押します。すると、実行確認のポップアップが出てくるので、念を押すように「今すぐ実行」します。

ここです。一見「このフローだけを実行する」ようにも見えますが…
あくまで実行されるのは「リンクされたタスク」なので、実行すれば設定されてるフローが順番に実行されていきます

実行命令を出したら、あとは順番にフローが実行されていくのを見守るだけです。管理者ロールでないとジョブ画面などで進捗が確認できませんので、タスクの最後にあたるフローの画面を開いておくなどで確認しましょう。

なお、管理者ロールの場合は、左サイドバーの下の方にある「タスク」から「リンクされたタスク」の一覧を表示できるので、その画面からも「アクション>今すぐ実行」ができます。

4.フローの実行成功を通知するとき

これはリンクされたタスクに限らない機能なのですが、スケジュール設定したフローの実行が完了したら「メールで通知する」ということができます。リンクされたタスクに含まれるフローが多い場合、スケジュール実行が完了するタイミングが安定しないというケースが多々あります。

でも、更新完了したらすぐにダッシュボード確認したいし、そのことをいち早く他のユーザーに案内したいということもあると思います。そういうときに「タスクの最後のフローが完了したら、メールで通知される」という設定をしておけば、それをトリガーにアクションが取れるので、ぜひ活用してみてください。

設定方法は、リンクされたタスクを設定するときに、編集画面に出てくる「実施できたらメールを送信します。」のチェックボックスをONにするということです。そうすると、Viewをサブスクリプションするときと似たようなポップアップが出てくるので、そこで送信先や件名などの設定を行えば、完了です。

ここのチェックボックスです。後述もしますが、フローの所有者でないと出てきません…
送信先や件名、本文を設定できます。データソースへのリンクもつけれるようです

こちらの設定に関して、注意点が2つあります。

ひとつは「フローの所有者でないと、設定ができない」という点です。これがわかりにくくて、他人のフローだとチェックボックスが出てこないので、それができることや・なぜできないのかがわかりにくいんですよね…。
公式ドキュメントも↓のような記載で、「フローの所有者が実行可能=それ以外のユーザーはできない」ということがちょっと読み取りにくいと個人的には思います。というか、なんでできちゃダメなんですかね…。

下記リンクの一番下に書いてあります

もうひとつは、「設定済みのタスクを編集して、サブスクリプションを設定することはできない」ということです。言い換えると、メール通知の設定をするのは「タスクにフローを初めて設定するとき」だけだということです。

次のキャプチャが、「メールを通知しない」として設定したタスクのフローを編集しようとしている画面です。前述のキャプチャでは赤い括弧のところにチェックボックスが出てたのですが、ここでは表示されていません。
「最初はメール通知設定しないつもりだったけど、やっぱり通知したい」となったときは、一度このタスクを削除してから、再度左下の「+ 次のタスクを追加」から追加して、そのときにチェックボックスをONにする。という手順が必要です。若干面倒ですね…、なんでこれもできないんだろう…。

一度設定されてしまうと、編集画面からは直せない。の図

最後に

ということで、「リンクされたタスクをスケジュール実行する運用をしているときに注意してるポイント」を紹介してきました。実にニッチな内容ではないかと思いますが、この機能を活用している人が少しでも事故を起こさぬように知っておいてもらいたいなという想いで書きました。
PrepConductor自体が、エンドユーザーへ正しいデータをタイムリーに届けるための機能だと思ってまして、「できてて当然!」みたいな目で見られてしまうことも多いので、ちょっとでも気にかけてもらえたらと思います。
この記事を見てくれた誰かが、1つでも事故を未然に防げたら、それだけで価値があると思いますし、自分はそれだけで充分です。

すべてのTableauユーザーに、日々適切なデータが届けられる世界を願って、記事を締めたいと思います。読んでいただき、ありがとうございました。

いいなと思ったら応援しよう!