8.6 Choosing a Table Format: Delta, Parquet, CSV, JSON, & Apache Iceberg

Key Takeaways

  • Delta Lake is the default and correct format for every managed table in the lakehouse; CSV, JSON, and raw Parquet belong at the landing boundary, not in silver or gold.
  • Only Delta Lake and Apache Iceberg provide ACID transactions, time travel, schema enforcement, and the file-skipping statistics that make lakehouse queries fast; CSV and JSON provide none of them.
  • Azure Databricks supports Iceberg specification versions 1, 2, and 3 over Apache Parquet files, as managed Iceberg tables in Unity Catalog or as read-only foreign Iceberg tables in another catalog.
  • Managed Iceberg tables require a Unity Catalog workspace, Databricks Runtime 16.4 LTS or above, serverless compute enabled, and predictive optimization turned on for table maintenance.
  • Iceberg v2 does not support position or equality deletes on Azure Databricks; row-level deletion is supported through Iceberg v3 deletion vectors instead.
Last updated: August 2026

8.6 Choosing a Table Format: Delta, Parquet, CSV, JSON, & Apache Iceberg

DP-750 Exam Focus: The blueprint bullet is "Choose a data table format, such as Parquet, Delta, CSV, JSON, or Iceberg." The exam is not asking you to like Delta - it is asking you to say which format satisfies a stated requirement, and to know when Iceberg is the answer.


1. Two Different Kinds of "Format"

The bullet mixes two categories, and conflating them is the most common error:

  • File formats - CSV, JSON, Parquet, Avro, ORC. These describe how bytes are laid out in one file. They carry no transaction log, so concurrent writers can corrupt a read, and there is no versioning.
  • Table formats - Delta Lake and Apache Iceberg. These add a metadata layer over Parquet files that provides ACID transactions, schema evolution, time travel, and statistics for file skipping.
CapabilityCSVJSONParquetDelta LakeApache Iceberg
Columnar / compressedNoNoYesYesYes
Schema in the fileNoInferredYesYesYes
ACID transactionsNoNoNoYesYes
Time travelNoNoNoYesYes
Schema enforcement and evolutionNoNoLimitedYesYes
File-skipping statisticsNoNoRow-group onlyYesYes
MERGE / UPDATE / DELETENoNoNoYesYes
Concurrent writersUnsafeUnsafeUnsafeSafeSafe

2. Where Each Format Belongs

Layer / useFormatReasoning
Source system export landing in a volumeCSV / JSON as deliveredYou do not control the producer; land it as-is and keep it replayable
Bronze tableDeltaIngest the raw files into Delta immediately so bronze is transactional and time-travellable
Silver and gold tablesDeltaMERGE, constraints, liquid clustering, predictive optimization all require it
Interchange with a non-Databricks engine that cannot speak DeltaIceberg (managed) or Parquet exportIceberg is the open interoperability path
Reading a table another platform already ownsForeign Iceberg tableRead-only, metadata retrieved through Lakehouse Federation
One-off extract for a downstream toolParquet or CSV written to a volumeA file, not a table

The trap. Scenarios describing "we keep the bronze layer as compressed JSON to save conversion cost" are describing a defect, not an optimization: no ACID guarantees, no time travel, no file skipping, and every downstream read re-parses text. Ingest into Delta at the bronze boundary.


3. Apache Iceberg in Unity Catalog

Azure Databricks supports Iceberg tables that use the Apache Parquet file format and versions 1, 2, and 3 of the Iceberg specification. Iceberg maintains atomicity and consistency by writing new metadata files for each table change, and the Iceberg catalog is the layer that returns current metadata when a table is loaded.

Two distinct kinds exist, and the exam distinguishes them sharply:

Managed Iceberg Tables (Unity Catalog owns them)

Requirements:

  • A workspace with Unity Catalog enabled
  • Databricks Runtime 16.4 LTS or above
  • A workspace with serverless compute enabled - Databricks uses serverless to maintain Iceberg table metadata, so serverless must have network connectivity to the backing storage account
  • Predictive optimization enabled for table maintenance; managed Iceberg tables can only be created when it is on

What you get in return: Unity Catalog handles lifecycle tasks such as snapshot expiration and file compaction, liquid clustering works, predictive optimization automates maintenance, materialized views support incremental refresh, and streaming tables support incremental loading from Kafka and cloud object storage.

