本文へスキップ
martechfarmDATA & TECHNOLOGY DOCS

すべての記事のタイトル・本文を検索

すべての記事

127 件

タイトルを選ぶと本文が開きます

連続購買をSQLで分析する方法|何ヶ月買い続けているかを判定するクエリ

顧客名寄せをSQLで行う方法|重複IDを統合する実務クエリ

Treasure Data SQLでN日前・N日後の日付を計算する方法

Treasure Data SQLで日付差分を計算する方法|日数・時間数の出し方

Treasure Data SQLで先月・今月の月初月末を取得する方法

Treasure Data SQLで今日の日付・現在時刻を取得する方法

Treasure Data SQLで日付文字列をUNIXタイムに変換する方法

Treasure Data SQLでUNIXタイムを日付文字列に変換する方法

Treasure Data SQLで整数8桁の日付をUNIXタイムに変換する方法

異常値・重複データをSQLで検知する方法|データ品質チェックの実務クエリ

クーポン施策の効果をSQLで検証する方法|割引の売上貢献を正しく測る

メルマガの購買転換率をSQLで計測する方法|配信効果を可視化するクエリ

前年同月比・前月比をSQLで計算する方法|売上推移を同時比較するクエリ

バスケット分析をSQLで行う方法|一緒に買われる商品を見つけるクエリ

ABC分析をSQLで実装する方法|売上上位80%の商品を抽出するクエリ

コホート分析をSQLで行う方法|月次リテンション率を可視化するクエリ

新規・既存・復活・休眠顧客をSQLで自動判定する方法

LTVをSQLで計算する方法|顧客生涯価値を正確に出す実務クエリ

RFM分析をSQLだけで実装する方法|顧客ランクを自動分類する実務クエリ

Treasure Data CJOでジャーニーが更新されない原因と確認ポイント

Treasure Data CJOの処理完了を確認する方法|ジョブ状態と実行結果の見方

ポケモン殿堂入りに学ぶ出口戦略|キャリアと事業のゴール設計

ポケモン交換に学ぶ市場原理|需要と供給・ネットワーク効果のビジネス論

ミュウに学ぶ希少性マーケティング|限定性が価値を生む経済学

本文
記事一覧へ ↑

Treasure Data SQLで今日の日付・現在時刻を取得する方法

対応エンジン

エンジン対応備考
TD(Presto)✅TD_SCHEDULED_TIMEはTD固有関数
Trino / Presto⚠️now()・current_timestampを使う
Hive⚠️unix_timestamp()・current_dateを使う

こんなときに使う

「今日時点のデータだけ取りたい」「レポートに実行日を表示したい」「直近N日を動的に指定したい」など、実行時の日付を基準にしたいときに使います。


TDでの実装

TDで現在時刻を取得する方法は主に3つあります。目的によって使い分けが重要です。

-- ① スケジュール実行時刻をUNIXタイムで取得(推奨)
SELECT TD_SCHEDULED_TIME() AS now_unix

-- ② クエリ実行時刻をUNIXタイムで取得
SELECT UNIX_TIMESTAMP() AS now_unix

-- ③ 今日の日付を文字列で取得
SELECT TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'Asia/Tokyo') AS today

① TD_SCHEDULED_TIME()【スケジュール実行で推奨】

SELECT TD_SCHEDULED_TIME() AS now_unix
-- → 1704034800

スケジュールされた実行時刻を返すTD固有関数です。処理に多少の遅延が生じても常に定刻の時刻を返すため、スケジュール実行の基準時刻には必ずこちらを使います。手動実行時はクエリ実行時刻を返します。

② UNIX_TIMESTAMP()【手動実行・デバッグ時】

SELECT UNIX_TIMESTAMP() AS now_unix
-- → 1704034823

クエリを実行した瞬間の時刻を返します。スケジュール実行で使うと処理の遅延によって毎回微妙に値がズレるため、日付集計の基準には向きません。

③ 今日の日付を文字列で取得

SELECT
  TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'Asia/Tokyo') AS today
-- → '2024-01-01'

BIツールへの出力やレポートの日付表示に使います。


Trino / Prestoでの実装

-- 現在時刻をTIMESTAMP型で取得
SELECT now() AS current_time

-- 現在時刻をタイムゾーン付きで取得
SELECT now() AT TIME ZONE 'Asia/Tokyo' AS current_time_jst

-- 今日の日付を取得
SELECT current_date AS today

-- UNIXタイムに変換
SELECT to_unixtime(now()) AS now_unix

-- 日付文字列で取得
SELECT format_datetime(now() AT TIME ZONE 'Asia/Tokyo', 'yyyy-MM-dd') AS today

Hiveでの実装

-- 現在時刻をUNIXタイムで取得
SELECT unix_timestamp() AS now_unix

-- 今日の日付を取得
SELECT current_date AS today

-- 今日の日付を文字列フォーマットで取得
SELECT from_unixtime(unix_timestamp(), 'yyyy-MM-dd') AS today

エンジン別まとめ

エンジンUNIXタイム取得日付文字列取得
TDTD_SCHEDULED_TIME()TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'Asia/Tokyo')
Trino / Prestoto_unixtime(now())format_datetime(now() AT TIME ZONE 'Asia/Tokyo', 'yyyy-MM-dd')
Hiveunix_timestamp()current_date

⚠️ よくあるミス

スケジュール実行でUNIX_TIMESTAMPを使う

-- ❌ 処理の遅延で毎回わずかに値がズレる
WHERE TD_TIME_RANGE(
  time,
  UNIX_TIMESTAMP() - 86400,
  UNIX_TIMESTAMP()
)

-- ✅ スケジュール実行では必ずTD_SCHEDULED_TIMEを使う
WHERE TD_TIME_RANGE(
  time,
  TD_SCHEDULED_TIME() - 86400,
  TD_SCHEDULED_TIME()
)

タイムゾーンを省略して日付がずれる

-- ❌ UTCで解釈されてしまい日本時間の午前9時前は前日になる
TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd')

-- ✅ 必ずAsia/Tokyoを指定
TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'Asia/Tokyo')

よくある応用

直近30日のデータを動的に取得(TD)

SELECT *
FROM your_table
WHERE TD_TIME_RANGE(
  time,
  TD_SCHEDULED_TIME() - 86400 * 30,
  TD_SCHEDULED_TIME()
)

今日のデータだけ取得(TD)

SELECT *
FROM your_table
WHERE TD_TIME_FORMAT(time, 'yyyy-MM-dd', 'Asia/Tokyo')
  = TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'Asia/Tokyo')

まとめ

関数返り値使いどころ
TD_SCHEDULED_TIME()UNIXタイムスケジュール実行の基準時刻
UNIX_TIMESTAMP()UNIXタイム手動実行・デバッグ
TD_TIME_FORMAT(TD_SCHEDULED_TIME(), ...)文字列日付を人間が読める形で出力

MarTech Farmをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む