# Data Views

Contents

* [Data Views](https://docs.hostedgraphite.com/additional-features/data-views)
  * [Example Usage](#example-usage)
  * [Comparison to StatsD](#comparison-to-statsd)
  * [Percentile Views](#percentile-views)
  * [Data Views and Graphite Functions](#data-views-and-graphite-functions)

The different views we keep by default for all our graphite metrics are:

* **:avg** \
  (default view) Average of datapoints received during the timeframe of the current graph resolution.
* **:sum** \
  Sum of datapoints received during the timeframe of the current graph resolution. This changes depending on the zoom level. Using ":sum" on a graph with datapoints drawn every 30 seconds will show the sum of all datapoints received in each 30-second period.
* **:sumrate** \
  The sum is divided by the number of seconds between datapoints, giving you a per-second rate.:sum and :sumrate are the most common views to use with Counter metrics.
* **:sum30** **:sum60** **:sumN** \
  Provides the sum received over a given number of seconds, calculated from the :sumrate. E.g. ":sum30" provides the sum over 30 seconds. This is useful when you want a sum of a metric that is consistent regardless of what data resolution you are viewing. When drawing a graph at a wider timescale there are more datapoints than available space to draw them. Using the ":sumN" syntax lets you see an accurately scaled sum over a given number of seconds.
* **:min** \
  Minimum value
* **:max** \
  Maximum value
* **:obvs**\
  The number of 'observations' or data-points sent to a metric namespace during the timeframe of the current graph resolution (like 30s).
* **:obvsrate** \
  The observations are divided by the number of seconds in the collection period, giving you a per-second rate.
* **:90pct** **:95pct** **:99pct** **etc...** \
  Want arbitrary percentile data? Just add the number after the colon followed by ‘pct’. It accepts values from 01 to 99. If you want the 100th percentile you can use ":max".

### [Example Usage](#example-usage)

Append a view to the end of your metric to visualize your aggregated data in different ways. A simple example of this would be `data-view-metric:sum` or `test.testing:max`.&#x20;

<figure><img src="https://495119770-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtHmoGZNsmARIViZEdbz%2Fuploads%2Fl1cFpTB3poPV8jMRm9cn%2Fdata-views-example.png?alt=media&#x26;token=ec9114c8-7821-4e31-bd6a-9112d2cdf819" alt=""><figcaption><p>Data Views Example</p></figcaption></figure>

If you are using tagged metrics, you will need to include the special tag `_hg_dataview`. For example, querying `seriesByTag("_hg_dataview=99pct", "host=db-0001", "name=cpu.usage")`will retrieve the *99th percentile* data view for the metric *cpu.usage* on host *db-0001.*

For more information please refer to our [documentation](https://docs.hostedgraphite.com/sending-metrics/graphite-tag-support) on tagged metrics.&#x20;

### [Comparison To StatsD](#comparison-to-statsd)

The Hosted Graphite views aren’t perfectly analogous to StatsD, but for general use, it accomplishes similar results. Using our Data Views feature over StatsD can greatly reduce the number of metrics stored in your HG account since 1 counter produces 2 (count/rate) metrics, and 1 timer will produce 11 unique metrics.&#x20;

* **counters** -> ‘:sum’ or ‘:obvs’
* **gauges** -> ‘:sumrate’ or ‘:obvsrate’
* **timers** -> any

### [Percentile Views](#percentile-views)

All percentile views are calculated per resolution (5s, 30s, 300s, 3600s) using reservoir (or random) sampling. We keep 10 samples at the 5s resolution, 40 at 30s & 300s resolution, and 100 at 3600s resolution. This is not as accurate as storing a full histogram, but it requires less storage on our end.

As long as we keep the sampling in mind, we find it’s a reasonable trade-off for simple metrics.

### [Data Views and Graphite Functions](#data-views-and-graphite-functions)

[Graphite Functions](https://graphite.readthedocs.io/en/latest/functions.html) act on one or more data series, transforming them into a new data series. When using a graphite function it is important to note that:

* The data view specified in the query is not changed depending on the function. If you use the [sumSeries()](http://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.sumSeries) function, you will be summing the average values of each series unless you also use **:sum** in your query as well.
* The graph’s resolution can be changed by functions, but the resolution of the data series cannot. For example, [summarize()](http://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.summarize) allows you to group all the datapoints in a specified timeframe into one. Changing the zoom level of the graph won’t change the interval output by the summarize() function, but it may change the number of data points available to be summarized.
