Open Data Format Explained

Data conversations today are full of terms like open formats, Delta, Spark, Snowflake, and Parquet.
They sound complex, but the core ideas are actually straightforward once we connect them step by step.

This article walks through the full data chain from raw data to modern data platforms, in a simple, readable flow.


1. What Is an Open Data Format?

At its core, a data format defines how data is stored in a file.

An open data format is a format that:

  • Is publicly documented

  • Can be read and written by many tools

  • Is not controlled by a single vendor

This means your data is portable and future-proof.

Simple example: CSV

A CSV (Comma-Separated Values) file stores data as rows and columns in plain text.

name,city,rating
Food Palace,Delhi,4.5
Spice Hub,Bangalore,4.2

This file can be opened using Excel, Python, Spark, databases, or even a text editor.
That openness is what makes CSV an open data format.


2. Common Open Data Formats and Their Differences

As data grows larger, CSV becomes inefficient. That’s why other open formats exist.

Popular open data formats

Format Human Readable Storage Efficient Fast for Analytics Common Usage
CSV ✅ Yes ❌ No ❌ No Small datasets, sharing
JSON ✅ Yes ❌ No ❌ No APIs, logs
Parquet ❌ No ✅ Yes ✅ Yes Analytics, data lakes
Avro ❌ No ✅ Yes ✅ Yes Streaming systems
ORC ❌ No ✅ Yes ✅ Yes Big data analytics

Among these, Parquet has become the most widely used format for analytics.


Why Parquet Became So Popular

As data volumes increased, CSV and JSON started to struggle.

This led to columnar open formats like Parquet.

Parquet is:

  • Highly compressed

  • Very fast for analytics

  • Designed for large datasets

That’s why almost every modern data lake today uses Parquet.


The Hidden Problems with Open Data Formats (Especially Parquet)

Parquet is excellent at reading data, but it has serious limitations when data changes.

Here are the most common problems teams face.


❌ Problem 1: Updates Are Hard

Parquet files are immutable.

You cannot simply:

  • Update a row

  • Delete a record

  • Modify a value

Instead, you have to rewrite entire files.

This quickly becomes expensive and complex.


❌ Problem 2: No Transaction Support

If two jobs write to the same dataset at the same time:

  • Files can be partially written

  • Data can become inconsistent

  • Readers may see corrupt data

Parquet alone has no concept of transactions.


❌ Problem 3: No Data Versioning or History

Once data is overwritten:

  • The previous version is gone

  • No easy rollback

  • No way to audit what changed and when

For enterprise use cases, this is a big risk.


❌ Problem 4: Schema Changes Are Painful

Changing a column:

  • Adding a column

  • Renaming a column

  • Changing data types

…can break downstream jobs because Parquet itself does not manage schema evolution.


3. What Is an Open Table Format?

Open data formats store files well, but they don’t manage data changes well as you see above.

This is where open table formats come in.

An open table format:

  • Sits on top of open data files (usually Parquet)

  • Treats files as a logical table

  • Manages updates, deletes, and history

Popular open table formats

Open Table Format Key Strength
Delta Lake Reliability & ACID transactions
Apache Iceberg Scalability & engine compatibility
Apache Hudi Real-time ingestion

4. Open Data Format vs Open Table Format

These two concepts are related but not the same.

Aspect Open Data Format Open Table Format
Level File Table
Examples CSV, Parquet Delta, Iceberg
Handles updates ❌ Poorly ✅ Well
Tracks history ❌ No ✅ Yes
Dependency Standalone Built on open formats

Key relationship:

Open table formats use open data formats underneath.

For example:
Delta Lake = Parquet files + transaction log + rules


What Open Table Formats Fix

Problem with Parquet How Open Table Formats Solve It
No updates/deletes Manage file rewrites automatically
No transactions ACID transactions
No history Time travel & versioning
Schema changes risky Controlled schema evolution
Concurrent writes unsafe Conflict detection

Key idea:
Parquet stays the storage layer.
Open table formats add order and safety.


Open Data Format vs Open Table Format (Clarified)

Open Data Format Open Table Format
File-level Table-level
CSV, Parquet Delta, Iceberg
Optimized for storage Optimized for change
No governance Built-in reliability

They are not competitors — they are complementary.

 


5. What Are Data Engines?

A data engine is software that:

  • Reads data

  • Processes it

  • Produces results

Engines do not own the data — they operate on data stored elsewhere.

Common data engines

Data Engine Best For Notes
Apache Spark Large-scale batch & streaming Very flexible
Trino / Presto Fast SQL queries Interactive analytics
Flink Real-time processing Event-driven systems
Pandas Small datasets Single-machine

Data Engines:

  • Read Parquet

  • Understand open table formats

  • Do not manage storage themselves


6. What Are Data Platforms?

A data platform is a managed environment that combines:

  • Storage

  • Compute

  • Security

  • Governance

  • User access

Platforms may internally use open formats and engines, but they hide complexity.

Popular data platforms

Platform Type Strength
Snowflake Cloud data warehouse Ease of use
Databricks Lakehouse platform Spark + open formats
BigQuery Cloud-native warehouse Serverless analytics
Redshift Cloud warehouse AWS integration

