"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1533],{15680:(e,r,t)=>{t.d(r,{xA:()=>u,yg:()=>d});var n=t(96540);function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?a(Object(t),!0).forEach((function(r){i(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function s(e,r){if(null==e)return{};var t,n,i=function(e,r){if(null==e)return{};var t,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||(i[t]=e[t]);return i}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=n.createContext({}),c=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):o(o({},r),e)),t},u=function(e){var r=c(e.components);return n.createElement(l.Provider,{value:r},e.children)},p="mdxType",y={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},g=n.forwardRef((function(e,r){var t=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(t),g=i,d=p["".concat(l,".").concat(g)]||p[g]||y[g]||a;return t?n.createElement(d,o(o({ref:r},u),{},{components:t})):n.createElement(d,o({ref:r},u))}));function d(e,r){var t=arguments,i=r&&r.mdxType;if("string"==typeof e||i){var a=t.length,o=new Array(a);o[0]=g;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[p]="string"==typeof e?e:i,o[1]=s;for(var c=2;c<a;c++)o[c]=t[c];return n.createElement.apply(null,o)}return n.createElement.apply(null,t)}g.displayName="MDXCreateElement"},64881:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var n=t(58168),i=t(98587),a=(t(96540),t(15680)),o=["components"],s={id:"query-processing",title:"Query processing"},l=void 0,c={unversionedId:"querying/query-processing",id:"querying/query-processing",title:"Query processing",description:"\x3c!--",source:"@site/docs/latest/querying/query-processing.md",sourceDirName:"querying",slug:"/querying/query-processing",permalink:"/docs/latest/querying/query-processing",draft:!1,tags:[],version:"current",frontMatter:{id:"query-processing",title:"Query processing"},sidebar:"docs",previous:{title:"Native queries",permalink:"/docs/latest/querying/"},next:{title:"Query execution",permalink:"/docs/latest/querying/query-execution"}},u={},p=[{value:"Learn more",id:"learn-more",level:2}],y={toc:p},g="wrapper";function d(e){var r=e.components,t=(0,i.A)(e,o);return(0,a.yg)(g,(0,n.A)({},y,t,{components:r,mdxType:"MDXLayout"}),(0,a.yg)("p",null,"This topic provides a high-level overview of how Apache Druid distributes and processes queries."),(0,a.yg)("p",null,"The general flow is as follows:"),(0,a.yg)("ol",null,(0,a.yg)("li",{parentName:"ol"},"A query enters the ",(0,a.yg)("a",{parentName:"li",href:"/docs/latest/design/broker"},"Broker")," service, which identifies the segments with data that may pertain to that query. The list of segments is always pruned by time, and may also be pruned by other attributes depending on how the datasource is partitioned."),(0,a.yg)("li",{parentName:"ol"},"The Broker identifies which ",(0,a.yg)("a",{parentName:"li",href:"/docs/latest/design/historical"},"Historical")," and ",(0,a.yg)("a",{parentName:"li",href:"/docs/latest/design/middlemanager"},"MiddleManager")," services are serving those segments and distributes a rewritten subquery to each of the services."),(0,a.yg)("li",{parentName:"ol"},"The Historical and MiddleManager services execute each subquery and return results to the Broker."),(0,a.yg)("li",{parentName:"ol"},"The Broker merges the partial results to get the final answer, which it returns to the original caller.")),(0,a.yg)("p",null,"Druid uses time and attribute pruning to minimize the data it must scan for each query."),(0,a.yg)("p",null,"For filters that are more precise than what the Broker uses for pruning, the ",(0,a.yg)("a",{parentName:"p",href:"/docs/latest/design/storage#indexing-and-handoff"},"indexing structures")," inside each segment allow Historical services to identify matching rows before accessing the data. Once the Historical service knows which rows match a particular query, it only accesses the requires rows and columns."),(0,a.yg)("p",null,"To maximize query performance, Druid uses the following techniques:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},"Pruning the set of segments accessed for a query."),(0,a.yg)("li",{parentName:"ul"},"Within each segment, using indexes to identify which rows must be accessed."),(0,a.yg)("li",{parentName:"ul"},"Within each segment, only reading the specific rows and columns that are relevant to a particular query.")),(0,a.yg)("h2",{id:"learn-more"},"Learn more"),(0,a.yg)("p",null,"See the following topic for more information:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("a",{parentName:"li",href:"/docs/latest/querying/query-execution"},"Query execution")," to learn how Druid services process query statements.")))}d.isMDXComponent=!0}}]);