gazpacho
Joined 4 years ago
Joined 4 years ago
The article doesn't claim to have made some huge discovery, it tells the journey of making our product / system much better by applying well known techniques. We linked to similar things (ClickHouse's handling of semi structured data, Parquet's Variant type). There are others (e.g. BigQuery). I'm sure there's some system that did similar things before (if you have a reference I'd be interested in learning the history here) but all of the ones I mentioned above are from 2022+.
But besides that I think your comment misses the entire point of the article: how do you normalize semi-structured data that varies in schema vastly across tenants, within those tenants between those systems and drifts over time rather rapidly? There is no schema to pick and normalize to.
Hi, author here.
I agree this is not some huge discovery. We link ClickHouse's JSON type and Parquet Variant in the post, and Snowflake's VARIANT and BigQuery do similar things. We didn't mean to present it as a discovery. The post is about how we applied it to our system.
The part normalization doesn't answer for us, as guites said in this thread, is that there's no schema to normalize to. Every tenant sends different OpenTelemetry attributes, different services within a tenant send different ones, and they change from week to week. Picking a fixed set of columns is what we tried first (we call it static shredding in the post). So each Parquet file now picks its own columns from the data it contains, without any configuration.
I know in the database world we are often recycling or tweaking ideas from decades ago so if you know where these ideas for handling semi-structured data in columnar databases comes from I'd be interested to learn!
In our case it's more than that: the data is dynamically changing, constantly, across tenants, across their data streams and across time.
What we're talking about here is basically dynamically creating a table structure from semi-structured data. It's not about "we don't know what the right columns are", it's about "there are no universally right columns, but there are some better and some worse ones within the bounded confines of some finite amount of data".
But yes, what's old is new. I didn't mean to claim we invented this technique. I actually cited ClickHouse's article (https://clickhouse.com/blog/a-new-powerful-json-data-type-fo... in the article) in the post :
> Our shredded data layout predates both the Parquet Variant type and ClickHouse's JSON support but is very similar to these approaches.
I said _predates_ based on when the article I cited came out, but based on your linked PR it sounds you landed it earlier than I thought, I'll remove the wording. I'm not sure where we originally got the idea from or where it comes from, I recall hearing the Databricks and BigQuery folks sharing similar ideas around the same time. Do you recall where the idea originated / where did you first see it? Happy to include that in the article!
Most of our work went into making the technique work w/ Parquet in object storage queried with DataFusion. We had to rewrite big chunks of the Parquet scanning machinery, filter pushdown optimizers, etc.
Long term we're going to move a lot of this to the now "standard" Variant data type, which we are partially responsible for bringing into the Rust / DataFusion ecosystem.
In practice we do both: we have key presence indexes and zone maps on shredded and unshredded values. Then we go an grab the data and if it's shredded it's going to be faster to grab even once we know where it is.
Modern society is too narrow minded about what wealth means. To most people it means fancy watches, cars, homes, etc. To me wealth is about time and freedom. I can pick up the tab at dinner for a group of 12. I can afford to keep my 1972 Schwinn bicycle in tip top shape or my grandfather's jacket mended when it breaks. I can afford to rent forever if I want. I'll never work a job I don't like, I can just quit. I feel more wealthy this way than if I owned 3 lambos and had to work to make ends meet.
I like to do a weight training as the consistent foundation, with a mix of heavy lifts, calisthenics, volume (bodybuilding) training and mobility training. Add in some yoga, rock climbing, biking, soccer. I feel this sort of mix balances movements out which helps with injury prevention and also makes sure you always have something active to do that you enjoy, which is definitely #1.