日時型
#
はじめに日時型 は、時系列データを扱う際、必須のデータ型です。まずは公式ドキュメントを読み漁りましょう。
#
日時型とはBigQuery でグルーピングされているわけではないですが、この記事では日付や時間を扱うことができる型を総称することとします。タイムゾーンを扱うこともできます。 具体的な型は DATE、DATETIME、TIME、TIMESTAMP の 4 つです。
名前 | 説明 | ストレージ サイズ | 範囲 |
---|---|---|---|
DATE | 日付型 | 8 バイト | 0001-01-01~9999-12-31 |
DATETIME | 日時型 | 8 バイト | 0001-01-01 00:00:00~9999-12-31 23:59:59.999999 |
TIME | 時刻型 | 8 バイト | 00:00:00~23:59:59.999999 |
TIMESTAMP | タイムスタンプ型 | 8 バイト | 0001-01-01 00:00:00~9999-12-31 23:59:59.999999 UTC |
#
日付型 DATEDATE 型は、タイムゾーンに関係なく、日を表します。時間を含みません。
タイムゾーンの解釈によって示す 24 時間の範囲がずれたり、サマータイムで一日の長さが変わったりします。
タイムゾーン別に相対化された日付を表したい時に DATE を利用しましょう。
BigQuery 上では DATE(2020, 1, 25)
か、DATE '2020-01-25'
のように定義します。
#
日時型 DATETIMEDATETIME は特定の日時を表します。 DATETIME には、年月日、時分秒 + ミリ秒が含まれます。
DATE 型と同様に、タイムゾーンの解釈によって示す 24 時間の範囲がずれたり、サマータイムで一日の長さが変わったりします。
タイムゾーン別に相対化された日時を表したい時に DATETIME、絶対時間を表す際にはタイムスタンプを利用しましょう。
BigQuery 上では DATETIME(2020, 1, 26, 12, 26, 41)
か、DATETIME '2020-01-26T12:26:41'
のように定義します。
STRING に DATETIME プレフィックスで定義する場合、T はスペースでも良く、時間を省略すると 0 時 0 分 0 秒を指します。
#
時刻型 TIMETIME データ型は、特定の日付とは関係なく、時刻を表します。
#
タイムスタンプ型 TIMESTAMPタイムスタンプは、タイムゾーンや夏時間などの慣習に関係なく、絶対的な時刻を表します。
#
どう使い分けるかセンサや、購買などイベントを記録する場合には、タイムスタンプ型が良いでしょう。 解釈によって相対化されるべきでないからです。
解釈によって相対化されるべき、カレンダーの祝日情報などは、DATE 型が良いですね。 繰り返しイベントの作成に、TIME と DATE のペアを作って、タイムゾーンの解釈を加えて TIMESTAMP として記録するなども良いでしょう。
DATETIME 型が適切な場面は思いつきませんでした。 どなたか プルリクエスト または、Twitter で連絡くださいませ。
#
まとめBigQuery には、DATE、DATETIME、TIME、TIMESTAMP の 4 つの日付型があります。 用途によって適切に選ぶことで、正しく意思決定に使えるデータ分析ができるようになります。 特に日時は、解釈する人間によって揺れやすい表現です。前提とするタイムゾーンを共有したり、前もってデータに入れて解釈が揺れないようにすべきです。正しいデータで正しいデータ活用を進めていきましょう。