A centralized storage repository that holds vast amounts of raw data in its native format until needed for analysis, supporting structured, semi-structured, and unstructured data.
A data lake is the cheap, flexible, schema-later cousin of the data warehouse. Instead of modeling data before it lands (schema-on-write, the warehouse approach), a data lake stores raw files — CSV, JSON, Parquet, Avro, logs, images, video, PDFs, anything — in cheap object storage (S3, ADLS, GCS) and lets you apply schema at query time (schema-on-read). The original promise: store everything forever, figure out what to do with it later. The original failure mode: "data swamps" where nobody can find anything, governance evaporates, and the lake becomes a graveyard of abandoned datasets.
The pure "dump files in S3" data lake is largely obsolete. Modern lakes sit at the center of a lakehouse architecture: Parquet files in S3/ADLS/GCS + an ACID table format layer (Apache Iceberg, Delta Lake, Apache Hudi) + SQL query engines (Trino, Athena, Databricks SQL, Snowflake external tables) + a data catalog (AWS Glue, Unity Catalog, Polaris, Nessie). This gives you warehouse-like ACID semantics, time travel, schema evolution, and SQL performance — on top of open file formats and cheap object storage. Typical use cases: large-scale ML training data, log analytics, IoT/sensor data, media/unstructured data, and increasingly as the primary analytics store replacing separate warehouse + lake.
An adtech client was storing 8PB of event data across a mix of Snowflake (last 90 days, hot), S3 Parquet (historical, cold) with a homegrown partition scheme. Querying anything older than 90 days required spinning up an EMR cluster and 2-hour job times. They were paying Snowflake storage for 90 days of hot data (~$180K/year) while the cold S3 data was effectively un-queryable. We migrated everything to Iceberg on S3, with Snowflake external tables for recent queries and Trino for historical analytics. All 8PB became directly SQL-queryable with minute-level latency. Snowflake storage cost dropped 80% (only metadata and hot-cache in SF now), total analytics infrastructure cost dropped 50%, and analysts stopped abandoning historical queries because "it's too slow." The lakehouse architecture let them decouple storage from compute and format from query engine — which is the whole point.
A data lake is a centralized repository designed to store, process, and secure large volumes of data in any format—structured, semi-structured, or unstructured. Unlike data warehouses that require data to be structured before storage, data lakes accept raw data as-is.
| Aspect | Data Lake | Data Warehouse |
|---|---|---|
| Data Format | Raw, any format | Structured only |
| Schema | Schema-on-read | Schema-on-write |
| Users | Data scientists, engineers | Analysts, business users |
| Cost | Lower storage cost | Higher, optimized storage |
Data lake failure modes that repeat across projects:
A data lake is a centralized storage system (typically cloud object storage like S3, ADLS, or GCS) that holds raw data in its original format — structured, semi-structured, or unstructured — until it's needed for analysis. Unlike a data warehouse that requires data to be modeled and transformed before storage (schema-on-write), a data lake stores data as-is and applies schema at query time (schema-on-read). Common contents: Parquet files from CDC pipelines, JSON event logs, CSV batch exports, images/video for ML training, IoT sensor data. Modern lakes add ACID table formats (Iceberg, Delta Lake, Hudi) to make the lake SQL-queryable with warehouse-like guarantees — this is the lakehouse architecture.
Data warehouse: structured/semi-structured data only, schema-on-write, optimized for SQL analytics and BI, costs ~$23-40/TB/month storage, query performance consistently fast (Snowflake, BigQuery, Redshift). Data lake: any data format, schema-on-read, costs ~$5-23/TB/month object storage, query performance varies wildly by file layout and engine, flexible for ML/data science (S3, ADLS, GCS + Trino/Athena/Spark). The 2026 lakehouse hybrid combines them: data in open formats (Parquet + Iceberg/Delta) on cheap object storage, queried by warehouse-grade SQL engines (Snowflake, Databricks SQL, Trino). Most new architectures adopt some lakehouse flavor; the pure lake vs pure warehouse distinction is fading.
A data lakehouse combines data-lake economics (cheap object storage, open file formats) with data-warehouse capabilities (ACID transactions, schema enforcement, SQL performance, time travel). The key enabler is table formats — Apache Iceberg (vendor-neutral, fast-growing), Delta Lake (Databricks-led), Apache Hudi (incremental-first) — which sit on top of Parquet files and provide a transaction log, schema evolution, and indexing metadata. SQL engines like Databricks SQL, Trino, Snowflake, Presto, and Athena can all query these tables with warehouse-grade performance. The lakehouse enables "one copy of data, many query engines" — breaking warehouse vendor lock-in while keeping SQL ergonomics.
Key benefits: (1) cost — object storage is ~5-10x cheaper than warehouse storage; (2) flexibility — store any data type (JSON, images, video, logs, PDFs) not just relational tables; (3) schema-on-read — you can analyze data without pre-designing the schema; (4) openness — data stored in open formats (Parquet, Iceberg) isn't locked to a vendor; (5) scale — object storage is effectively infinite; (6) multi-engine — Spark, Trino, Athena, Snowflake external tables, Databricks SQL all query the same data; (7) ML-friendly — data scientists prefer raw data access for feature engineering and training. The cost: without discipline (table formats, catalogs, governance), lakes become swamps. Don't build a lake without committing to lake-quality hygiene.
Storage: AWS S3, Azure Data Lake Storage (ADLS), Google Cloud Storage (GCS), MinIO (self-hosted). Table formats: Apache Iceberg, Delta Lake, Apache Hudi. Query engines: Trino/Presto, Amazon Athena, Databricks SQL, Snowflake (external tables/Iceberg), Spark SQL, DuckDB for local/embedded. Catalogs: AWS Glue Data Catalog, Databricks Unity Catalog, Snowflake Polaris, Apache Polaris, Project Nessie, Hive Metastore (legacy). Orchestration: Airflow, Dagster, dbt. Ingestion: Fivetran, Airbyte, Debezium CDC, Kafka → Flink/Spark Streaming. Governance: AWS Lake Formation, Unity Catalog, Immuta, Apache Ranger. Observability: Monte Carlo, Bigeye, Anomalo. The 2026 standard stack: Parquet + Iceberg on S3 + Unity/Glue catalog + Trino or Databricks SQL for queries.
The small-files problem: when lake writers create thousands or millions of small files (< 10MB each), query performance degrades catastrophically because each query must open and process every file, and object-storage read latency is per-file. A 10GB dataset split into 100,000 tiny files can query 50-100x slower than the same data in 100 appropriately-sized files. Causes: streaming writes with short flush intervals, poorly-partitioned tables, CDC systems writing every batch. Fixes: (1) compaction jobs that merge small files into target-sized files (100MB-1GB); (2) Iceberg/Delta optimize commands; (3) adjust streaming writers to buffer longer; (4) partition strategy aligned to query patterns, not write patterns. Table formats make compaction a first-class operation rather than a manual cleanup job.
A data lake can be secure if architected deliberately — but object storage alone (S3 bucket permissions) provides only coarse-grained access control. For production data lakes, layer on: (1) fine-grained access control via AWS Lake Formation, Databricks Unity Catalog, Snowflake Polaris, or Apache Ranger for column-level and row-level security; (2) encryption at rest (cloud KMS) and in transit (TLS); (3) audit logging of every access for compliance; (4) data classification tagging (PII, PHI, PCI) to drive masking policies; (5) network isolation (VPC endpoints, PrivateLink) to prevent public access; (6) IAM role-based access with short-lived credentials, not long-lived access keys. Security failures in data lakes are almost always access-control design failures, not technology failures. Plan governance before loading sensitive data.