7. Reading an Open Data Format (CSV) Using Python

CSV is the simplest open data format to work with.

Example: Reading CSV with Python

import pandas as pd

df = pd.read_csv(“restaurants.csv”)

print(df)

That’s all it takes.
No proprietary software.
No vendor lock-in.


8. Reading an Open Data Format (Parquet) Using Python

Parquet is more efficient but still open.

Example: Reading Parquet with Python

import pandas as pd

df = pd.read_parquet(“restaurants.parquet”)

print(df)

The experience for the user is almost identical — even though Parquet is far more optimized internally.


9. How Everything Fits Together (One Simple Analogy — Finally 🍽️)

Imagine the entire data ecosystem as a restaurant system:

  • Data → Raw ingredients

  • Open data format → Standard food packaging (rice bags, spice packets)

  • Open table format → Organized storage with labels, expiry tracking

  • Data engine → Kitchen and chefs that cook the food

  • Data platform → The full restaurant (kitchen, seating, billing, staff)

You can:

  • Buy ingredients yourself and hire a chef (open formats + Spark)

  • Or walk into a fully managed restaurant (Snowflake, Databricks)

Both work — the choice depends on control vs convenience and obviously cost.

 


10. Why You Can’t Update Parquet Directly

Parquet files are immutable.

That means:

  • No row-level updates

  • No deletes

  • No UPDATE statement like a database

This is by design — Parquet is optimized for fast reads, not changes.

So Python (or any tool) cannot modify a row inside an existing Parquet file.


The Only Way: Read → Change → Rewrite

This is the standard pattern when using plain Parquet + Python.

Example scenario

You have a Parquet file with restaurant ratings, and you want to update one rating.


Step 1: Read the Parquet file

import pandas as pd

df = pd.read_parquet(“restaurants.parquet”)


Step 2: Update the data in memory

df.loc[df["name"] == "Food Palace", "rating"] = 4.7

Step 3: Write it back (overwrite)

df.to_parquet("restaurants.parquet", index=False)

✅ This works
❌ But the entire file is rewritten


11.Why This Becomes a Problem at Scale

This approach is fine for:

  • Small files

  • Experiments

  • One-off jobs

It breaks down when:

  • Files are large (GBs or TBs)

  • Many users write concurrently

  • You need audit history

  • Partial failures happen

Issue What Goes Wrong
Large files Full rewrite is slow
Concurrent writes Data corruption risk
Failures mid-write Partial data
No history Can’t roll back

This is exactly where teams run into trouble with “Parquet-only” data lakes.


12. How Updates Are Really Done in Production

Use an Open Table Format and data engines.

This is the correct solution.

Open table formats like:

  • Delta Lake

  • Apache Iceberg

  • Apache Hudi

add:

  • Transaction logs

  • File versioning

  • Safe concurrent writes

From Python, it feels like updating a table — even though files are rewritten under the hood.

Lets look at this python code.

from delta.tables import DeltaTable
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
delta_table = DeltaTable.forPath(spark, “/data/restaurants”)

delta_table.update(
condition=”name = ‘Food Palace'”,
set={“rating”: “4.7”}
)

 

This looks like Python code — but almost none of this runs in Python itself.


What Python Is Not Doing

Python is not:

  • Reading Parquet files directly

  • Updating rows inside files

  • Managing transactions

  • Handling concurrent writes

Python cannot do these things for Parquet.


What Spark Is Actually Doing (Step by Step)

When you run delta_table.update(...), here’s what really happens:

1️⃣ Python Sends Instructions

Python creates a logical plan:

“Update rows where name = ‘Food Palace’ and set rating = 4.7”

No data is touched yet.


2️⃣ Spark Takes Over

Spark:

  • Parses the update command

  • Builds a physical execution plan

  • Decides which Parquet files are affected

This planning happens inside the Spark engine (JVM).


3️⃣ Spark Reads the Affected Parquet Files

Spark:

  • Reads only the required files (not the whole dataset)

  • Loads them into distributed memory

  • Applies the update logic

This is massively parallel and distributed.


Spark Rewrites New Parquet Files

Because Parquet is immutable:

  • Spark writes new Parquet files with updated data

  • Old files are left untouched

No in-place update happens.


Delta Lake Manages the Transaction

Delta Lake:

  • Writes a transaction entry to the _delta_log

  • Atomically switches the table to the new version

  • Makes the update visible only after success

If Spark crashes halfway → no partial update is visible.


Old Files Are Marked for Cleanup

The old Parquet files:

  • Are no longer referenced by the latest version

  • Can be cleaned up later using VACUUM


Where Spark Fits Conceptually

Component Role
Python Control plane (instructions)
Spark Execution engine
Delta Lake Transaction & table management
Parquet Storage format

Why Spark Is Mandatory Here

Delta Lake:

  • Depends on Spark’s distributed execution

  • Uses Spark’s file handling and scheduling

  • Leverages Spark’s fault tolerance

Without Spark:

  • No parallel file rewrites

  • No safe concurrency

  • No scalable updates

That’s why Delta Lake is not a Python library — it is a Spark extension.