Open table formats are inevitable for analytical datasets
ensembleanalytics.io
ensembleanalytics.io
1: Separating storage and compute tends to result in relatively high startup latency (Databricks, here's looking at you!) when you have to provision new compute. For a massive batch job, waiting 10 minutes for a cluster to come up is fine, but a lot of orgs don't realize the cost implications and end up with tiny developer/analyst clusters, or aggressively spin inactive clusters down, which results in long wait times. Analyst/developer ergonomics have not traditionally been a major concern in the big data space.
1.5: Dealing with multiple files instead of a data warehouse SQL interface requires work, and can introduce interesting performance issues. Obviously you can put a SQL interface in front of the data, but most RDBMS / Data Warehouses have a lot of functionality around maintaining your data that you may not get with the native file format, so you get soft-locked into the metadata format that comes from your data lake file format. It's all open, so this is only a half issue, but there are switching costs.
I see a lot of companies that get sold on Databricks and then are surprised by the cost.
Make that 2.5. If you are building new analytic products the most significant issue is that 90% of the information in data lakes is already there and not in an open format like Iceberg. Instead, it's heaps of CSV and Parquet files, maybe in Hive format but maybe just named in some unique way. If your query engine can't read these it's like being all dressed up with no place to go.
They're not good structured table formats, but they are open compared to the binary storage you get with Oracle or Snowflake.
There are many other competitive query engines that do not suffer from the startup latency.
I’m glad it’s had an uptick in interest recently but I haven’t yet seen it mentioned for analytics yet.
I assume it’s row rather than column oriented?
But it doesn't rely on the JVM and a typical JVM ecosystem. It is a big benefit for some use-cases, like dealing with numerical data on the edge.
It seems to be a bit early to rely on it to store data in an object store, but I will do some tests to compare with SQLite:
> The DuckDB internal storage format is currently in flux, and is expected to change with each release until we reach v1.0.0.
These other formats easily support using clusters to process your data.
You could store your data in a SQLite database, but that's not really interoperable in the way a bunch of Parquet files are. Source: tried it.
I know this because I needed this functionality in Ada code, which links statically with SQLite, and I didn't want to also link with PCRE library just to get regexp(), especially since GNATCOLL already, sort of has regexp... except it doesn't have the "fancy" features, s.a. lookaheads / lookbehinds / Unicode support etc.
So, a table that uses regexp() in its constraint definition isn't portable. But, if you only use the table data without the schema you lose a lot of valuable information...
----
Also, come to think about it: unlike server-client databases (eg. MySQL, PostgreSQL etc) SQLite doesn't have a wire-transfer format. Its interface returns values in the way C language understands them. The on-disk binary format isn't at all designed for transfer because it's optimized for access efficiency. This, beside other things, results in SQLite database file typically having tons of empty space, it doesn't use efficient (compressed) value representation etc.
So, trying to use SQLite format for transferring data isn't going to be a good arrangement. It's going to be wasteful and slow.
Iceberg and Sqlite might be interesting if you wanted to colocate two tables in the same file, for example. A smart enough data access layer with an appropriate execution engine could possibly see the data for both.
Here is a more technical deep dive comparing the three main open formats - https://www.onehouse.ai/blog/apache-hudi-vs-delta-lake-vs-ap...
https://docs.aws.amazon.com/redshift/latest/dg/querying-iceb...
I've been dabbling with implementing a database, and adopting a format would be much easier.
https://www.onehouse.ai/blog/apache-hudi-vs-delta-lake-vs-ap...
It'd be great to agree on some nomenclature. Neither are very descriptive (or simple) in my view.
A lakehouse would be a collection of tables.
There would be some SQL engine such as Trino, Databricks, ClickHouse brokering access to these tables.
The lakehouse might be organised into layers of tables where we have raw, intermediate, processed tables.
The concept of a lakehouse doesn’t really work if you don’t have transactions and updates, which these table formats enable.
I always say, Lakehouse is a stupid name but an amazing concept and I’m sure the data industry will go this way.
I ask because, if I didn't know either word, the one would mean, to me, "tiny storage next to a big body of data" and the other would mean "a big body of data".
Thank you for that. Do you have any suggestions on where one would start if they wanted to get a better idea and/or some experience using lakehouses?
Data Lakehouse involves adding things like the ability to query via SQL, the ability to update/insert/delete, transactions.
Where before people needed warehouses for BI and lakes for data science, they can now have only one approach.
It’s likely to be a big trend as data moves to this format and arrangement and the DBMS vendors like Snowflake have to play nicely with it.
This is all very interesting, and thank you for taking the time to explain. Any good starting points for someone who would like to know more?
It’s a technology independent pattern though.
It's not only the names, but something like 98% of the tools too, that suck.
1. Snowflake has always used blob stores + file data + metadata. Architecturally it’s actually always been very Lakehouse-y
2. Parquet and Iceberg should be equivalent in performance and features. It’s more than playing nicely - it’s more choose your own adventure where all things are equal.
Databricks (with Delta as the underpinning) seems to have lead the charge of lakehouse meaning, your data lake+file formats/helpers+compute==data lake+datawarehouse==lakehouse.
The latter seems to be the prevailing definition today with the former aging in place.