4 min read

Open Table Formats vs Open File Formats

As organizations scale beyond gigabytes into petabytes of analytical data, the traditional Data Warehouse architecture becomes prohibitively expensive and inflexible. This led to the rise of the Data Lake, where raw data is dumped into cheap, scalable cloud object storage (like AWS S3).

However, raw data lakes are notoriously messy ("Data Swamps"). To query this data efficiently, data engineers rely on two critical architectural layers: Open File Formats and Open Table Formats.


1. Open File Formats (The Storage Layer)

At the absolute lowest level, data must be serialized into bytes and stored on disks. Open File Formats define exactly how those bytes are organized.

The Problem with CSV and JSON

Dumping raw JSON or CSV files into a data lake is easy for humans to read, but disastrous for compute engines. They are row-oriented, uncompressed, lack strong typing, and require a full table scan to read a single column.

The Solution: Optimized Formats (Parquet, ORC, Avro)

Modern data pipelines standardize on open-source binary formats that optimize for analytical workloads.

  • Apache Parquet: A highly optimized, columnar file format. Parquet heavily compresses data and stores schema metadata within the file footer. It allows engines to use "Predicate Pushdown"—if a query filters for year = 2024, the engine reads the metadata block, realizes the file only contains 2023 data, and completely skips downloading the file block from S3.
  • Apache ORC (Optimized Row Columnar): Similar to Parquet, ORC is a columnar format originally built for the Hive ecosystem. It provides extreme compression and lightweight indexes (Bloom filters) directly inside the file stripes.
  • Apache Avro: A row-based format optimized for fast writes and schema evolution. Avro is heavily used in streaming systems (like Kafka) to capture transactional data before it is compacted into Parquet for analytical reading.

[!WARNING] The Limitation: File formats only solve the storage problem. You cannot execute an ACID transaction (e.g., UPDATE users SET status = 'active') on an immutable Parquet file in AWS S3.


2. Open Table Formats (The Metadata Layer)

If file formats dictate how data is stored inside a single file, Table Formats dictate how thousands of physical files are grouped together to represent a single logical "Table".

The Problem: The Hive Metastore Bottleneck

Historically, the Hadoop ecosystem used the Hive Metastore to track files. Hive tracked data at the directory/partition level. If an engine wanted to query a table, it had to list the entire S3 directory. For tables with millions of files, just listing the files could take 10 minutes before the query even started computing!

Furthermore, Hive provided zero transactional guarantees. If a pipeline failed halfway through writing to S3, users querying the table would see dirty, incomplete data.

The Solution: Transactional Lakehouses (Iceberg, Hudi, Delta)

Open Table Formats sit directly above the file format layer. They maintain a strict transactional metadata log that tracks the state of the table at the file level rather than the directory level.

  • Apache Iceberg: Developed at Netflix, Iceberg tracks every individual Parquet file in a scalable metadata tree. When a query is run, the engine reads the Iceberg snapshot log to see exactly which files are valid, completely bypassing expensive S3 directory listings.
  • Apache Hudi (Hadoop Upserts Deletes and Incrementals): Originally built by Uber, Hudi specializes in streaming ingestion and mutating data. It allows for efficient record-level UPSERTs and DELETEs on top of immutable file formats.
  • Delta Lake: Open-sourced by Databricks, Delta maintains a JSON-based transaction log (_delta_log) alongside the Parquet files, providing ACID transactions, scalable metadata handling, and deep integration with Apache Spark.

3. What Capabilities Do Table Formats Unlock?

By shifting from raw directories of Parquet files to an Open Table Format, data lakes are transformed into Data Lakehouses, unlocking capabilities historically reserved for expensive Data Warehouses:

1. ACID Transactions: Multiple pipelines can read and write to the data lake simultaneously without colliding or exposing dirty reads.
2. Time Travel: Because table formats maintain a log of snapshots, you can query exactly what the table looked like last Tuesday at 2 PM (e.g. SELECT * FROM users TIMESTAMP AS OF '2023-10-15').
3. Schema Evolution: Safely drop, rename, or reorder columns without needing to rewrite petabytes of existing Parquet files.
4. Hidden Partitioning: End-users do not need to know how the table is partitioned on disk; the table format dynamically prunes the correct files based on the logical query.

[!TIP] The Stack: A modern data platform might use Apache Kafka to stream data as Avro, land it into S3 as Parquet files, organize those files logically using Apache Iceberg, and query them seamlessly using compute engines like Trino or Snowflake.


Related Guides:
← PreviousDeep Dive into File FormatsNext →Deep Dive into Apache Parquet