"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7466],{15680:(e,n,t)=>{t.d(n,{xA:()=>c,yg:()=>m});var r=t(96540);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},c=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},y=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(t),y=o,m=p["".concat(l,".").concat(y)]||p[y]||d[y]||i;return t?r.createElement(m,a(a({ref:n},c),{},{components:t})):r.createElement(m,a({ref:n},c))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=y;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var u=2;u<i;u++)a[u]=t[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}y.displayName="MDXCreateElement"},54140:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>u,toc:()=>p});var r=t(58168),o=t(98587),i=(t(96540),t(15680)),a=["components"],s={id:"distinctcount",title:"DistinctCount Aggregator"},l=void 0,u={unversionedId:"development/extensions-contrib/distinctcount",id:"development/extensions-contrib/distinctcount",title:"DistinctCount Aggregator",description:"\x3c!--",source:"@site/docs/29.0.0/development/extensions-contrib/distinctcount.md",sourceDirName:"development/extensions-contrib",slug:"/development/extensions-contrib/distinctcount",permalink:"/docs/29.0.0/development/extensions-contrib/distinctcount",draft:!1,tags:[],version:"current",frontMatter:{id:"distinctcount",title:"DistinctCount Aggregator"}},c={},p=[{value:"Timeseries query",id:"timeseries-query",level:2},{value:"TopN query",id:"topn-query",level:2},{value:"GroupBy query",id:"groupby-query",level:2}],d={toc:p},y="wrapper";function m(e){var n=e.components,t=(0,o.A)(e,a);return(0,i.yg)(y,(0,r.A)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,i.yg)("p",null,"To use this Apache Druid extension, ",(0,i.yg)("a",{parentName:"p",href:"/docs/29.0.0/configuration/extensions#loading-extensions"},"include")," the ",(0,i.yg)("inlineCode",{parentName:"p"},"druid-distinctcount")," in the extensions load list."),(0,i.yg)("p",null,"Additionally, follow these steps:"),(0,i.yg)("ol",null,(0,i.yg)("li",{parentName:"ol"},"First, use a single dimension hash-based partition spec to partition data by a single dimension. For example visitor_id. This to make sure all rows with a particular value for that dimension will go into the same segment, or this might over count."),(0,i.yg)("li",{parentName:"ol"},"Second, use distinctCount to calculate the distinct count, make sure queryGranularity is divided exactly by segmentGranularity or else the result will be wrong.")),(0,i.yg)("p",null,"There are some limitations, when used with groupBy, the groupBy keys' numbers should not exceed maxIntermediateRows in every segment. If exceeded the result will be wrong. When used with topN, numValuesPerPass should not be too big. If too big the distinctCount will use a lot of memory and might cause the JVM to go our of memory."),(0,i.yg)("p",null,"Example:"),(0,i.yg)("h2",{id:"timeseries-query"},"Timeseries query"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-json"},'{\n  "queryType": "timeseries",\n  "dataSource": "sample_datasource",\n  "granularity": "day",\n  "aggregations": [\n    {\n      "type": "distinctCount",\n      "name": "uv",\n      "fieldName": "visitor_id"\n    }\n  ],\n  "intervals": [\n    "2016-03-01T00:00:00.000/2013-03-20T00:00:00.000"\n  ]\n}\n')),(0,i.yg)("h2",{id:"topn-query"},"TopN query"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-json"},'{\n  "queryType": "topN",\n  "dataSource": "sample_datasource",\n  "dimension": "sample_dim",\n  "threshold": 5,\n  "metric": "uv",\n  "granularity": "all",\n  "aggregations": [\n    {\n      "type": "distinctCount",\n      "name": "uv",\n      "fieldName": "visitor_id"\n    }\n  ],\n  "intervals": [\n    "2016-03-06T00:00:00/2016-03-06T23:59:59"\n  ]\n}\n')),(0,i.yg)("h2",{id:"groupby-query"},"GroupBy query"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-json"},'{\n  "queryType": "groupBy",\n  "dataSource": "sample_datasource",\n  "dimensions": ["sample_dim"],\n  "granularity": "all",\n  "aggregations": [\n    {\n      "type": "distinctCount",\n      "name": "uv",\n      "fieldName": "visitor_id"\n    }\n  ],\n  "intervals": [\n    "2016-03-06T00:00:00/2016-03-06T23:59:59"\n  ]\n}\n')))}m.isMDXComponent=!0}}]);