<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Druid">
<meta name="keywords" content="druid,kafka,database,analytics,streaming,real-time,real time,apache,open source">
<meta name="author" content="Apache Software Foundation">

<title>Druid | Schema Design</title>

<link rel="alternate" type="application/atom+xml" href="/feed">
<link rel="shortcut icon" href="/img/favicon.png">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic|Open+Sans:300italic,400italic,600italic,400,300,600,700' rel='stylesheet' type='text/css'>

<link rel="stylesheet" href="/css/bootstrap-pure.css?v=1.1">
<link rel="stylesheet" href="/css/base.css?v=1.1">
<link rel="stylesheet" href="/css/header.css?v=1.1">
<link rel="stylesheet" href="/css/footer.css?v=1.1">
<link rel="stylesheet" href="/css/syntax.css?v=1.1">
<link rel="stylesheet" href="/css/docs.css?v=1.1">

<script>
  (function() {
    var cx = '000162378814775985090:molvbm0vggm';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>


  </head>

  <body>
    <!-- Start page_header include -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<div class="top-navigator">
  <div class="container">
    <div class="left-cont">
      <a class="logo" href="/"><span class="druid-logo"></span></a>
    </div>
    <div class="right-cont">
      <ul class="links">
        <li class=""><a href="/technology">Technology</a></li>
        <li class=""><a href="/use-cases">Use Cases</a></li>
        <li class=""><a href="/druid-powered">Powered By</a></li>
        <li class=""><a href="/docs/latest/design/">Docs</a></li>
        <li class=""><a href="/community/">Community</a></li>
        <li class="header-dropdown">
          <a>Apache</a>
          <div class="header-dropdown-menu">
            <a href="https://www.apache.org/" target="_blank">Foundation</a>
            <a href="https://www.apache.org/events/current-event" target="_blank">Events</a>
            <a href="https://www.apache.org/licenses/" target="_blank">License</a>
            <a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a>
            <a href="https://www.apache.org/security/" target="_blank">Security</a>
            <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a>
          </div>
        </li>
        <li class=" button-link"><a href="/downloads.html">Download</a></li>
      </ul>
    </div>
  </div>
  <div class="action-button menu-icon">
    <span class="fa fa-bars"></span> MENU
  </div>
  <div class="action-button menu-icon-close">
    <span class="fa fa-times"></span> MENU
  </div>
</div>

<script type="text/javascript">
  var $menu = $('.right-cont');
  var $menuIcon = $('.menu-icon');
  var $menuIconClose = $('.menu-icon-close');

  function showMenu() {
    $menu.fadeIn(100);
    $menuIcon.fadeOut(100);
    $menuIconClose.fadeIn(100);
  }

  $menuIcon.click(showMenu);

  function hideMenu() {
    $menu.fadeOut(100);
    $menuIconClose.fadeOut(100);
    $menuIcon.fadeIn(100);
  }

  $menuIconClose.click(hideMenu);

  $(window).resize(function() {
    if ($(window).width() >= 840) {
      $menu.fadeIn(100);
      $menuIcon.fadeOut(100);
      $menuIconClose.fadeOut(100);
    }
    else {
      $menu.fadeOut(100);
      $menuIcon.fadeIn(100);
      $menuIconClose.fadeOut(100);
    }
  });
</script>

<!-- Stop page_header include -->


    <div class="container doc-container">
      
      

      
      <p> Looking for the <a href="/docs/0.16.1-incubating/">latest stable documentation</a>?</p>
      

      <div class="row">
        <div class="col-md-9 doc-content">
          <p>
            <a class="btn btn-default btn-xs visible-xs-inline-block visible-sm-inline-block" href="#toc">Table of Contents</a>
          </p>
          <!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<h1 id="schema-design">Schema Design</h1>

<p>This page is meant to assist users in designing a schema for data to be ingested in Apache Druid (incubating). Druid offers a unique data
modeling system that bears similarity to both relational and timeseries models. The key factors are:</p>

<ul>
<li>Druid data is stored in <a href="index.html#datasources">datasources</a>, which are similar to tables in a traditional RDBMS.</li>
<li>Druid datasources can be ingested with or without <a href="#rollup">rollup</a>. With rollup enabled, Druid partially aggregates your data during ingestion, potentially reducing its row count, decreasing storage footprint, and improving query performance. With rollup disabled, Druid stores one row for each row in your input data, without any pre-aggregation.</li>
<li>Every row in Druid must have a timestamp. Data is always partitioned by time, and every query has a time filter. Query results can also be broken down by time buckets like minutes, hours, days, and so on.</li>
<li>All columns in Druid datasources, other than the timestamp column, are either dimensions or metrics. This follows the <a href="https://en.wikipedia.org/wiki/Online_analytical_processing#Overview_of_OLAP_systems">standard naming convention</a> of OLAP data.</li>
<li>Typical production datasources have tens to hundreds of columns.</li>
<li><a href="ingestion-spec.html#dimensions">Dimension columns</a> are stored as-is, so they can be filtered on, grouped by, or aggregated at query time. They are always single Strings, <a href="../querying/multi-value-dimensions.html">arrays of Strings</a>, single Longs, single Doubles or single Floats.</li>
<li>Metric columns are stored <a href="../querying/aggregations.html">pre-aggregated</a>, so they can only be aggregated at query time (not filtered or grouped by). They are often stored as numbers (integers or floats) but can also be stored as complex objects like <a href="../querying/aggregations.html#approx">HyperLogLog sketches or approximate quantile sketches</a>. Metrics can be configured at ingestion time even when rollup is disabled, but are most useful when rollup is enabled.</li>
</ul>

<p>The rest of this page discusses tips for users coming from other kinds of systems, as well as general tips and
common practices.</p>

<h2 id="if-youre-coming-from-a">If you&#39;re coming from a...</h2>

<h3 id="relational-model">Relational model</h3>

<p>(Like Hive or PostgreSQL.)</p>

<p>Druid datasources are generally equivalent to tables in a relational database. Druid <a href="../querying/lookups.html">lookups</a>
can act similarly to data-warehouse-style dimension tables, but as you&#39;ll see below, denormalization is often
recommended if you can get away with it.</p>

<p>Common practice for relational data modeling involves <a href="https://en.wikipedia.org/wiki/Database_normalization">normalization</a>:
the idea of splitting up data into multiple tables such that data redundancy is reduced or eliminated. For example, in a
&quot;sales&quot; table, best-practices relational modeling calls for a &quot;product id&quot; column that is a foreign key into a separate
&quot;products&quot; table, which in turn has &quot;product id&quot;, &quot;product name&quot;, and &quot;product category&quot; columns. This prevents the
product name and category from needing to be repeated on different rows in the &quot;sales&quot; table that refer to the same
product.</p>

<p>In Druid, on the other hand, it is common to use totally flat datasources that do not require joins at query time. In
the example of the &quot;sales&quot; table, in Druid it would be typical to store &quot;product_id&quot;, &quot;product_name&quot;, and
&quot;product_category&quot; as dimensions directly in a Druid &quot;sales&quot; datasource, without using a separate &quot;products&quot; table.
Totally flat schemas substantially increase performance, since the need for joins is eliminated at query time. As an
an added speed boost, this also allows Druid&#39;s query layer to operate directly on compressed dictionary-encoded data.
Perhaps counter-intuitively, this does <em>not</em> substantially increase storage footprint relative to normalized schemas,
since Druid uses dictionary encoding to effectively store just a single integer per row for string columns.</p>

<p>If necessary, Druid datasources can be partially normalized through the use of <a href="../querying/lookups.html">lookups</a>,
which are the rough equivalent of dimension tables in a relational database. At query time, you would use Druid&#39;s SQL
<code>LOOKUP</code> function, or native lookup extraction functions, instead of using the JOIN keyword like you would in a
relational database. Since lookup tables impose an increase in memory footprint and incur more computational overhead
at query time, it is only recommended to do this if you need the ability to update a lookup table and have the changes
reflected immediately for already-ingested rows in your main table.</p>

<p>Tips for modeling relational data in Druid:</p>

<ul>
<li>Druid datasources do not have primary or unique keys, so skip those.</li>
<li>Denormalize if possible. If you need to be able to update dimension / lookup tables periodically and have those
changes reflected in already-ingested data, consider partial normalization with <a href="../querying/lookups.html">lookups</a>.</li>
<li>If you need to join two large distributed tables with each other, you must do this before loading the data into Druid.
Druid does not support query-time joins of two datasources. Lookups do not help here, since a full copy of each lookup
table is stored on each Druid server, so they are not a good choice for large tables.</li>
<li>Consider whether you want to enable <a href="#rollup">rollup</a> for pre-aggregation, or whether you want to disable
rollup and load your existing data as-is. Rollup in Druid is similar to creating a summary table in a relational model.</li>
</ul>

<h3 id="time-series-model">Time series model</h3>

<p>(Like OpenTSDB or InfluxDB.)</p>

<p>Similar to time series databases, Druid&#39;s data model requires a timestamp. Druid is not a timeseries database, but
it is a natural choice for storing timeseries data. Its flexible data model allows it to store both timeseries and
non-timeseries data, even in the same datasource.</p>

<p>To achieve best-case compression and query performance in Druid for timeseries data, it is important to partition and
sort by metric name, like timeseries databases often do. See <a href="#partitioning">Partitioning and sorting</a> for more details.</p>

<p>Tips for modeling timeseries data in Druid:</p>

<ul>
<li>Druid does not think of data points as being part of a &quot;time series&quot;. Instead, Druid treats each point separately
for ingestion and aggregation.</li>
<li>Create a dimension that indicates the name of the series that a data point belongs to. This dimension is often called
&quot;metric&quot; or &quot;name&quot;. Do not get the dimension named &quot;metric&quot; confused with the concept of Druid metrics. Place this
first in the list of dimensions in your &quot;dimensionsSpec&quot; for best performance (this helps because it improves locality;
see <a href="#partitioning">partitioning and sorting</a> below for details).</li>
<li>Create other dimensions for attributes attached to your data points. These are often called &quot;tags&quot; in timeseries
database systems.</li>
<li>Create <a href="../querying/aggregations.html">metrics</a> corresponding to the types of aggregations that you want to be able
to query. Typically this includes &quot;sum&quot;, &quot;min&quot;, and &quot;max&quot; (in one of the long, float, or double flavors). If you want to
be able to compute percentiles or quantiles, use Druid&#39;s <a href="../querying/aggregations.html#approx">approximate aggregators</a>.</li>
<li>Consider enabling <a href="#rollup">rollup</a>, which will allow Druid to potentially combine multiple points into one
row in your Druid datasource. This can be useful if you want to store data at a different time granularity than it is
naturally emitted. It is also useful if you want to combine timeseries and non-timeseries data in the same datasource.</li>
<li>If you don&#39;t know ahead of time what columns you&#39;ll want to ingest, use an empty dimensions list to trigger
<a href="#schemaless">automatic detection of dimension columns</a>.</li>
</ul>

<h3 id="log-aggregation-model">Log aggregation model</h3>

<p>(Like Elasticsearch or Splunk.)</p>

<p>Similar to log aggregation systems, Druid offers inverted indexes for fast searching and filtering. Druid&#39;s search
capabilities are generally less developed than these systems, and its analytical capabilities are generally more
developed. The main data modeling differences between Druid and these systems are that when ingesting data into Druid,
you must be more explicit. Druid columns have types specific upfront and Druid does not, at this time, natively support
nested data.</p>

<p>Tips for modeling log data in Druid:</p>

<ul>
<li>If you don&#39;t know ahead of time what columns you&#39;ll want to ingest, use an empty dimensions list to trigger
<a href="#schemaless">automatic detection of dimension columns</a>.</li>
<li>If you have nested data, flatten it using <a href="flatten-json.html">Druid flattenSpecs</a>.</li>
<li>Consider enabling <a href="#rollup">rollup</a> if you have mainly analytical use cases for your log data. This will
mean you lose the ability to retrieve individual events from Druid, but you potentially gain substantial compression and
query performance boosts.</li>
</ul>

<h2 id="general-tips-and-best-practices">General tips and best practices</h2>

<p><a name="rollup" /></p>

<h3 id="rollup">Rollup</h3>

<p>Druid can roll up data as it is ingested to minimize the amount of raw data that needs to be stored. Rollup is
a form of summarization or pre-aggregation. Columns stored in a Druid datasource are split into <em>dimensions</em> and
<em>measures</em>. When rollup is enabled, any number of rows that have identical dimensions to each other (including an
identical timestamp after <code>queryGranularity</code>-based truncation has been applied) can be collapsed into a single row in
Druid.</p>

<p>In practice, rolling up data can dramatically reduce the size of data that needs to be stored, reducing row counts
by potentially orders of magnitude. This storage reduction does come at a cost: as we roll up data, we lose the ability
to query individual events.</p>

<p>You can measure the rollup ratio of a datasource by comparing the number of rows in Druid with the number of ingested
events. One way to do this is with a <a href="../querying/sql.html">Druid SQL</a> query like:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>-- &quot;* 1.0&quot; so we get decimal rather than integer division
SELECT SUM(&quot;event_count&quot;) / COUNT(*) * 1.0 FROM datasource
</code></pre></div>
<p>In this case, <code>event_count</code> was a &quot;count&quot; type metric specified at ingestion time. See
<a href="#counting">Counting the number of ingested events</a> below for more details about how counting works when rollup is
enabled.</p>

<p>Tips for maximizing rollup:</p>

<ul>
<li>Generally, the fewer dimensions you have, and the lower the cardinality of your dimensions, the better rollup ratios
you will achieve.</li>
<li>Use <a href="#sketches">sketches</a> to avoid storing high cardinality dimensions, which harm rollup ratios.</li>
<li>Adjusting <code>queryGranularity</code> at ingestion time (for example, using <code>PT5M</code> instead of <code>PT1M</code>) increases the
likelihood of two rows in Druid having matching timestamps, and can improve your rollup ratios.</li>
<li>It can be beneficial to load the same data into more than one Druid datasource. Some users choose to create a &quot;full&quot;
datasource that has rollup disabled (or enabled, but with a minimal rollup ratio) and an &quot;abbreviated&quot; datasource that
has fewer dimensions and a higher rollup ratio. When queries only involve dimensions in the &quot;abbreviated&quot; set, using
that datasource leads to much faster query times. This can often be done with just a small increase in storage
footprint, since abbreviated datasources tend to be substantially smaller.</li>
</ul>

<p>For more details about how rollup works and how to configure it, see the <a href="index.html#rollup">ingestion overview</a>.</p>

<p><a name="partitioning" /></p>

<h3 id="partitioning-and-sorting">Partitioning and sorting</h3>

<p>Druid always partitions your data by time, but the segments within a particular time chunk may be
<a href="index.html#partitioning">partitioned further</a> using options that vary based on the ingestion method you have chosen.</p>

<p>In general, partitioning using a particular dimension will improve locality, meaning that rows with the same value
for that dimension are stored together and can be accessed quickly. This gives you better performance when querying that
dimension, including both filtering and grouping on it. Partitioning on a dimension that &quot;naturally&quot; partitions your
data (such as a customer ID) will also tend to improve compression and give you a smaller storage footprint. These
effects will be maximized by putting the partition dimension first in the &quot;dimensions&quot; list of your &quot;dimensionsSpec&quot;,
which also tells Druid to sort data segments by that column.</p>

<p>Note that Druid always sorts rows within a segment by timestamp first, even before the first dimension listed in your
dimensionsSpec. This can affect storage footprint and data locality. If you want to truly sort by a dimension, you can
work around this by setting <code>queryGranularity</code> equal to <code>segmentGranularity</code> in your ingestion spec, and then if you
need finer-granularity timestamps, ingesting your timestamp as a separate long-typed dimension. See
<a href="#secondary-timestamps">Secondary timestamps</a> below for more information. This limitation may be removed in future
versions of Druid.</p>

<p>For details about how partitioning works and how to configure it, see the <a href="index.html#partitioning">ingestion overview</a>.</p>

<p><a name="sketches" /></p>

<h3 id="sketches-for-high-cardinality-columns">Sketches for high cardinality columns</h3>

<p>When dealing with high cardinality columns like user IDs or other unique IDs, consider using sketches for approximate
analysis rather than operating on the actual values. When you ingest data using a sketch, Druid does not store the
original raw data, but instead stores a &quot;sketch&quot; of it that it can feed into a later computation at query time. Popular
use cases for sketches include count-distinct and quantile computation. Each sketch is designed for just one particular
kind of computation.</p>

<p>In general using sketches serves two main purposes: improving rollup, and reducing memory footprint at
query time.</p>

<p>Sketches improve rollup ratios because they allow you to collapse multiple distinct values into the same sketch. For
example, if you have two rows that are identical except for a user ID (perhaps two users did the same action at the
same time), storing them in a count-distinct sketch instead of as-is means you can store the data in one row instead of
two. You won&#39;t be able to retrieve the user IDs or compute exact distinct counts, but you&#39;ll still be able to compute
approximate distinct counts, and you&#39;ll reduce your storage footprint.</p>

<p>Sketches reduce memory footprint at query time because they limit the amount of data that needs to be shuffled between
servers. For example, in a quantile computation, instead of needing to send all data points to a central location
so they can be sorted and the quantile can be computed, Druid instead only needs to send a sketch of the points. This
can reduce data transfer needs to mere kilobytes.</p>

<p>For details about the sketches available in Druid, see the
<a href="../querying/aggregations.html#approx">approximate aggregators</a> page.</p>

<p>If you prefer videos, take a look at <a href="https://www.youtube.com/watch?v=Hpd3f_MLdXo">Not exactly!</a>, a conference talk
about sketches in Druid.</p>

<p><a name="numeric-dimensions" /></p>

<h3 id="string-vs-numeric-dimensions">String vs numeric dimensions</h3>

<p>If the user wishes to ingest a column as a numeric-typed dimension (Long, Double or Float), it is necessary to specify the type of the column in the <code>dimensions</code> section of the <code>dimensionsSpec</code>. If the type is omitted, Druid will ingest a column as the default String type.</p>

<p>There are performance tradeoffs between string and numeric columns. Numeric columns are generally faster to group on
than string columns. But unlike string columns, numeric columns don&#39;t have indexes, so they can be slower to filter on.
You may want to experiment to find the optimal choice for your use case.</p>

<p>For details about how to configure numeric dimensions, see the
<a href="../ingestion/ingestion-spec.html#dimension-schema">Dimension Schema</a> page.</p>

<p><a name="secondary-timestamps" /></p>

<h3 id="secondary-timestamps">Secondary timestamps</h3>

<p>Druid schemas must always include a primary timestamp. The primary timestamp is used for
<a href="#partitioning">partitioning and sorting</a> your data, so it should be the timestamp that you will most often filter on.
Druid is able to rapidly identify and retrieve data corresponding to time ranges of the primary timestamp column.</p>

<p>If your data has more than one timestamp, you can ingest the others as secondary timestamps. The best way to do this
is to ingest them as <a href="../ingestion/ingestion-spec.html#dimension-schema">long-typed dimensions</a> in milliseconds format.
If necessary, you can get them into this format using <a href="transform-spec.html">transform specs</a> and
<a href="../misc/math-expr.html">expressions</a> like <code>timestamp_parse</code>, which returns millisecond timestamps.</p>

<p>At query time, you can query secondary timestamps with <a href="../querying/sql.html#time-functions">SQL time functions</a>
like <code>MILLIS_TO_TIMESTAMP</code>, <code>TIME_FLOOR</code>, and others. If you&#39;re using native Druid queries, you can use
<a href="../misc/math-expr.html">expressions</a>.</p>

<h3 id="nested-dimensions">Nested dimensions</h3>

<p>At the time of this writing, Druid does not support nested dimensions. Nested dimensions need to be flattened. For example, 
if you have data of the following form:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>{&quot;foo&quot;:{&quot;bar&quot;: 3}}
</code></pre></div>
<p>then before indexing it, you should transform it to:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>{&quot;foo_bar&quot;: 3}
</code></pre></div>
<p>Druid is capable of flattening JSON, Avro, or Parquet input data.
Please read about <a href="../ingestion/flatten-json.html">flattenSpecs</a> for more details.</p>

<p><a name="counting" /></p>

<h3 id="counting-the-number-of-ingested-events">Counting the number of ingested events</h3>

<p>When rollup is enabled, count aggregators at query time do not actually tell you the number of rows that have been
ingested. They tell you the number of rows in the Druid datasource, which may be smaller than the number of rows
ingested.</p>

<p>In this case, a count aggregator at <em>ingestion</em> time can be used to count the number of events. However, it is important to note
that when you query for this metric, you should use a <code>longSum</code> aggregator. A <code>count</code> aggregator at query time will return 
the number of Druid rows for the time interval, which can be used to determine what the roll-up ratio was.</p>

<p>To clarify with an example, if your ingestion spec contains:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>...
&quot;metricsSpec&quot; : [
      {
        &quot;type&quot; : &quot;count&quot;,
        &quot;name&quot; : &quot;count&quot;
      },
...
</code></pre></div>
<p>You should query for the number of ingested rows with:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>...
&quot;aggregations&quot;: [
    { &quot;type&quot;: &quot;longSum&quot;, &quot;name&quot;: &quot;numIngestedEvents&quot;, &quot;fieldName&quot;: &quot;count&quot; },
...
</code></pre></div>
<p><a name="schemaless" /></p>

<h3 id="schema-less-dimensions">Schema-less dimensions</h3>

<p>If the <code>dimensions</code> field is left empty in your ingestion spec, Druid will treat every column that is not the timestamp column, 
a dimension that has been excluded, or a metric column as a dimension.</p>

<p>Note that when using schema-less ingestion, all dimensions will be ingested as String-typed dimensions.</p>

<h3 id="including-the-same-column-as-a-dimension-and-a-metric">Including the same column as a dimension and a metric</h3>

<p>One workflow with unique IDs is to be able to filter on a particular ID, while still being able to do fast unique counts on the ID column. 
If you are not using schema-less dimensions, this use case is supported by setting the <code>name</code> of the metric to something different than the dimension. 
If you are using schema-less dimensions, the best practice here is to include the same column twice, once as a dimension, and as a <code>hyperUnique</code> metric. This may involve 
some work at ETL time.</p>

<p>As an example, for schema-less dimensions, repeat the same column:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>{&quot;device_id_dim&quot;:123, &quot;device_id_met&quot;:123}
</code></pre></div>
<p>and in your <code>metricsSpec</code>, include:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>{ &quot;type&quot; : &quot;hyperUnique&quot;, &quot;name&quot; : &quot;devices&quot;, &quot;fieldName&quot; : &quot;device_id_met&quot; }
</code></pre></div>
<p><code>device_id_dim</code> should automatically get picked up as a dimension.</p>

        </div>
        <div class="col-md-3">
          <div class="searchbox">
            <gcse:searchbox-only></gcse:searchbox-only>
          </div>
          <div id="toc" class="nav toc hidden-print">
          </div>
        </div>
      </div>
    </div>

    <!-- Start page_footer include -->
<footer class="druid-footer">
<div class="container">
  <div class="text-center">
    <p>
    <a href="/technology">Technology</a>&ensp;·&ensp;
    <a href="/use-cases">Use Cases</a>&ensp;·&ensp;
    <a href="/druid-powered">Powered by Druid</a>&ensp;·&ensp;
    <a href="/docs/latest">Docs</a>&ensp;·&ensp;
    <a href="/community/">Community</a>&ensp;·&ensp;
    <a href="/downloads.html">Download</a>&ensp;·&ensp;
    <a href="/faq">FAQ</a>
    </p>
  </div>
  <div class="text-center">
    <a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a>&ensp;·&ensp;
    <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a>&ensp;·&ensp;
    <a title="Download via Apache" href="https://www.apache.org/dyn/closer.cgi?path=/incubator/druid/0.16.1-incubating/apache-druid-0.16.1-incubating-bin.tar.gz" target="_blank"><span class="fas fa-feather"></span></a>&ensp;·&ensp;
    <a title="GitHub" href="https://github.com/apache/incubator-druid" target="_blank"><span class="fab fa-github"></span></a>
  </div>
  <div class="text-center license">
    Copyright © 2019 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br>
    Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br>
    Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
  </div>
</div>
</footer>

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-131010415-1');
</script>
<script>
  function trackDownload(type, url) {
    ga('send', 'event', 'download', type, url);
  }
</script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="/assets/js/druid.js"></script>
<!-- stop page_footer include -->


    <script>
    $(function() {
      $(".toc").load("/docs/0.14.0-incubating/toc.html");

      // There is no way to tell when .gsc-input will be async loaded into the page so just try to set a placeholder until it works
      var tries = 0;
      var timer = setInterval(function() {
        tries++;
        if (tries > 300) clearInterval(timer);
        var searchInput = $('input.gsc-input');
        if (searchInput.length) {
          searchInput.attr('placeholder', 'Search');
          clearInterval(timer);
        }
      }, 100);
    });
    </script>
  </body>
</html>
