"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4851],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(7294);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"},4335:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>u,toc:()=>p});var r=n(7462),o=n(3366),i=(n(7294),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/latest/development/extensions-contrib/distinctcount.md",sourceDirName:"development/extensions-contrib",slug:"/development/extensions-contrib/distinctcount",permalink:"/docs/latest/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/latest/development/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}}]);