ジョブ管理面倒だな。基本的には前回ジョブが失敗しても次回ジョブは気にせず実行したい。そうすれば前日データはみれなくても当日データは見れるとかにになるし、そうしたほうが良いケースはあると思う。ただし前日のデータをもとにしている場合(例:累積合計とか新規ユーザ)はそうもいかない。
2014-08-26 13:14:07その場合でも一連のジョブネットのうちそのようなジョブは一部だけというケースがほとんどなので、ジョブネット自体は前回ジョブが失敗しても次回ジョブは実行するようにして個々のジョブ内でバリデーションを追加するのがいいかな
2014-08-26 13:14:22@wyukawa それ難しいですよねぇ。a)以前のクエリ結果に関わらず毎日クエリを実行する方法、b)クエリ結果の最後の成功時点〜今日までの結果を毎日集計する方法があると思っていて、後者は色々と蜜月号になるので前者の方が実装は簡単なんですが、前日の結果に依存するクエリは難しい。
2014-08-26 13:25:46@wyukawa 前日の結果に依存する場合は、1)毎日2,3日分の結果を連続して集計するようにしておき、1,2日分が失敗しても翌日に自動的に再集計されるようにする、2)もう諦めて毎日全データをなめる、3)クエリが失敗したらアラートが上がるようにして手動で直す…あたりがありますが、
2014-08-26 13:27:24@wyukawa 1),2)はリソースを無駄に消費するし、SQLが複雑になるし、とはいえ3)だと手動操作が増えるのでイケてないですよねぇ…
2014-08-26 13:28:05@frsyuki なるほど、なるほど。参考になります。ありがとうございます。3)以外は思いつかなかったのですが、いろいろやり方はありますね。ただ1),2)も難しいですね。。。部分的に適用するのはありかもですが。
2014-08-26 13:32:05@wyukawa a+2はやはり簡単で、データ量が多くなるとどうしてもa+3、気合いの入ったケースだとa+1もあり、pull型の中間DBとの接続する場合はb…と使い分ける必要がありそうです。TDの内部ジョブで、特に毎日でなく毎時なスケジュールだとa+1までがんばるケースが多い。
2014-08-26 13:41:44@wyukawa ほむほむ。TODOにしておきます。a+1はカレンダーテーブルを作ってJOINするなどすればいいのですが、まぁ大変ではあります…
2014-08-26 13:49:05例えば8/1からデータ収集を開始したとして、8/2にジョブ実行して8/1のデータを集計するというパターンを考える。8/3に8/1と8/2の分のクエリを2回実行する、8/4にクエリを3回実行する、、、、期間長くなると厳しそうだな。。。
2014-08-26 14:03:00かりに全データをなめるパターン、例えば8/4は8/1-8/3分のデータを対象にクエリ1回実行、8/5は8/1-8/4分のデータを対象にクエリ1回実行、、、にしてもそんなに性能は変わらないような気がするけど、どうだろう。
2014-08-26 14:04:51