The Complete Production SOP: How to Deploy and Run Apache Iceberg Hidden Partitioning & Metadata Evolution in Autonomous AI Agents
Step-by-step SOP to install and run Apache Iceberg Hidden Partitioning in Codex, Claude Code, and Cursor. Includes verified DDL, manifests, and rollback workflows.
Technical Overview & Architectural Context
Autonomous coding agents frequently default to legacy Hive-style physical partitioning paradigms when generating Lakehouse code. In standard Hive tables, agents inject synthetic partition columns (such as `event_date STRING`) derived from timestamps, forcing producers to calculate artificial directory layouts and requiring downstream consumers to write explicit partition filter predicates. Without rigorous procedural guidance, agents fail to leverage Apache Iceberg's native hidden partitioning transforms (such as `days()`, `bucket()`, or `truncate()`), leading to partition layout lock-in, silent full-table scans, and brittle pipeline dependencies. Furthermore, when evolving schemas or partition specs, unconstrained LLMs often hallucinate costly rewrite operations, dropping and recreating tables or issuing destructive full-table rewrites rather than updating metadata pointer trees. Apache Iceberg separates the logical schema and partition representation from physical data layout using immutable snapshot trees and manifest lists. Without deterministic SOPs, agents struggle to navigate snapshot isolation levels, inspect hierarchical `.metadata.json` chains, or execute transactional rollbacks through system procedure catalogs. This skill enforces deterministic constraints across Codex, Claude Code, Cursor, and Windsurf. It injects explicit procedural boundaries for DDL formulation, partition spec evolution without file rewrites, metadata manifest inspection, and atomic time-travel or rollback procedures. By restricting file operations to workspace boundaries and preventing unconstrained shell execution, the skill ensures agents deliver production-grade, engine-agnostic (Spark, Trino, Flink) Iceberg Lakehouse implementations.
Prerequisites & Environment Requirements
Verified Search Intents & Long-Tail Queries Solved
This operational tutorial is engineered to provide deterministic solutions for these developer search queries:
Step-by-Step Execution Playbook
Local Environment Setup & SKILL.md Mounting
Create the local skill manifest directory and inject verified procedural rules.
Autonomous coding agents parse workspace-level or user-level rules to determine execution boundaries. In Cursor and Windsurf, placing the skill in `.cursor/rules/` or `.windsurf/skills/` activates pattern-matching triggers. For Claude Code and Codex, mounting the skill under `~/.agents/skills/apache-iceberg-hidden-partitioning` or directly inside the repository ensures that intent triggers such as 'create iceberg table' or 'evolve iceberg schema' reliably hook into agent prompt planning phases.
mkdir -p .agents/skills/apache-iceberg-hidden-partitioning && curl -fsSL https://askills.dev/api/skills/apache-iceberg-hidden-partitioning/raw -o .agents/skills/apache-iceberg-hidden-partitioning/SKILL.md---
name: "apache-iceberg-hidden-partitioning"
description: "Manage high-performance open table formats with hidden partitioning and schema evolution."
metadata:
author: "Apache Software Foundation"
version: "1.0.0"
runtime_compatibility:
- "codex"
- "claude-code"
- "cursor"
- "windsurf"
triggers:
- "create iceberg table"
- "configure iceberg hidden partitioning"
- "evolve iceberg schema"
permissions:
fs_read: true
fs_write: "workspace"
shell_exec: false
net_access: false
---
# Execution SOP & Rules
1. Enforce hidden partitioning: Use transforms `days(ts)`, `hours(ts)`, `bucket(N, id)`, or `truncate(L, str)` directly in the `PARTITIONED BY` clause.
2. Prevent synthetic partition columns: Do NOT add derived string columns like `p_date` or `dt`.
3. Execute metadata-only schema evolution: Use `ALTER TABLE ... ADD COLUMN` or `ALTER TABLE ... ALTER COLUMN` without data rewrites.
4. Evolve partitioning via metadata: Alter partition specs using `ALTER TABLE ... ADD PARTITION FIELD` or `DROP PARTITION FIELD` without rewriting historical data.
5. Verify snapshot isolation: Query metadata log files and `.metadata.json` pointers to confirm atomic commit integrity.Keep the `shell_exec` permission set to false in the frontmatter if the agent is only generating DDL and PyIceberg migration scripts, saving LLM reasoning tokens and preventing unauthorized sandbox escalations.
Do not mix Hive-style directory naming assumptions into the workspace. Ensure the agent does not attempt to create `dt=YYYY-MM-DD` directory structures manually via file system tools.
Catalog Configuration & PyIceberg Dependency Binding
Configure catalog connections and install local verification dependencies without leaking sensitive credentials.
Agents require a local interface to validate DDL and partition evolution. Using PyIceberg or DuckDB with the Iceberg extension allows the agent to locally execute syntax parsing and schema checks. Secrets for remote catalogs (like AWS Glue, Nessie, or Snowflake Polaris) must be referenced via standard environment variables and not hardcoded into generated migration files.
pip install pyiceberg[pyarrow,duckdb] python-dotenv && echo 'PYICEBERG_CATALOG__DEFAULT__URI=http://localhost:8181' >> .env.localimport os
from pyiceberg.catalog import load_catalog
# Deterministic catalog loader using environment variables
catalog_name = os.getenv("ICEBERG_CATALOG_NAME", "default")
try:
catalog = load_catalog(catalog_name)
print(f"Successfully connected to Iceberg catalog: {catalog_name}")
except Exception as err:
print(f"Catalog initialization check: {err}")Instruct the agent to use `pyiceberg.catalog.load_catalog()` without inline parameter dictionaries so it automatically reads catalog credentials from standardized `PYICEBERG_CATALOG__*` environment variables.
Ensure `.env` and `.env.local` are explicitly added to `.gitignore`. AI agents can accidentally commit raw credentials when creating migration check scripts.
Intent Matching & Trigger Invocation
Verify deterministic activation using tested natural language prompts.
Once installed, coding agents like Claude Code or Cursor evaluate the prompt against the registered triggers (`create iceberg table`, `configure iceberg hidden partitioning`, `evolve iceberg schema`). Using precise terminology instructs the agent's planner to pull the execution rules into its active context, avoiding generic SQL DDL patterns.
Prefix prompts with the exact table format name, e.g., 'Execute schema evolution on Iceberg table events...' to immediately activate the partition spec evolution rules.
Avoid ambiguous prompts like 'Partition table by date' which often mislead LLMs into generating standard Hive-style `PARTITIONED BY (date STRING)`.
Verification, Linting & Output Quality Gate
Execute automated self-healing checks before accepting agent deliverables.
Before closing the execution loop, the agent must verify that the generated Iceberg DDL or PyIceberg evolution code correctly parses transform functions (`days`, `bucket`, `truncate`) and that partition spec evolutions do not trigger full table rewrites.
python -m pyiceberg.cli list || python -c "import sqlparse; sqlparse.parse(open('migrations/001_create_events.sql').read())"-- Verified Iceberg DDL generated under skill boundaries
CREATE TABLE iceberg_catalog.telemetry.events (
event_id UUID,
user_id BIGINT,
event_time TIMESTAMP,
payload STRING
)
USING iceberg
PARTITIONED BY (
days(event_time),
bucket(16, user_id)
)
TBLPROPERTIES (
'write.format.default' = 'parquet',
'write.parquet.compression-codec' = 'zstd',
'history.expire.max-snapshot-age-ms' = '604800000'
);Instruct the agent to inspect the generated DDL with a syntax parser prior to writing the file to ensure dialect compatibility (Spark SQL vs. Trino vs. PyIceberg).
Never allow agents to bypass syntax checking when working with Spark SQL extensions; missing backticks or improper transform syntax (`day(ts)` instead of `days(ts)`) can fail silently during planning.
Real-World Scenario: Transitioning an E-Commerce Telemetry Table to Hidden Partitioning and Adding Columns
“We need to create an Apache Iceberg table named 'prod_db.user_clicks' partitioned by event timestamp on a daily grain and customer_id with 32 buckets. Later, evolve the schema to add an optional 'session_attributes' map column without rewriting existing data, and switch the partition grain from daily to hourly.”
Runtime Troubleshooting & Failure Modes
Root Cause: The agent omitted `USING iceberg` or the query engine (e.g., Spark session) was not configured with the Iceberg SparkSessionExtensions, defaulting to the generic Spark/Hive table provider.
Ensure table definition explicitly specifies `USING iceberg` and engine config includes: `--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions`.Root Cause: The agent attempted a Hive-style partition query predicate or partition drop on a synthetic column that does not exist because hidden partitioning was used.
Query the base source column directly in predicates: `SELECT * FROM prod_db.user_clicks WHERE event_time >= '2026-03-01 00:00:00'` instead of querying synthetic partition fields.Frequently Asked Questions (Apache Iceberg Hidden Partitioning & Metadata Evolution SOP)
Q:Can I use Apache Iceberg Hidden Partitioning & Metadata Evolution across Codex, Claude Code, and Cursor simultaneously?
Yes. The skill conforms to the universal SKILL.md specification supported across all modern agent runtimes. Simply mount it in your workspace's skill directory or agent config path.
Q:How does Apache Iceberg Hidden Partitioning & Metadata Evolution prevent context window overflow during long agent sessions?
By establishing concise procedural boundaries and deterministic validation gates rather than polluting system prompts with redundant rules, keeping the agent focused on metadata transforms and verified DDL.
Q:Does this skill require escalated root or container permissions?
No. It is audited with a security score of 98/100 and runs safely within workspace-scoped sandboxes with no shell or network access required for DDL generation.
Ready to equip your autonomous agent with Apache Iceberg Hidden Partitioning & Metadata Evolution?
Copy the complete audited SKILL.md specification or download the 1-click zip bundle directly from our verified registry.