blob: 00fcbf1a0b9df9782ed3d63c588843aa296aae69 [file] [log] [blame]
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1459],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),p=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),c=p(n),m=r,k=c["".concat(i,".").concat(m)]||c[m]||d[m]||l;return n?a.createElement(k,s(s({ref:t},u),{},{components:n})):a.createElement(k,s({ref:t},u))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,s=new Array(l);s[0]=m;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o[c]="string"==typeof e?e:r,s[1]=o;for(var p=2;p<l;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},8456:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>k,frontMatter:()=>o,metadata:()=>p,toc:()=>c});var a=n(7462),r=n(3366),l=(n(7294),n(3905)),s=["components"],o={id:"tutorial-rollup",title:"Tutorial: Roll-up",sidebar_label:"Roll-up"},i=void 0,p={unversionedId:"tutorials/tutorial-rollup",id:"tutorials/tutorial-rollup",title:"Tutorial: Roll-up",description:"\x3c!--",source:"@site/docs/latest/tutorials/tutorial-rollup.md",sourceDirName:"tutorials",slug:"/tutorials/tutorial-rollup",permalink:"/docs/latest/tutorials/tutorial-rollup",draft:!1,tags:[],version:"current",frontMatter:{id:"tutorial-rollup",title:"Tutorial: Roll-up",sidebar_label:"Roll-up"},sidebar:"docs",previous:{title:"Querying data",permalink:"/docs/latest/tutorials/tutorial-query"},next:{title:"Theta sketches",permalink:"/docs/latest/tutorials/tutorial-sketches-theta"}},u={},c=[{value:"Example data",id:"example-data",level:2},{value:"Load the example data",id:"load-the-example-data",level:2},{value:"Query the example data",id:"query-the-example-data",level:2}],d={toc:c},m="wrapper";function k(e){var t=e.components,n=(0,r.Z)(e,s);return(0,l.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,'Apache Druid can summarize raw data at ingestion time using a process we refer to as "roll-up". Roll-up is a first-level aggregation operation over a selected set of columns that reduces the size of stored data.'),(0,l.kt)("p",null,"This tutorial will demonstrate the effects of roll-up on an example dataset."),(0,l.kt)("p",null,"For this tutorial, we'll assume you've already downloaded Druid as described in\nthe ",(0,l.kt)("a",{parentName:"p",href:"/docs/latest/tutorials/"},"single-machine quickstart")," and have it running on your local machine."),(0,l.kt)("p",null,"It will also be helpful to have finished ",(0,l.kt)("a",{parentName:"p",href:"/docs/latest/tutorials/tutorial-batch"},"Tutorial: Loading a file")," and ",(0,l.kt)("a",{parentName:"p",href:"/docs/latest/tutorials/tutorial-query"},"Tutorial: Querying data"),"."),(0,l.kt)("h2",{id:"example-data"},"Example data"),(0,l.kt)("p",null,"For this tutorial, we'll use a small sample of network flow event data, representing packet and byte counts for traffic from a source to a destination IP address that occurred within a particular second."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024}\n{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133}\n{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780}\n{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289}\n{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971}\n{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204}\n{"timestamp":"2018-01-02T21:33:14Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":38,"bytes":6289}\n{"timestamp":"2018-01-02T21:33:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":123,"bytes":93999}\n{"timestamp":"2018-01-02T21:35:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":12,"bytes":2818}\n')),(0,l.kt)("p",null,"A file containing this sample input data is located at ",(0,l.kt)("inlineCode",{parentName:"p"},"quickstart/tutorial/rollup-data.json"),"."),(0,l.kt)("p",null,"We'll ingest this data using the following ingestion task spec, located at ",(0,l.kt)("inlineCode",{parentName:"p"},"quickstart/tutorial/rollup-index.json"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "type" : "index_parallel",\n "spec" : {\n "dataSchema" : {\n "dataSource" : "rollup-tutorial",\n "dimensionsSpec" : {\n "dimensions" : [\n "srcIP",\n "dstIP"\n ]\n },\n "timestampSpec": {\n "column": "timestamp",\n "format": "iso"\n },\n "metricsSpec" : [\n { "type" : "count", "name" : "count" },\n { "type" : "longSum", "name" : "packets", "fieldName" : "packets" },\n { "type" : "longSum", "name" : "bytes", "fieldName" : "bytes" }\n ],\n "granularitySpec" : {\n "type" : "uniform",\n "segmentGranularity" : "week",\n "queryGranularity" : "minute",\n "intervals" : ["2018-01-01/2018-01-03"],\n "rollup" : true\n }\n },\n "ioConfig" : {\n "type" : "index_parallel",\n "inputSource" : {\n "type" : "local",\n "baseDir" : "quickstart/tutorial",\n "filter" : "rollup-data.json"\n },\n "inputFormat" : {\n "type" : "json"\n },\n "appendToExisting" : false\n },\n "tuningConfig" : {\n "type" : "index_parallel",\n "partitionsSpec": {\n "type": "dynamic"\n },\n "maxRowsInMemory" : 25000\n }\n }\n}\n')),(0,l.kt)("p",null,"Roll-up has been enabled by setting ",(0,l.kt)("inlineCode",{parentName:"p"},'"rollup" : true')," in the ",(0,l.kt)("inlineCode",{parentName:"p"},"granularitySpec"),"."),(0,l.kt)("p",null,"Note that we have ",(0,l.kt)("inlineCode",{parentName:"p"},"srcIP")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"dstIP")," defined as dimensions, a longSum metric is defined for the ",(0,l.kt)("inlineCode",{parentName:"p"},"packets")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"bytes")," columns, and the ",(0,l.kt)("inlineCode",{parentName:"p"},"queryGranularity")," has been defined as ",(0,l.kt)("inlineCode",{parentName:"p"},"minute"),"."),(0,l.kt)("p",null,"We will see how these definitions are used after we load this data."),(0,l.kt)("h2",{id:"load-the-example-data"},"Load the example data"),(0,l.kt)("p",null,"From the apache-druid-{{DRUIDVERSION}} package root, run the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"bin/post-index-task --file quickstart/tutorial/rollup-index.json --url http://localhost:8081\n")),(0,l.kt)("p",null,"After the script completes, we will query the data."),(0,l.kt)("h2",{id:"query-the-example-data"},"Query the example data"),(0,l.kt)("p",null,"Let's run ",(0,l.kt)("inlineCode",{parentName:"p"},"bin/dsql")," and issue a ",(0,l.kt)("inlineCode",{parentName:"p"},'select * from "rollup-tutorial";')," query to see what data was ingested."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'$ bin/dsql\nWelcome to dsql, the command-line client for Druid SQL.\nType "\\h" for help.\ndsql> select * from "rollup-tutorial";\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 __time \u2502 bytes \u2502 count \u2502 dstIP \u2502 packets \u2502 srcIP \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2018-01-01T01:01:00.000Z \u2502 35937 \u2502 3 \u2502 2.2.2.2 \u2502 286 \u2502 1.1.1.1 \u2502\n\u2502 2018-01-01T01:02:00.000Z \u2502 366260 \u2502 2 \u2502 2.2.2.2 \u2502 415 \u2502 1.1.1.1 \u2502\n\u2502 2018-01-01T01:03:00.000Z \u2502 10204 \u2502 1 \u2502 2.2.2.2 \u2502 49 \u2502 1.1.1.1 \u2502\n\u2502 2018-01-02T21:33:00.000Z \u2502 100288 \u2502 2 \u2502 8.8.8.8 \u2502 161 \u2502 7.7.7.7 \u2502\n\u2502 2018-01-02T21:35:00.000Z \u2502 2818 \u2502 1 \u2502 8.8.8.8 \u2502 12 \u2502 7.7.7.7 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\nRetrieved 5 rows in 1.18s.\n\ndsql>\n')),(0,l.kt)("p",null,"Let's look at the three events in the original input data that occurred during ",(0,l.kt)("inlineCode",{parentName:"p"},"2018-01-01T01:01"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024}\n{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133}\n{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780}\n')),(0,l.kt)("p",null,'These three rows have been "rolled up" into the following row:'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 __time \u2502 bytes \u2502 count \u2502 dstIP \u2502 packets \u2502 srcIP \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2018-01-01T01:01:00.000Z \u2502 35937 \u2502 3 \u2502 2.2.2.2 \u2502 286 \u2502 1.1.1.1 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n")),(0,l.kt)("p",null,"The input rows have been grouped by the timestamp and dimension columns ",(0,l.kt)("inlineCode",{parentName:"p"},"{timestamp, srcIP, dstIP}")," with sum aggregations on the metric columns ",(0,l.kt)("inlineCode",{parentName:"p"},"packets")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"bytes"),"."),(0,l.kt)("p",null,"Before the grouping occurs, the timestamps of the original input data are bucketed/floored by minute, due to the ",(0,l.kt)("inlineCode",{parentName:"p"},'"queryGranularity":"minute"')," setting in the ingestion spec."),(0,l.kt)("p",null,"Likewise, these two events that occurred during ",(0,l.kt)("inlineCode",{parentName:"p"},"2018-01-01T01:02")," have been rolled up:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289}\n{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 __time \u2502 bytes \u2502 count \u2502 dstIP \u2502 packets \u2502 srcIP \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2018-01-01T01:02:00.000Z \u2502 366260 \u2502 2 \u2502 2.2.2.2 \u2502 415 \u2502 1.1.1.1 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n")),(0,l.kt)("p",null,"For the last event recording traffic between 1.1.1.1 and 2.2.2.2, no roll-up took place, because this was the only event that occurred during ",(0,l.kt)("inlineCode",{parentName:"p"},"2018-01-01T01:03"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 __time \u2502 bytes \u2502 count \u2502 dstIP \u2502 packets \u2502 srcIP \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2018-01-01T01:03:00.000Z \u2502 10204 \u2502 1 \u2502 2.2.2.2 \u2502 49 \u2502 1.1.1.1 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n")),(0,l.kt)("p",null,"Note that the ",(0,l.kt)("inlineCode",{parentName:"p"},"count"),' metric shows how many rows in the original input data contributed to the final "rolled up" row.'))}k.isMDXComponent=!0}}]);