Dremel, as the root of later developed Apache Hive, Cloudera Impala, and Apache Drill, was designed for interactive analysis of web-scale datasets. It's designed to cope with the need of efficient analysis of large scale data. Dremel uses columar storage representation for nested data. But this brings challenge of efficient reassembly of record from this column layout. Dremel solves this by using a Finite State Machine.
|Published (Last):||20 May 2005|
|PDF File Size:||12.28 Mb|
|ePub File Size:||16.83 Mb|
|Price:||Free* [*Free Regsitration Required]|
Dremel: interactive analysis of web-scale datasets — Melnik et al. Google , It scales to thousands of CPUs, and petabytes of data. It was also the inspiration for Apache Drill. Dremel borrows the idea of serving trees from web search pushing a query down a tree hierarchy, rewriting it at each level and aggregating the results on the way back up. It uses a SQL-like language for query, and it uses a column-striped storage representation.
Column stores have been adopted for analyzing relational data  but to the best of our knowledge have not been extended to nested data models. The columnar storage format that we present is supported by many data processing tools at Google, including MR, Sawzall, and FlumeJava.
Notice a few things about this: there are repeated and optional components, and there is nesting. The first part of splitting this into columns is pretty straight-forward: make a column for each field, using the nested path names.
So, for the schema above we have columns DocId, Links. Backward, Links. Forward, Name. Code, Name. Country, and Name. Focusing in on the Name.
Code column we need a way to know whether a given entry is a repeated entry from the current Document, or the start of a new Document. And if it is repeated, where does it belong in the nesting structure? Dremel solves these problems by keeping three pieces of data for every column entry: the value itself, a repetition level, and a definition level. Take a good look at the sketch below from my notebook. It shows a Document record that we want to split into columns, and to the right, the column entries that result within the Name.
Code column — where r represents the repetition level, and d the definition level. The first problem we mentioned was how to tell whether an entry is the start of a new Document, or another entry for the same column within the current Document. For the nesting Name. Code, Name is level 1, Language is level 2, and Code is level 3.
Still with me? And that NULL value you see in the column? Code value at all. Intuitively you might think this is just the nesting level in the schema so 1 for DocId, 2 for Links. Forward, 3 for Name. Code etc. Instead, the definition level indicates how many of the parent fields are actually defined.
This is easier to understand by example. Therefore this gets definition level 1. It turns out that by encoding these repitition and definition levels alongside the column value, it is possible to split records into columns, and subsequently re-assemble them efficiently.
The algorithms for doing this are given in an appendix to the paper. Record assembly is pretty neat — for the subset of the fields the query is interested in, a Finite State Machine is generated with state transitions triggered by changes in repetition level. It sounds odd to say you want the results of a query without looking at all of the data — but consider for example a top-k query. You are commenting using your WordPress.
You are commenting using your Google account. You are commenting using your Twitter account. You are commenting using your Facebook account. Notify me of new comments via email. Notify me of new posts via email. This site uses Akismet to reduce spam. Learn how your comment data is processed.
Skip to content Dremel: interactive analysis of web-scale datasets — Melnik et al. Near-linear scalability in the number of columns and servers is achievable for systems containing thousands of nodes. Record assembly and parsing are expensive. Software layers beyond the query processing layer need to be optimized to directly consume column-oriented data. In a multi-user environment, a larger system can benefit from economies of scale while offering a qualitatively better user experience.
Splitting the work into more parallel pieces reduced overall response time, without causing more underlying resource, e. CPU, consumption If trading speed against accuracy is acceptable, a query can be terminated much earlier and yet see most of the data. The bulk of a web-scale dataset can be scanned fast. Getting to the last few percent within tight time bounds is hard.
Like this: Like Loading Pingback: Procella: unifying serving and analytical data at YouTube — the morning paper. Leave a Reply Cancel reply Enter your comment here Fill in your details below or click an icon to log in:. Email required Address never made public. Name required. Post to Cancel. Post was not sent - check your email addresses! Sorry, your blog cannot share posts by email.
Review of "Dremel: Interactive Analysis of Web-Scale Datasets"
Dremel: Interactive Analysis of Web-Scale Datasets
Dremel: interactive analysis of web-scale datasets