ログってなんぼ

日々のメモです

TreasureData:スケジュールにdelayを設定してcronを遅延実行する

TreasureData:TD_TIME_RANGE()の引数は明示しないとクエリの最適化がされない | ログってなんぼ はてなブックマーク - TreasureData:TD_TIME_RANGE()の引数は明示しないとクエリの最適化がされない | ログってなんぼ で躓き・・・

TreasureData:昨日一日分のデータに対して投げるクエリ(完成版) | ログってなんぼ はてなブックマーク - TreasureData:昨日一日分のデータに対して投げるクエリ(完成版) | ログってなんぼ

でなんとか動くものができた件の続報メモ。

トレジャーデータの太田さんから

https://twitter.com/kzk_mover/status/409338167645720576

というわけで試してみました。

というわけでやってみます

https://twitter.com/kzk_mover/status/409339705394597888 Webコンソールの方にはdelayを設定するインターフェースが無いのでCLIで。

@dailyは 0 0 * * * と同じ意味になるため下記のようにスケジュールを作ります。

注意点としては、Webコンソールと違ってTimeZoneの選択肢が画面に見えているわけではないのでJSTで実行したいときには明示するのを忘れやすいことです。

コンソールから td sched:create を叩けばusageが確認できますが、タイムゾーンの指定は「-t TIMEZONE」となりますのでそれも合わせて指定。

TD_TIME_RANGE()の第2引数に一日前を、第3引数にスケジュールした時間(今回の場合は@dailyなので00:00)を指定すると前日の00:00:00から23:59:59までのデータを対象にクエリが実行されます。

td sched:create 
  daily_test 
  "@daily" 
  -d test 
  -t "Asia/Tokyo" 
  -D 14400 
  "SELECT
    v[ 'hoge' ]
    ,COUNT( 1 ) AS cnt
  FROM
    accesslog
  WHERE
    TD_TIME_RANGE (
      TIME
      ,TD_TIME_ADD (
          TD_SCHEDULED_TIME (
          )
          ,'-1d'
        )
      ,TD_SCHEDULED_TIME ()
      ,'JST'
    )
  GROUP BY
    v[ 'hoge' ] CLUSTER BY cnt"

14400秒(4時間)ディレイの設定が出来ました。

スケジュール確認

$ td sched:list
| Name        | Cron      | Timezone   | Next schedule             | Delay    | Priority | Result | Database |
+-------------+-----------+------------+---------------------------+----------+----------+--------+-----------
| dailiy_test | @daily    | Asia/Tokyo | 2013-12-09 00:00:00 +0900 | 14400    | NORMAL   |        | test      |

実行

明日まで待っていられないので、上記手順と同じ書式で

55 0 * * * の 30秒ディレイという設定を入れてテストしてみました。

started at 2013-12-07T15:55:30Z
Hive history file=/mnt/hive/tmp/2957/hive_job_log__1722807954.txt
**
** Time indices:
**    Time index: [2013-12-06 15:55:00 +0000, 2013-12-07 15:54:59 +0000)
**

ちゃんと動いてますね。

delayを使う利点

https://twitter.com/kzk_mover/status/409338694848352256

確かに実行時間を変えてもクエリはそのままでいいのが強みですね。

スケジュールは実行時間、delay、クエリが一体となってサービスレベルを織りなすことになるので、ソース管理する場合はクエリだけでなく、実行時間やdelayの指定を行うコマンドラインごとソース管理したほうがいいですね。

星に願いを

スケジュールをコマンドラインやWebから間違って消してしまう事故が怖い・・・

パスワードロック欲しいな テヘペロ