"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9503],{15680:(e,r,n)=>{n.d(r,{xA:()=>c,yg:()=>f});var t=n(96540);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function a(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?i(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function s(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},i=Object.keys(e);for(t=0;t<i.length;t++)n=i[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)n=i[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=t.createContext({}),l=function(e){var r=t.useContext(u),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},c=function(e){var r=l(e.components);return t.createElement(u.Provider,{value:r},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},y=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(n),y=o,f=p["".concat(u,".").concat(y)]||p[y]||d[y]||i;return n?t.createElement(f,a(a({ref:r},c),{},{components:n})):t.createElement(f,a({ref:r},c))}));function f(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=y;var s={};for(var u in r)hasOwnProperty.call(r,u)&&(s[u]=r[u]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var l=2;l<i;l++)a[l]=n[l];return t.createElement.apply(null,a)}return t.createElement.apply(null,n)}y.displayName="MDXCreateElement"},96118:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>u,default:()=>f,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=n(58168),o=n(98587),i=(n(96540),n(15680)),a=["components"],s={id:"joins",title:"Joins"},u=void 0,l={unversionedId:"querying/joins",id:"querying/joins",title:"Joins",description:"\x3c!--",source:"@site/docs/29.0.0/querying/joins.md",sourceDirName:"querying",slug:"/querying/joins",permalink:"/docs/29.0.0/querying/joins",draft:!1,tags:[],version:"current",frontMatter:{id:"joins",title:"Joins"},sidebar:"docs",previous:{title:"Datasources",permalink:"/docs/29.0.0/querying/datasource"},next:{title:"Lookups",permalink:"/docs/29.0.0/querying/lookups"}},c={},p=[],d={toc:p},y="wrapper";function f(e){var r=e.components,n=(0,o.A)(e,a);return(0,i.yg)(y,(0,t.A)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,i.yg)("p",null,"Apache Druid has two features related to joining of data:"),(0,i.yg)("ol",null,(0,i.yg)("li",{parentName:"ol"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/datasource#join"},"Join")," operators. These are available using a ",(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/datasource#join"},"join datasource")," in native\nqueries, or using the ",(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/sql"},"JOIN operator")," in Druid SQL. Refer to the\n",(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/datasource#join"},"join datasource")," documentation for information about how joins work in Druid native queries,\nor the ",(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/multi-stage-query/reference#joins"},"multi-stage query join documentation")," for information about how joins\nwork in multi-stage query tasks."),(0,i.yg)("li",{parentName:"ol"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/lookups"},"Query-time lookups"),", simple key-to-value mappings. These are preloaded on all servers that are involved\nin queries and can be accessed with or without an explicit join operator. Refer to the ",(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/querying/lookups"},"lookups"),"\ndocumentation for more details.")),(0,i.yg)("p",null,"Whenever possible, for best performance it is good to avoid joins at query time. Often this can be accomplished by\njoining data before it is loaded into Druid. However, there are situations where joins or lookups are the best solution\navailable despite the performance overhead, including:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},"The fact-to-dimension (star and snowflake schema) case: you need to change dimension values after initial ingestion,\nand aren't able to reingest to do this. In this case, you can use lookups for your dimension tables."),(0,i.yg)("li",{parentName:"ul"},"Your workload requires joins or filters on subqueries.")))}f.isMDXComponent=!0}}]);