-- A managed Iceberg table is created like any other Unity Catalog table
CREATE TABLE prod_retail.gold.orders_iceberg (
  order_id   BIGINT,
  store_id   INT,
  order_ts   TIMESTAMP,
  net_amount DECIMAL(18,2)
) USING ICEBERG;

Foreign Iceberg Tables (another catalog owns them)

A foreign Iceberg table is managed by a catalog outside Unity Catalog - AWS Glue, a Hive metastore, or Snowflake Horizon Catalog. The external catalog holds the current metadata, and Azure Databricks uses Lakehouse Federation (Section 3.5) to retrieve that metadata and read the table from object storage. Foreign Iceberg tables are read-only and have limited platform support.

Access From External Iceberg Engines

Every Iceberg table in Unity Catalog is reachable through the Iceberg REST Catalog API, which supports read and write from external engines such as Apache Spark, Flink, Trino, and Kafka. The REST Catalog supports credential vending, delivering temporary credentials so an external engine can reach the underlying storage without a long-lived key. Credential vending is not supported on workspaces that use default storage.


4. Iceberg Limitations Worth Memorizing

  • Iceberg tables support only the Apache Parquet file format.
  • For Iceberg v2, position deletes and equality deletes are not supported; Azure Databricks supports Iceberg v3 deletion vectors for row-level deletion instead (Section 8.3).
  • Branching and tagging are not supported. Only the main branch is accessible when reading foreign Iceberg tables.
  • Partition evolution works on managed Iceberg tables only when driven from external Iceberg engines through the REST Catalog, not from Databricks SQL. Foreign Iceberg tables do not support it at all.
  • Partitioning by expression transforms (years(), months(), days(), hours(), bucket()) is not supported for managed Iceberg tables, and partitioning by BINARY is unsupported generally.
  • Views are not accessible from external Iceberg engines.
  • Unsupported data types: UUID, Fixed(L), TIME, and nested STRUCT with required fields.
  • Managed Iceberg tables cannot use Delta Lake generated columns, constraints, or collation, because Apache Iceberg does not implement them. All managed Iceberg tables use Zstd compression and the codec cannot be changed.
  • Foreign Iceberg tables support time travel only for snapshots previously read in Azure Databricks.

Constraints matter more than they look. Section 9.5 builds data quality on CHECK constraints and NOT NULL invariants. Those are Delta Lake features. Choosing managed Iceberg for a silver table gives up the constraint layer - a real architectural trade-off, not a footnote.


5. The Decision Table

RequirementFormat
Default for any managed lakehouse tableDelta Lake
MERGE upserts, CHECK constraints, generated columnsDelta Lake (Iceberg does not implement the latter two)
External Iceberg engines must write to the tableManaged Iceberg via the Iceberg REST Catalog
Another platform owns the table and Databricks only reads itForeign Iceberg table
Interoperability with an engine that cannot read Delta, with Databricks still owning the tableManaged Iceberg
Raw landing of vendor extractsCSV / JSON as delivered, in a volume
A columnar file handed to a downstream tool that reads files, not tablesParquet

6. Exam Traps

  • "Use Parquet for the silver layer for performance" is wrong. Parquet without a table format has no ACID guarantees, no MERGE, and no time travel.
  • Managed Iceberg is not a runtime toggle. It needs UC, DBR 16.4 LTS or above, serverless compute, and predictive optimization.
  • Foreign Iceberg tables cannot be written to. They are read-only, like every other federated object.
  • Iceberg v2 row-level deletes are not the answer on Databricks. Deletion vectors under Iceberg v3 are.
Loading diagram...
File Formats Versus Table Formats in the Lakehouse
Test Your Knowledge

An external Trino cluster must both read and write a table that Unity Catalog governs, and the security team forbids issuing long-lived storage keys to the external engine. Which design meets both requirements?

A
B
C
D
Test Your Knowledge

A team plans to convert their silver customer table from Delta Lake to a managed Apache Iceberg table so a partner tool can read it. During design review, which existing capability must they confirm they can live without?

A
B
C
D
Test Your Knowledge

A workspace on Databricks Runtime 15.4 LTS with serverless compute disabled attempts to create a managed Iceberg table in Unity Catalog and the statement fails. Which combination of prerequisites has not been met?

A
B
C
D