The lakehouse concept is straightforward: combine the best features of data warehouses and data lakes while eliminating their primary drawbacks.
Data Warehouse (DWH)Typically built on RDBMS with ACID transaction support, these systems are designed for structured (tabular) data queried via SQL.
The Drawbacks: High TCO; storage and compute are tightly coupled. While some databases support linear scaling, it is usually limited to symmetric nodes. In practice, there is a practical ceiling on the number of concurrent users and cluster scaling, after which it becomes more efficient to spin up an entirely new cluster. Furthermore, DWHs struggle with unstructured data (logs, images, video, audio) and real-time streaming analytics.
Data LakeData lakes emerged to solve the high cost of DWH storage and processing, allowing companies to store massive datasets in any format at a significantly lower cost.
Initially, compute engineers had to write complex distributed code using various frameworks. This approach was too technical for analysts and business users. The need to lower the barrier to entry and accelerate processing led to the development of alternative engines, including SQL-on-Hadoop. Thanks to the maturity of the data lake ecosystem, we now have a choice of powerful engines like Spark, Trino, and Impala—the compute backbone of the modern lakehouse.
In addition to traditional batch processing, demand grew for tools capable of handling continuous data streams with low latency and delivery guarantees. This led to the rise of Spark Streaming, Flink, and other stream-processing tools.
The Drawbacks: A major issue was table updates. Consumers often received inconsistent data if an update process was ongoing or failed mid-way.
LakehouseOpen Table Formats (OTF) solved the update problem by introducing ACID guarantees at the table level. These open formats ensure compatibility across various tools. Today, the Apache Iceberg format is supported by most compute engines for reading, with many also supporting writes and updates.
The separation of storage and compute is now an architectural cornerstone rather than an optional feature. This provides several strategic advantages:
- Independent Scaling: Scale storage or compute independently based on specific needs.
- Storage Flexibility: Choose the storage option that best fits your requirements, whether cloud-native (S3/ADLS/GCS), on-premises, or hybrid.
- Task-Specific Compute: Select the engine best suited for the job (batch/streaming, ad-hoc/ELT).
- Multi-Engine Concurrency: Run multiple compute engines simultaneously.
- Resource Efficiency: Spin up, scale, or shut down compute clusters as needed.