Data lake
A data lake is a centralized repository that stores raw structured, semi-structured, and unstructured data at any scale, in its native format, until it's needed for analysis.
Overview
A data lake is a centralized storage repository that holds large volumes of raw data in its native format — structured tables, semi-structured JSON or logs, and unstructured files like images or text — without requiring a predefined schema. This is often called "schema-on-read": data is loaded as-is, and structure is applied when a query or application reads it, in contrast to a data warehouse's "schema-on-write" model.
Why data lakes exist
Data lakes emerged from the Hadoop ecosystem as a low-cost way to store everything a company generates, rather than only the modeled, cleaned data that fits a warehouse. Today most data lakes live on cloud object storage (Amazon S3, Google Cloud Storage, Azure Blob Storage) instead of HDFS clusters, with data typically written as Parquet, ORC, Avro, JSON, or CSV files organized into directories.
The data swamp problem
Storing raw files cheaply is easy; keeping them usable is hard. Without governance, schema tracking, and transactional guarantees, a data lake can degrade into a "data swamp" — directories of files nobody trusts, with no atomic updates and no easy way to see what changed. This gap is what motivated table formats like Apache Iceberg, Delta Lake, and DuckLake, which add a metadata layer on top of lake files to bring ACID transactions, schema evolution, and time travel — the combination often called a "lakehouse."
Querying a data lake with DuckDB
DuckDB can query files sitting in a data lake directly, without an ETL step into a warehouse. Using the httpfs extension, it reads Parquet or CSV files straight from object storage:
Copy code
INSTALL httpfs;
LOAD httpfs;
SELECT customer_id, SUM(amount) AS total
FROM read_parquet('s3://my-data-lake/orders/*.parquet')
GROUP BY ALL;
This lets analysts explore lake data with SQL immediately, and DuckDB's hive_partitioning option automatically recognizes key=value folder structures common in lakes for partition pruning.
Related terms
A data lakehouse is an architecture that combines the low-cost, flexible storage of a data lake with the ACID transactions, schema enforcement, and performance features of a data warehouse.
Table format →A table format is a metadata layer on top of data files in a lake or object storage that defines what constitutes a table — its schema, partitioning, and file list — enabling ACID transactions, schema evolution, and time travel across multiple query engines.
Delta Lake →Delta Lake is an open table format, originally developed by Databricks, that adds ACID transactions, schema enforcement, and time travel to Parquet data stored in a data lake.
Parquet →Apache Parquet is a columnar storage file format designed for efficient data processing and analytics.
DuckLake →DuckLake is an open table format, created by the DuckDB team, that stores lakehouse metadata in a transactional SQL database instead of files — while keeping the actual data as Parquet files in object storage.
Object storage →Object storage is a data storage architecture that manages data as discrete objects — each with data, metadata, and a unique identifier — in a flat namespace, accessed over HTTP APIs rather than a traditional file system hierarchy.
FAQS
A data lake stores raw data of any type in its native format with schema applied at read time, while a data warehouse stores cleaned, structured data with a schema enforced at write time, optimized for fast SQL analytics.
No. Most modern data lakes use cloud object storage such as Amazon S3, Google Cloud Storage, or Azure Blob Storage rather than a Hadoop/HDFS cluster, paired with engines like Spark, Trino, or DuckDB to query the data.
Yes. DuckDB's httpfs extension can read Parquet, CSV, and JSON files directly from S3-compatible object storage using functions like read_parquet(), without first loading the data into a separate database.
