Google BigQuery と Treasure Data Hive Query での期間の指定方法


日時指定はどの条件でクエリを叩くときも使うけれど、毎回忘れて調べているのでメモ

Google BigQuery

log20170420みたいに毎日のログが入っているとする
ref: https://cloud.google.com/bigquery/docs/wildcard-tables

昨日から一週間分のデータを解析したい

BigQuery
#standardSQL
SELECT
    *
FROM
  `dataset.log*`
WHERE
  _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 7 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY))
;

Treasure Data Hive Query

ref: https://docs.treasuredata.com/articles/udfs

昨日から一週間分のデータを解析したい

TD_SCHEDULED_TIME()NOW()と違ってスケジューラーをセットした時間であることがミソ

TD_HiveQuery
SELECT 
  *
  TD_TIME_FORMAT(time,
    'yyyy-MM-dd',
    'JST') AS date
FROM
  log
WHERE
  TD_TIME_RANGE(
    time,
    TD_TIME_ADD(
      TD_DATE_TRUNC('day', TD_SCHEDULED_TIME(), 'JST'),
      '-7d', 
      'JST'
    ),
    TD_TIME_ADD(
      TD_DATE_TRUNC('day', TD_SCHEDULED_TIME(), 'JST'),
      '-1d', 
      'JST'
    ),
    'JST'
  )