C.1 Understanding the Iceberg specificationC.1.1 What is a table format specification?C.1.2 Why Iceberg formalizes table behaviorC.1.3 Evolution of the spec: Versioning principles and compatibilityC.2 Iceberg table format versionsC.2.1 Version 1: Foundation for analytical tablesC.2.2 Version 2: Row-level deletes and stricter writesC.2.3 Version 3: Extended types and advanced capabilitiesC.2.4 Version 4: Performance, portability, and real-time readinessC.3 Snapshot management and table metadataC.3.1 Table metadata filesC.3.2 Snapshots and the manifest listC.3.3 Sequence numbers and optimistic concurrencyC.4 The REST Catalog specificationC.4.1 Overview and purposeC.4.2 Catalog configuration and default endpointsC.4.3 Namespaces, tables, and viewsC.4.4 Table registration, metrics, and transactionsC.4.5 OAuth2 support and security considerationsC.4.6 The scan-planning endpointC.5 Puffin file format specificationC.5.1 What is a Puffin file?C.5.2 Storing column-level metrics and custom indexesC.5.3 Integration with Iceberg table metadataC.6 Compatibility and migrationC.6.1 Reading and writing across format versionsC.6.2 Upgrading tables to newer spec versionsC.6.3 Handling backward compatibility in practice