日付と時間のデータ型
包括的な日付と時間のデータ型のセットは、効果的な時系列データ管理に必要であり、ClickHouseはまさにそれを提供します。 コンパクトな日付表現からナノ秒精度の高精度タイムスタンプまで、これらの型は異なる時系列アプリケーションのためにストレージの効率と実用的な要件のバランスを取るように設計されています。
過去の金融データ、IoTセンサーの読み取り、または将来の日付のイベントに取り組んでいるかどうかにかかわらず、ClickHouseの日時型はさまざまな時間データシナリオを扱うために必要な柔軟性を提供します。 サポートされている型の範囲は、ストレージの最適化とクエリパフォーマンスを維持しながら、ユースケースが要求する精度を維持することを可能にします。
-
Date
型は大抵の場合に十分です。この型は日付を保存するのに2バイトを必要とし、範囲は[1970-01-01, 2149-06-06]
に制限されます。 -
Date32
はより広い範囲の日付をカバーします。この型は日付を保存するのに4バイトを必要とし、範囲は[1900-01-01, 2299-12-31]
に制限されます。 -
DateTime
は秒単位の精度で日時値を保存し、範囲は[1970-01-01 00:00:00, 2106-02-07 06:28:15]
です。1つの値に対して4バイトが必要です。 -
さらなる精度が必要な場合は、
DateTime64
を使用できます。これはナノ秒単位の精度で時間を保存でき、範囲は[1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]
です。1つの値に対して8バイトが必要です。
さまざまな日付型を保存するテーブルを作成しましょう:
now()
関数を使用して現在の時間を返し、now64()
を使用して指定された精度で取得できます。
これにより、列型に応じて、列が時間で適切に埋められます:
タイムゾーン
多くのユースケースでは、タイムゾーンも保存する必要があります。DateTime
または DateTime64
型にタイムゾーンを最後の引数として設定できます:
DDLでタイムゾーンを定義したので、異なるタイムゾーンを使用して時間を挿入できます:
テーブルに何が入っているか見てみましょう:
1行目では、すべての値を America/New_York
タイムゾーンを使用して挿入しました。
dt_1
とdt64_1
はクエリ時に自動的にEurope/Berlin
に変換されます。dt_2
とdt64_2
はタイムゾーンが指定されていないため、サーバーのローカルタイムゾーン(この場合はEurope/London
)が使用されます。
2行目では、すべての値をタイムゾーンなしで挿入したため、サーバーのローカルタイムゾーンが使用されました。
1行目と同様に、dt_1
と dt_3
は Europe/Berlin
に変換され、dt_2
と dt64_2
はサーバーのローカルタイムゾーンを使用します。
日付と時間の関数
ClickHouseは、異なるデータ型間を変換するための関数のセットも備えています。
例えば、toDate
を使用して DateTime
値を Date
型に変換できます:
toDateTime64
を使用して DateTime
を DateTime64
に変換できます:
そして、toDateTime
を使用して Date
または DateTime64
から DateTime
に戻すことができます: