Publish Date: 2026-07-12 7 min read
A data lake is a central repository where you can hold and store all your data in its native format, until it’s needed for analytic applications — from dashboards and visualizations to big-data processing, real-time analytics, and machine learning — in order to guide better decisions.
Data lakes usually store data in files on object storage. The object store keeps metadata and a unique identifier alongside each object, which makes data easier to locate and retrieve across regions and improves performance — giving teams far more flexibility over how data is managed, stored, and used.
Classic data warehouses are brilliant at answering known questions over clean, structured data — but they force you to decide the schema before you load anything (schema-on-write), and they get expensive fast at big-data scale. That’s a poor fit for the messy reality of modern data: clickstreams, JSON event logs, IoT telemetry, images, audio, PDFs, and tables that all need to live somewhere before anyone knows exactly how they’ll be queried.
A data lake flips the model. You land everything — structured, semi-structured, and unstructured — in its raw form, cheaply, and you impose structure only when you read it (schema-on-read). Nothing is thrown away for lack of a predefined table, and one copy of the data can feed many different workloads.
The storage layer is almost always cloud object storage — Amazon S3, Azure Data Lake Storage (ADLS Gen2), or Google Cloud Storage — or an on-premises equivalent such as HDFS or MinIO. Object storage is attractive because it decouples storage from compute (you pay for each independently and scale them separately), it’s cheap and effectively limitless, and it’s durable and globally accessible.
How you write the files matters enormously for cost and speed. The workhorses are:
A simple rule: row formats (Avro) for writing/streaming, columnar formats (Parquet/ORC) for reading/analytics. Pair the right format with sensible partitioning (for example, laying files out by year/month/day) so engines can skip whole folders they don’t need.
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
# Read raw JSON events landed in the lake, apply a schema on read...
events = spark.read.json("s3a://my-lake/raw/events/2026/07/")
# ...then write them back as partitioned Parquet for fast analytics
(events
.write
.partitionBy("event_date")
.mode("append")
.parquet("s3a://my-lake/curated/events/"))
These aren’t rivals so much as different tools; many organizations run both. The essential differences:
| Data Lake | Data Warehouse | |
|---|---|---|
| Data | Raw; structured, semi-structured & unstructured | Processed, structured only |
| Schema | Schema-on-read (define when querying) | Schema-on-write (define before loading) |
| Cost | Low (cheap object storage) | Higher (optimized, managed storage) |
| Users | Data engineers & scientists, ML | Analysts & BI |
| Best at | Flexibility, scale, ML, exploration | Fast, reliable, governed reporting |
A data lake’s greatest strength — dump anything, decide later — is also how it dies. Ingest data with no governance and the files pile up without documentation, ownership, or quality checks. Six months later nobody knows what final_v2_REAL.csv contains, whether it’s trustworthy, or who owns it. That’s a data swamp: plenty of data, no meaning.
The most widely adopted pattern for keeping a lake usable is the medallion architecture — sometimes called a multi-hop architecture — which progressively improves data quality as it flows through three zones:
For years the trade-off was stark: lakes gave you cheap, flexible storage but no transactions, no reliable schema enforcement, and no easy updates; warehouses gave you reliability but at cost and rigidity. The lakehouse closes that gap by adding a metadata/transaction layer on top of the files in your lake — so you get warehouse-grade guarantees (ACID transactions, schema evolution, time travel, efficient upserts and deletes) directly on cheap object storage.
That layer is delivered by open table formats, and this is where the field has moved fastest:
Newer entrants like Apache Paimon (streaming-first) and DuckLake (which keeps table metadata in a plain relational database) show the space is still evolving — but the headline is clear: a modern data lake with an open table format is a lakehouse.
Reach for a data lake (or lakehouse) when you have large volumes of varied data — especially semi-structured or unstructured — that you want to keep cheaply and explore later; when you’re feeding machine learning or data science, which thrive on raw, granular data; when you need to decouple storage cost from compute; or when you want one governed copy of data to serve BI, analytics, and ML at once. If your needs are purely fast, structured, well-understood reporting, a warehouse alone may still be the simpler answer.
A data lake, at its core, is a simple and powerful idea: store everything cheaply, in open formats, and decide how to use it later. The catch is that flexibility without discipline turns a lake into a swamp — so the real craft is in the governance, the zoning (bronze/silver/gold), and the open table format that together turn a pile of files into a trustworthy, query-ready platform. Master those, and the lake stops being a storage bill and becomes the foundation your analytics and ML actually stand on.
Designing or untangling a data lake and not sure where to start? I work on exactly this — feel free to get in touch.
0 Comments
No comments yet. Be the first to share your thoughts!