Data Warehousing Updated: 2026-01-21

What is Data Lake?

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.

From the field

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.

What data lakes look like in 2026

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.

Field story

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.

Data Lake vs Data Warehouse

AspectData LakeData Warehouse
Data FormatRaw, any formatStructured only
SchemaSchema-on-readSchema-on-write
UsersData scientists, engineersAnalysts, business users
CostLower storage costHigher, optimized storage

Zones

  1. Raw/Bronze Zone: Data exactly as received from sources
  2. Cleansed/Silver Zone: Validated, deduplicated, standardized data
  3. Curated/Gold Zone: Business-ready, aggregated datasets

Data Lakehouse

  • Delta Lake (Databricks): ACID transactions on data lakes
  • Apache Iceberg: Open table format for huge datasets
  • Apache Hudi: Incremental data processing

Cloud Data Lake Platforms

  • AWS: S3 + Glue + Athena + EMR
  • Azure: Data Lake Storage + Synapse + Databricks
  • Google Cloud: GCS + Dataproc + BigQuery

Challenges and Solutions

  • Data Swamp: Without governance, lakes become unusable → Use data catalogs
  • Query Performance: Raw files are slow → Use table formats (Delta, Iceberg)
  • Security: Sensitive data exposure → Implement row/column level security

Key Points

Gotchas

Data lake failure modes that repeat across projects:

  • The data swamp. Without a catalog, schema enforcement, and ownership, a lake becomes an uncurated dump of orphaned files. Nobody knows what's current, what's abandoned, or what schema a file has. Adopt a table format (Iceberg/Delta/Hudi) + catalog (Unity, Glue, Polaris) from day one.
  • Small-files problem. Writing millions of tiny Parquet files (< 10MB) destroys read performance — each query opens thousands of files. Compact small files into 100MB-1GB files via Iceberg/Delta optimize operations or periodic compaction jobs.
  • No ACID guarantees on raw Parquet. Writing to the same directory from two concurrent jobs produces partially-written files and inconsistent reads. Table formats (Iceberg, Delta, Hudi) solve this with transaction logs. Don't rely on raw Parquet for production data you write to.
  • Partition explosion. Partitioning by every possible column (year/month/day/hour/user/region) creates millions of tiny directories with one file each. Choose partitions deliberately — typically 1-3 levels for most tables.
  • Schema evolution unplanned. Source systems change columns; ingestion pipelines break silently. Use Iceberg/Delta schema evolution, enforce schema-on-write in the raw layer, and monitor for schema drift.
  • Query performance variance. Unlike a warehouse, query performance on a lake depends heavily on file layout, partitioning, clustering, and engine choice. A badly-laid-out table that takes 10 seconds on Athena can take 40 minutes on Spark without optimization.
  • Data access governance as an afterthought. Object-level S3 permissions don't scale to fine-grained (column-level, row-level) access control. Use Unity Catalog, AWS Lake Formation, or Polaris for proper RBAC with column masking.
  • Lake and warehouse as separate silos. Teams building "lake for data science, warehouse for BI" end up with duplicated data, inconsistent logic, and reconciliation pain. Modern architecture: one storage layer (lake), multiple query engines, lakehouse table formats unify the two.
  • Ignoring cost of queries. Athena / BigQuery externals / Snowflake external tables charge per TB scanned. A query with no partition filter on a 100TB lake can cost $500 in one click. Enforce partition filters, use table stats, set up cost alerts.
  • No retention / lifecycle policy. Lakes "store everything forever" until storage cost forces a cleanup. Define retention per dataset, use S3 lifecycle rules to tier to Glacier, and delete/archive abandoned tables.

Frequently Asked Questions

What is a data lake in simple terms?

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.

What is the difference between a data lake and a data warehouse?

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.

What is a data lakehouse?

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.

What are the benefits of a data lake?

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.

What tools are used to manage a data lake?

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.

What is the small-files problem in data lakes?

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.

Is a data lake secure?

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.

Related Terms

Data WarehouseSnowflakeDatabricksDelta LakeColumnar Storage

Related Tools

AWS S3Azure Data LakeDatabricksDelta LakeApache Iceberg

Learn More

Related Articles

Browse All Terms Read Articles