本文へスキップ
martechfarmDATA & TECHNOLOGY DOCS

Treasure Data / CDP 内を検索 · 全記事に戻す

Treasure Data / CDP

17 件

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

Hiveはfalse、Trinoはtrueになる理由|整数除算の落とし穴

Treasure Data CJO完全解説②|ジャーニー設計と実務運用のポイント

Treasure Data CJO完全解説①|Customer Journey Orchestrationの基本構造

ファーストパーティデータとは何か|誤解されやすい意味とCDP活用の本質

Treasure Data導入で失敗する会社の共通点|CDPを使いこなせない5つの理由

中小企業がデータ活用で大企業に勝つ方法|小さな会社のCDP戦略

Treasure Dataが選ばれる理由|CDP導入で評価される強みと実務メリット

Digdagのparallel設定を最適化する方法|夜間バッチを高速化する実務設計

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タイムに変換する方法

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

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

本文
記事一覧へ ↑

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

対応エンジン

エンジン対応備考
TD(Presto)✅TD_TIME_PARSEはTD固有関数
Trino / Presto⚠️to_unixtime + date_parseを使う
Hive⚠️unix_timestampを使う

こんなときに使う

外部システムから取り込んだデータや手動で作成したマスタテーブルに'2024-01-01'のような文字列で日付が入っているケースがあります。TD_TIME_RANGEでの絞り込みや日付計算に使うためにUNIXタイムに変換したい場面で使います。


TDでの実装

入力例:'2024-01-01'
出力例:1704034800

SELECT
  TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo') AS unix_time

いろいろな文字列フォーマットに対応できる

-- ハイフン区切り(最も一般的)
TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo')
-- → 1704034800

-- スラッシュ区切り
TD_TIME_PARSE('2024/01/01', 'Asia/Tokyo')
-- → 1704034800

-- 日時込み
TD_TIME_PARSE('2024-01-01 09:00:00', 'Asia/Tokyo')
-- → 1704067200

カラムに入っている文字列を変換する

SELECT
  TD_TIME_PARSE(date_col, 'Asia/Tokyo') AS unix_time
FROM your_table

Trino / Prestoでの実装

TD_TIME_PARSEは使えないため、date_parseとto_unixtimeを組み合わせます。

SELECT
  to_unixtime(
    date_parse(date_col, '%Y-%m-%d')
    AT TIME ZONE 'Asia/Tokyo'
  ) AS unix_time
FROM your_table

date_parseで文字列をTIMESTAMP型に変換してからto_unixtimeでUNIXタイムに変換します。
フォーマット文字列はTDと異なり%Y-%m-%d形式を使います。

Trino/Prestoのフォーマット記号

記号意味例
%Y年(4桁)2024
%m月(2桁)01
%d日(2桁)01
%H時(24時間)09
%i分30
%s秒00
-- スラッシュ区切りの場合
to_unixtime(
  date_parse(date_col, '%Y/%m/%d')
  AT TIME ZONE 'Asia/Tokyo'
)

-- 日時込みの場合
to_unixtime(
  date_parse(date_col, '%Y-%m-%d %H:%i:%s')
  AT TIME ZONE 'Asia/Tokyo'
)

Hiveでの実装

SELECT
  unix_timestamp(date_col, 'yyyy-MM-dd') AS unix_time
FROM your_table

unix_timestamp(文字列, フォーマット)で日付文字列をUNIXタイムに変換します。
タイムゾーンはHiveのセッション設定に依存します。

-- スラッシュ区切りの場合
unix_timestamp(date_col, 'yyyy/MM/dd')

-- 日時込みの場合
unix_timestamp(date_col, 'yyyy-MM-dd HH:mm:ss')

エンジン別まとめ

エンジン関数タイムゾーン指定
TDTD_TIME_PARSE(date_col, timezone)第2引数に指定
Trino / Prestoto_unixtime(date_parse(...) AT TIME ZONE ...)AT TIME ZONEで指定
Hiveunix_timestamp(date_col, format)セッション設定に依存

⚠️ よくあるミス

8桁文字列をそのまま渡す

-- ❌ ハイフンなしはNULLになる
TD_TIME_PARSE('20240101', 'Asia/Tokyo')

-- ✅ SUBSTR+CONCATでハイフン区切りにしてから渡す
TD_TIME_PARSE(
  CONCAT(
    SUBSTR('20240101', 1, 4), '-',
    SUBSTR('20240101', 5, 2), '-',
    SUBSTR('20240101', 7, 2)
  ),
  'Asia/Tokyo'
)
-- → 詳しくは[日付]整数8桁をUNIXタイムに変換する方法を参照

タイムゾーンを省略する

-- ❌ UTCで解釈されてしまい9時間ずれる
TD_TIME_PARSE('2024-01-01')

-- ✅ 必ずAsia/Tokyoを指定
TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo')

よくある応用:文字列の日付カラムで期間を絞り込む

SELECT *
FROM your_table
WHERE TD_TIME_RANGE(
  time,
  TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo'),
  TD_TIME_PARSE('2024-02-01', 'Asia/Tokyo')
)

まとめ

ポイント内容
TD基本形TD_TIME_PARSE(date_col, 'Asia/Tokyo')
タイムゾーン必須省略するとUTCで9時間ずれる
8桁文字列は直接NG事前にハイフン区切りの文字列に変換する
Trinoはフォーマット記号が異なるyyyyではなく%Y形式を使う

MarTech Farmをもっと見る

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

続きを読む