<!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 | Metadata Storage</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="metadata-storage">Metadata Storage</h1>

<p>The Metadata Storage is an external dependency of Apache Druid (incubating). Druid uses it to store
various metadata about the system, but not to store the actual data. There are
a number of tables used for various purposes described below.</p>

<p>Derby is the default metadata store for Druid, however, it is not suitable for production. 
<a href="../development/extensions-core/mysql.html">MySQL</a> and <a href="../development/extensions-core/postgresql.html">PostgreSQL</a> are more production suitable metadata stores.</p>

<div class="note caution">
The Metadata Storage stores the entire metadata which is essential for a Druid cluster to work.
For production clusters, consider using MySQL or PostgreSQL instead of Derby.
Also, it's highly recommended to set up a high availability environment
because there is no way to restore if you lose any metadata.
</div>

<h2 id="using-derby">Using derby</h2>

<p>Add the following to your Druid configuration.</p>
<div class="highlight"><pre><code class="language-properties" data-lang="properties"><span></span><span class="na">druid.metadata.storage.type</span><span class="o">=</span><span class="s">derby</span>
<span class="na">druid.metadata.storage.connector.connectURI</span><span class="o">=</span><span class="s">jdbc:derby://localhost:1527//opt/var/druid_state/derby;create=true</span>
</code></pre></div>
<h2 id="mysql">MySQL</h2>

<p>See <a href="../development/extensions-core/mysql.html">mysql-metadata-storage extension documentation</a>.  </p>

<h2 id="postgresql">PostgreSQL</h2>

<p>See <a href="../development/extensions-core/postgresql.html">postgresql-metadata-storage</a>. </p>

<h2 id="adding-custom-dbcp-properties">Adding custom dbcp properties</h2>

<p>NOTE: These properties are not settable through the druid.metadata.storage.connector.dbcp properties : username, password, connectURI, validationQuery, testOnBorrow. These must be set through druid.metadata.storage.connector properties.</p>

<p>Example supported properties:</p>
<div class="highlight"><pre><code class="language-properties" data-lang="properties"><span></span><span class="na">druid.metadata.storage.connector.dbcp.maxConnLifetimeMillis</span><span class="o">=</span><span class="s">1200000</span>
<span class="na">druid.metadata.storage.connector.dbcp.defaultQueryTimeout</span><span class="o">=</span><span class="s">30000</span>
</code></pre></div>
<p>See <a href="https://commons.apache.org/proper/commons-dbcp/configuration.html">BasicDataSource Configuration</a> for full list.</p>

<h2 id="metadata-storage-tables">Metadata Storage Tables</h2>

<h3 id="segments-table">Segments Table</h3>

<p>This is dictated by the <code>druid.metadata.storage.tables.segments</code> property.</p>

<p>This table stores metadata about the segments that are available in the system.
The table is polled by the <a href="../design/coordinator.html">Coordinator</a> to
determine the set of segments that should be available for querying in the
system. The table has two main functional columns, the other columns are for
indexing purposes.</p>

<p>The <code>used</code> column is a boolean &quot;tombstone&quot;. A 1 means that the segment should
be &quot;used&quot; by the cluster (i.e. it should be loaded and available for requests).
A 0 means that the segment should not be actively loaded into the cluster. We
do this as a means of removing segments from the cluster without actually
removing their metadata (which allows for simpler rolling back if that is ever
an issue).</p>

<p>The <code>payload</code> column stores a JSON blob that has all of the metadata for the segment (some of the data stored in this payload is redundant with some of the columns in the table, that is intentional). This looks something like</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span><span class="p">{</span>
 <span class="nt">&quot;dataSource&quot;</span><span class="p">:</span><span class="s2">&quot;wikipedia&quot;</span><span class="p">,</span>
 <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;2012-05-23T00:00:00.000Z/2012-05-24T00:00:00.000Z&quot;</span><span class="p">,</span>
 <span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="s2">&quot;2012-05-24T00:10:00.046Z&quot;</span><span class="p">,</span>
 <span class="nt">&quot;loadSpec&quot;</span><span class="p">:{</span>
    <span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="s2">&quot;s3_zip&quot;</span><span class="p">,</span>
    <span class="nt">&quot;bucket&quot;</span><span class="p">:</span><span class="s2">&quot;bucket_for_segment&quot;</span><span class="p">,</span>
    <span class="nt">&quot;key&quot;</span><span class="p">:</span><span class="s2">&quot;path/to/segment/on/s3&quot;</span>
 <span class="p">},</span>
 <span class="nt">&quot;dimensions&quot;</span><span class="p">:</span><span class="s2">&quot;comma-delimited-list-of-dimension-names&quot;</span><span class="p">,</span>
 <span class="nt">&quot;metrics&quot;</span><span class="p">:</span><span class="s2">&quot;comma-delimited-list-of-metric-names&quot;</span><span class="p">,</span>
 <span class="nt">&quot;shardSpec&quot;</span><span class="p">:{</span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="s2">&quot;none&quot;</span><span class="p">},</span>
 <span class="nt">&quot;binaryVersion&quot;</span><span class="p">:</span><span class="mi">9</span><span class="p">,</span>
 <span class="nt">&quot;size&quot;</span><span class="p">:</span><span class="err">size_of_segment</span><span class="p">,</span>
 <span class="nt">&quot;identifier&quot;</span><span class="p">:</span><span class="s2">&quot;wikipedia_2012-05-23T00:00:00.000Z_2012-05-24T00:00:00.000Z_2012-05-23T00:10:00.046Z&quot;</span>
<span class="p">}</span>
</code></pre></div>
<p>Note that the format of this blob can and will change from time-to-time.</p>

<h3 id="rule-table">Rule Table</h3>

<p>The rule table is used to store the various rules about where segments should
land. These rules are used by the <a href="../design/coordinator.html">Coordinator</a>
  when making segment (re-)allocation decisions about the cluster.</p>

<h3 id="config-table">Config Table</h3>

<p>The config table is used to store runtime configuration objects. We do not have
many of these yet and we are not sure if we will keep this mechanism going
forward, but it is the beginnings of a method of changing some configuration
parameters across the cluster at runtime.</p>

<h3 id="task-related-tables">Task-related Tables</h3>

<p>There are also a number of tables created and used by the <a href="../design/overlord.html">Overlord</a> and <a href="../design/middlemanager.html">MiddleManager</a> when managing tasks.</p>

<h3 id="audit-table">Audit Table</h3>

<p>The Audit table is used to store the audit history for configuration changes
e.g rule changes done by <a href="../design/coordinator.html">Coordinator</a> and other
config changes.</p>

<h2 id="accessed-by">Accessed By:</h2>

<p>The Metadata Storage is accessed only by:</p>

<ol>
<li>Indexing Service Processes (if any)</li>
<li>Realtime Processes (if any)</li>
<li>Coordinator Processes</li>
</ol>

<p>Thus you need to give permissions (eg in AWS Security Groups)  only for these machines to access the Metadata storage.</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.15.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>
