TreasureDataで日付計算(Hive)


概要

TreasureDataのクエリでWhere条件の期間を動的に取得したくて、日付の計算を調べて見た結果をメモしておく。

日付計算クエリ

SELECT
  -- 今日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('day', TD_SCHEDULED_TIME(), 'JST'),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as today,
  -- 昨日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('day', TD_TIME_ADD(TD_SCHEDULED_TIME(), '-1d', 'JST'), 'JST'),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as yesterday,
  -- 今月1日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('month', TD_SCHEDULED_TIME(), 'JST'),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ),
  -- 先月1日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC(
      'month',
      TD_TIME_ADD(TD_DATE_TRUNC('month', TD_SCHEDULED_TIME(), 'JST'), '-1d', 'JST'),
      'JST'
    ),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as pre_month,
  -- 2ヶ月前の1日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC(
      'day',
      TD_TIME_PARSE(
        ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -2),
        'JST'
      ),
      'JST'
    ),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as pre_2month,
  -- 3ヶ月前の1日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC(
      'day',
      TD_TIME_PARSE(
        ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -3),
        'JST'
      ),
      'JST'
    ),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as pre_3month,
  -- 半年前の1日
  TD_TIME_FORMAT(
    TD_DATE_TRUNC(
      'day',
      TD_TIME_PARSE(
        ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -6),
        'JST'
      ),
      'JST'
    ),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as pre_6month,
  -- 1年前
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('day', TD_TIME_ADD(TD_SCHEDULED_TIME(), '-365d', 'JST'), 'JST'),
    'yyyy-MM-dd HH:mm:ss',
    'JST'
  ) as pre_year
;

参考サイト