"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1967],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,y=p["".concat(l,".").concat(m)]||p[m]||d[m]||i;return n?r.createElement(y,a(a({ref:t},c),{},{components:n})):r.createElement(y,a({ref:t},c))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var u=2;u<i;u++)a[u]=n[u];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},35788:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>u,toc:()=>p});var r=n(87462),o=n(63366),i=(n(67294),n(3905)),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/28.0.1/development/extensions-contrib/distinctcount.md",sourceDirName:"development/extensions-contrib",slug:"/development/extensions-contrib/distinctcount",permalink:"/docs/28.0.1/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},m="wrapper";function y(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)(m,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"To use this Apache Druid extension, ",(0,i.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/extensions#loading-extensions"},"include")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"druid-distinctcount")," in the extensions load list."),(0,i.kt)("p",null,"Additionally, follow these steps:"),(0,i.kt)("ol",null,(0,i.kt)("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.kt)("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.kt)("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.kt)("p",null,"Example:"),(0,i.kt)("h2",{id:"timeseries-query"},"Timeseries query"),(0,i.kt)("pre",null,(0,i.kt)("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.kt)("h2",{id:"topn-query"},"TopN query"),(0,i.kt)("pre",null,(0,i.kt)("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.kt)("h2",{id:"groupby-query"},"GroupBy query"),(0,i.kt)("pre",null,(0,i.kt)("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')))}y.isMDXComponent=!0}}]);