ClickHouse provides several date and time types with varying precision levels.
Stores a calendar date (year, month, day) without time.
from datetime import date class User(BaseModel): birth_date: date # DateStores date and time with second precision.
from datetime import datetime class Event(BaseModel): created_at: datetime # DateTimeStores date and time with sub-second precision. The precision parameter P specifies decimal places (0-9).
from moose_lib import clickhouse_datetime64 class Event(BaseModel): logged_at: clickhouse_datetime64(3) # DateTime64(3) — milliseconds measured_at: clickhouse_datetime64(6) # DateTime64(6) — microseconds precise_at: clickhouse_datetime64(9) # DateTime64(9) — nanosecondsCompact date format for storage optimization.
from typing import Annotatedfrom datetime import datefrom moose_lib import ClickhouseSize class CompactRecord(BaseModel): record_date: Annotated[date, ClickhouseSize(2)] # Date16| ClickHouse Type | TypeScript Helper | TypeScript Verbose | Python |
|---|---|---|---|
Date | Date | Date | date |
Date16 | Date | Date | Annotated[date, ClickhouseSize(2)] |
DateTime | DateTime | Date | datetime |
DateTime64(P) | DateTime64<P> | Date & ClickHousePrecision<P> | clickhouse_datetime64(P) |
| Precision | Resolution | Use Case |
|---|---|---|
| 0 | Seconds | General timestamps |
| 3 | Milliseconds | Web events, logs |
| 6 | Microseconds | High-frequency trading, metrics |
| 9 | Nanoseconds | Scientific measurements |
Use DateTime (second precision) for most use cases. Only use DateTime64 with higher precision when sub-second accuracy is required—it uses more storage.