"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1111],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),m=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=m(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=m(a),d=r,f=u["".concat(l,".").concat(d)]||u[d]||c[d]||i;return a?n.createElement(f,o(o({ref:t},p),{},{components:a})):n.createElement(f,o({ref:t},p))}));function f(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,o[1]=s;for(var m=2;m<i;m++)o[m]=a[m];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},4862:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>m,toc:()=>u});var n=a(7462),r=a(3366),i=(a(7294),a(3905)),o=["components"],s={id:"data-model",title:"Druid data model",sidebar_label:"Data model",description:"Introduces concepts of datasources, primary timestamp, dimensions, and metrics."},l=void 0,m={unversionedId:"ingestion/data-model",id:"ingestion/data-model",title:"Druid data model",description:"Introduces concepts of datasources, primary timestamp, dimensions, and metrics.",source:"@site/docs/26.0.0/ingestion/data-model.md",sourceDirName:"ingestion",slug:"/ingestion/data-model",permalink:"/docs/26.0.0/ingestion/data-model",draft:!1,tags:[],version:"current",frontMatter:{id:"data-model",title:"Druid data model",sidebar_label:"Data model",description:"Introduces concepts of datasources, primary timestamp, dimensions, and metrics."},sidebar:"docs",previous:{title:"Data formats",permalink:"/docs/26.0.0/ingestion/data-formats"},next:{title:"Data rollup",permalink:"/docs/26.0.0/ingestion/rollup"}},p={},u=[{value:"Primary timestamp",id:"primary-timestamp",level:2},{value:"Dimensions",id:"dimensions",level:2},{value:"Metrics",id:"metrics",level:2}],c={toc:u},d="wrapper";function f(e){var t=e.components,a=(0,r.Z)(e,o);return(0,i.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Druid stores data in datasources, which are similar to tables in a traditional relational database management system (RDBMS). Druid's data model shares  similarities with both relational and timeseries data models."),(0,i.kt)("h2",{id:"primary-timestamp"},"Primary timestamp"),(0,i.kt)("p",null,"Druid schemas must always include a primary timestamp. Druid uses the primary timestamp to ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/partitioning"},"partition and sort")," your data. Druid uses the primary timestamp to rapidly identify and retrieve data within the time range of queries. Druid also uses the primary timestamp column\nfor time-based ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/data-management/"},"data management operations")," such as dropping time chunks, overwriting time chunks, and time-based retention rules."),(0,i.kt)("p",null,"Druid parses the primary timestamp based on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/ingestion-spec#timestampspec"},(0,i.kt)("inlineCode",{parentName:"a"},"timestampSpec"))," configuration at ingestion time. Regardless of the source field for the primary timestamp, Druid always stores the timestamp in the ",(0,i.kt)("inlineCode",{parentName:"p"},"__time")," column in your Druid datasource."),(0,i.kt)("p",null,"You can control other important operations that are based on the primary timestamp in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/ingestion-spec#granularityspec"},(0,i.kt)("inlineCode",{parentName:"a"},"granularitySpec")),". If you have more than one timestamp column, you can store the others as\n",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/schema-design#secondary-timestamps"},"secondary timestamps"),"."),(0,i.kt)("h2",{id:"dimensions"},"Dimensions"),(0,i.kt)("p",null,'Dimensions are columns that Druid stores "as-is". You can use dimensions for any purpose. For example, you can group, filter, or apply aggregators to dimensions at query time when necessary.'),(0,i.kt)("p",null,"If you disable ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/rollup"},"rollup"),", then Druid treats the set of\ndimensions like a set of columns to ingest. The dimensions behave exactly as you would expect from any database that does not support a rollup feature."),(0,i.kt)("p",null,"At ingestion time, you configure dimensions in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/ingestion-spec#dimensionsspec"},(0,i.kt)("inlineCode",{parentName:"a"},"dimensionsSpec")),"."),(0,i.kt)("h2",{id:"metrics"},"Metrics"),(0,i.kt)("p",null,"Metrics are columns that Druid stores in an aggregated form. Metrics are most useful when you enable ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/rollup"},"rollup"),". If you specify a metric, you can apply an aggregation function to each row during ingestion. This\nhas the following benefits:"),(0,i.kt)("p",null,'Rollup is a form of aggregation that collapses dimensions while aggregating the values in the metrics, that is, it collapses rows but retains its summary information."'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/rollup"},"Rollup")," is a form of aggregation that combines multiple rows with the same timestamp value and dimension values. For example, the ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/tutorials/tutorial-rollup"},"rollup tutorial")," demonstrates using rollup to collapse netflow data to a single row per ",(0,i.kt)("inlineCode",{parentName:"p"},"(minute, srcIP, dstIP)")," tuple, while retaining aggregate information about total packet and byte counts.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Druid can compute some aggregators, especially approximate ones, more quickly at query time if they are partially computed at ingestion time, including data that has not been rolled up."),(0,i.kt)("p",{parentName:"li"},"At ingestion time, you configure Metrics in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/ingestion-spec#metricsspec"},(0,i.kt)("inlineCode",{parentName:"a"},"metricsSpec")),"."))))}f.isMDXComponent=!0}}]);