Parquex.TimePartition (parquex v0.3.0)

View Source

The validated event-time partition contract for a dataset.

Partitions use UTC and canonical Hive-style paths. Ranges are half-open: [from, until). Calendar partitions use ordinary calendar years; week partitions use ISO week years.

Examples

iex> {:ok, spec} = Parquex.TimePartition.new({:time, :occurred_at, :hour}, :microsecond)
iex> {:ok, partition} = Parquex.TimePartition.for_timestamp(spec, ~U[2026-08-03 12:31:45Z])
iex> partition.path
"year=2026/month=8/day=3/hour=12"

Summary

Functions

Calculates the canonical partition containing one UTC instant.

Returns the supported partition granularities.

Strictly parses one canonical partition path for this granularity.

Returns only the canonical relative partition path for one instant.

Plans each partition overlapping the half-open range [from, until).

Types

granularity()

@type granularity() :: :minute | :hour | :day | :week | :month

t()

@type t() :: %Parquex.TimePartition{
  column: String.t(),
  granularity: granularity(),
  timestamp_unit: timestamp_unit()
}

timestamp_unit()

@type timestamp_unit() :: :second | :millisecond | :microsecond | :nanosecond

Functions

for_timestamp(spec, timestamp)

@spec for_timestamp(t(), DateTime.t() | NaiveDateTime.t() | integer()) ::
  {:ok, Parquex.TimePartition.Partition.t()} | {:error, Parquex.Error.t()}

Calculates the canonical partition containing one UTC instant.

granularities()

@spec granularities() :: [granularity()]

Returns the supported partition granularities.

parse(spec, path)

@spec parse(t(), String.t()) ::
  {:ok, Parquex.TimePartition.Partition.t()} | {:error, Parquex.Error.t()}

Strictly parses one canonical partition path for this granularity.

path(spec, timestamp)

@spec path(t(), DateTime.t() | NaiveDateTime.t() | integer()) ::
  {:ok, String.t()} | {:error, Parquex.Error.t()}

Returns only the canonical relative partition path for one instant.

plan(spec, from, until, options \\ [])

@spec plan(
  t(),
  DateTime.t() | NaiveDateTime.t() | integer(),
  DateTime.t() | NaiveDateTime.t() | integer(),
  keyword()
) :: {:ok, [Parquex.TimePartition.Partition.t()]} | {:error, Parquex.Error.t()}

Plans each partition overlapping the half-open range [from, until).