Skip to content
Iceberg Specification, Schema & Internals Last updated: May 29, 2026

Iceberg Nested Type System

The set of structural data types—structs, lists, and maps—defined by the Iceberg specification that use unique field IDs to manage complex data structures and support schema evolution.

iceberg nested typesiceberg struct list mapschema field ids

Iceberg Nested Type System

The Iceberg Nested Type System defines the specifications for representing complex, non-primitive data layouts within table schemas. Unlike traditional table formats that identify nested columns solely by name, Iceberg assigns unique integer field IDs to every component in a schema. This design ensures that nested structures can evolve (e.g. renaming, adding, dropping, or reordering elements) without requiring rewrite operations on the underlying physical files.

Supported Nested Types

Iceberg specifies three primary nested data structures:

1. Struct

A Struct is an ordered tuple of named fields, where each field is assigned a unique field ID. Structs can represent rows, records, or custom nested groups.

2. List

A List represents a variable-length collection of values of a single type.

3. Map

A Map represents an associative array of key-value pairs.

Example Schema Representation

The following schema fragment shows how nested types are structured with field IDs:

{
  "type": "struct",
  "fields": [
    { "id": 1, "name": "user_id", "type": "long", "required": true },
    {
      "id": 2,
      "name": "profile",
      "type": {
        "type": "struct",
        "fields": [
          {
            "id": 3,
            "name": "first_name",
            "type": "string",
            "required": false
          },
          { "id": 4, "name": "last_name", "type": "string", "required": false }
        ]
      },
      "required": false
    },
    {
      "id": 5,
      "name": "tags",
      "type": {
        "type": "list",
        "element-id": 6,
        "element-required": true,
        "element": "string"
      },
      "required": false
    }
  ]
}

Schema Evolution Rules

Assigning field IDs to elements inside structs, lists, and maps allows Iceberg to support full name-agnostic evolution:

📚 Go Deeper on Apache Iceberg

Alex Merced has authored three hands-on books covering Apache Iceberg, the Agentic Lakehouse, and modern data architecture. Pick up a copy to master the full ecosystem.

← Back to Iceberg Knowledge Base