Skip to content

PolarisTable

An Iceberg table managed inside a Polaris namespace.

Spec

Field Type Required Default Description
namespaceRef NamespaceRef yes The PolarisNamespace this table lives in.
name string no .metadata.name Table name in Polaris. Pattern ^[a-zA-Z0-9_-]+$.
schema IcebergSchema yes The table's Iceberg schema.
partitionSpec IcebergPartitionSpec no Partitioning strategy.
writeFormat parquet | orc | avro no parquet Default data file format for new writes.
properties map[string]string no Open-ended property bag (e.g. write.target-file-size-bytes).

IcebergSchema

Field Type Required Description
fields []IcebergField yes (≥1) Columns, in declaration order.
identifierFieldIds []int32 no Primary-key field IDs, if any.

IcebergField

Field Type Required Default Description
id int32 yes Iceberg field ID, stable across schema evolution.
name string yes Column name.
type string yes Iceberg type: int, long, string, decimal(10,2), a nested struct<...>, and so on. Validation is intentionally loose. Polaris is the source of truth for valid types.
required bool no false Whether the field is NOT NULL.
doc string no Human-readable column description.

IcebergPartitionSpec

Field Type Required Description
fields []IcebergPartitionField no Partition transforms applied to source columns.

IcebergPartitionField

Field Type Required Description
sourceId int32 yes ID of the source schema field this partition derives from.
fieldId int32 yes ID of the partition field itself.
name string yes Partition column name.
transform string yes One of identity, year, month, day, hour, void, bucket[N], truncate[N].

Status

Field Description
location Resolved on-disk URI of the table.
tableUuid Stable Iceberg UUID of the table.
currentSnapshotId Most recently committed snapshot, if any.
conditions Ready, Synced.

Example

apiVersion: polaris.k8s.calific.io/v1alpha1
kind: PolarisTable
metadata:
  name: orders
  namespace: data-platform
spec:
  namespaceRef:
    name: analytics
  schema:
    fields:
      - id: 1
        name: id
        type: long
        required: true
      - id: 2
        name: amount
        type: "decimal(10,2)"
  writeFormat: parquet

Schema/partition drift isn't reconciled

Initial create is full-fidelity, but changes to spec.schema or spec.partitionSpec on an existing table aren't detected or applied. That would require the Iceberg CommitTable machinery, which this project deliberately doesn't build. Changing a table's schema means dropping and recreating the CR. See Why for the reasoning: this project leans away from managing ongoing schema evolution this way in the first place.