blob: fa0d157464f8b0853f0cbcda3117606f315efa77 [file] [log] [blame]
<!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 | Select Queries</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.23.0/">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="select-queries">Select Queries</h1>
<p>Select queries return raw Apache Druid (incubating) rows and support pagination.</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="p">{</span>
<span class="nt">&quot;queryType&quot;</span><span class="p">:</span> <span class="s2">&quot;select&quot;</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;descending&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
<span class="nt">&quot;dimensions&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;metrics&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;granularity&quot;</span><span class="p">:</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
<span class="nt">&quot;intervals&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;2013-01-01/2013-01-02&quot;</span>
<span class="p">],</span>
<span class="nt">&quot;pagingSpec&quot;</span><span class="p">:{</span><span class="nt">&quot;pagingIdentifiers&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="nt">&quot;threshold&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<div class="note info">
Consider using the [Scan query](../querying/scan-query.html) instead of the Select query if you don't need pagination, and you
don't need the strict time-ascending or time-descending ordering offered by the Select query. The Scan query returns
results without pagination, and offers "looser" ordering than Select, but is significantly more efficient in terms of
both processing time and memory requirements. It is also capable of returning a virtually unlimited number of results.
</div>
<p>There are several main parts to a select query:</p>
<table><thead>
<tr>
<th>property</th>
<th>description</th>
<th>required?</th>
</tr>
</thead><tbody>
<tr>
<td>queryType</td>
<td>This String should always be &quot;select&quot;; this is the first thing Druid looks at to figure out how to interpret the query</td>
<td>yes</td>
</tr>
<tr>
<td>dataSource</td>
<td>A String or Object defining the data source to query, very similar to a table in a relational database. See <a href="../querying/datasource.html">DataSource</a> for more information.</td>
<td>yes</td>
</tr>
<tr>
<td>intervals</td>
<td>A JSON Object representing ISO-8601 Intervals. This defines the time ranges to run the query over.</td>
<td>yes</td>
</tr>
<tr>
<td>descending</td>
<td>Whether to make descending ordered result. Default is <code>false</code>(ascending). When this is <code>true</code>, page identifier and offsets will be negative value.</td>
<td>no</td>
</tr>
<tr>
<td>filter</td>
<td>See <a href="../querying/filters.html">Filters</a></td>
<td>no</td>
</tr>
<tr>
<td>dimensions</td>
<td>A JSON list of dimensions to select; or see <a href="../querying/dimensionspecs.html">DimensionSpec</a> for ways to extract dimensions. If left empty, all dimensions are returned.</td>
<td>no</td>
</tr>
<tr>
<td>metrics</td>
<td>A String array of metrics to select. If left empty, all metrics are returned.</td>
<td>no</td>
</tr>
<tr>
<td>granularity</td>
<td>Defines the granularity of the query. See <a href="../querying/granularities.html">Granularities</a>. Default is <code>Granularity.ALL</code>.</td>
<td>no</td>
</tr>
<tr>
<td>pagingSpec</td>
<td>A JSON object indicating offsets into different scanned segments. Query results will return a <code>pagingIdentifiers</code> value that can be reused in the next query for pagination.</td>
<td>yes</td>
</tr>
<tr>
<td>context</td>
<td>An additional JSON Object which can be used to specify certain flags.</td>
<td>no</td>
</tr>
</tbody></table>
<p>The format of the result is:</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="p">[{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;result&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;pagingIdentifiers&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span> <span class="p">:</span> <span class="mi">4</span>
<span class="p">},</span>
<span class="nt">&quot;events&quot;</span> <span class="p">:</span> <span class="p">[</span> <span class="p">{</span>
<span class="nt">&quot;segmentId&quot;</span> <span class="p">:</span> <span class="s2">&quot;wikipedia_editstream_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span><span class="p">,</span>
<span class="nt">&quot;offset&quot;</span> <span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="nt">&quot;event&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;robot&quot;</span> <span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="nt">&quot;namespace&quot;</span> <span class="p">:</span> <span class="s2">&quot;article&quot;</span><span class="p">,</span>
<span class="nt">&quot;anonymous&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;unpatrolled&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;page&quot;</span> <span class="p">:</span> <span class="s2">&quot;11._korpus_(NOVJ)&quot;</span><span class="p">,</span>
<span class="nt">&quot;language&quot;</span> <span class="p">:</span> <span class="s2">&quot;sl&quot;</span><span class="p">,</span>
<span class="nt">&quot;newpage&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;user&quot;</span> <span class="p">:</span> <span class="s2">&quot;EmausBot&quot;</span><span class="p">,</span>
<span class="nt">&quot;count&quot;</span> <span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="nt">&quot;added&quot;</span> <span class="p">:</span> <span class="mf">39.0</span><span class="p">,</span>
<span class="nt">&quot;delta&quot;</span> <span class="p">:</span> <span class="mf">39.0</span><span class="p">,</span>
<span class="nt">&quot;variation&quot;</span> <span class="p">:</span> <span class="mf">39.0</span><span class="p">,</span>
<span class="nt">&quot;deleted&quot;</span> <span class="p">:</span> <span class="mf">0.0</span>
<span class="p">}</span>
<span class="p">},</span> <span class="p">{</span>
<span class="nt">&quot;segmentId&quot;</span> <span class="p">:</span> <span class="s2">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span><span class="p">,</span>
<span class="nt">&quot;offset&quot;</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;event&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;robot&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;namespace&quot;</span> <span class="p">:</span> <span class="s2">&quot;article&quot;</span><span class="p">,</span>
<span class="nt">&quot;anonymous&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;unpatrolled&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;page&quot;</span> <span class="p">:</span> <span class="s2">&quot;112_U.S._580&quot;</span><span class="p">,</span>
<span class="nt">&quot;language&quot;</span> <span class="p">:</span> <span class="s2">&quot;en&quot;</span><span class="p">,</span>
<span class="nt">&quot;newpage&quot;</span> <span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="nt">&quot;user&quot;</span> <span class="p">:</span> <span class="s2">&quot;MZMcBride&quot;</span><span class="p">,</span>
<span class="nt">&quot;count&quot;</span> <span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="nt">&quot;added&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;delta&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;variation&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;deleted&quot;</span> <span class="p">:</span> <span class="mf">0.0</span>
<span class="p">}</span>
<span class="p">},</span> <span class="p">{</span>
<span class="nt">&quot;segmentId&quot;</span> <span class="p">:</span> <span class="s2">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span><span class="p">,</span>
<span class="nt">&quot;offset&quot;</span> <span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="nt">&quot;event&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;robot&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;namespace&quot;</span> <span class="p">:</span> <span class="s2">&quot;article&quot;</span><span class="p">,</span>
<span class="nt">&quot;anonymous&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;unpatrolled&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;page&quot;</span> <span class="p">:</span> <span class="s2">&quot;113_U.S._243&quot;</span><span class="p">,</span>
<span class="nt">&quot;language&quot;</span> <span class="p">:</span> <span class="s2">&quot;en&quot;</span><span class="p">,</span>
<span class="nt">&quot;newpage&quot;</span> <span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="nt">&quot;user&quot;</span> <span class="p">:</span> <span class="s2">&quot;MZMcBride&quot;</span><span class="p">,</span>
<span class="nt">&quot;count&quot;</span> <span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="nt">&quot;added&quot;</span> <span class="p">:</span> <span class="mf">77.0</span><span class="p">,</span>
<span class="nt">&quot;delta&quot;</span> <span class="p">:</span> <span class="mf">77.0</span><span class="p">,</span>
<span class="nt">&quot;variation&quot;</span> <span class="p">:</span> <span class="mf">77.0</span><span class="p">,</span>
<span class="nt">&quot;deleted&quot;</span> <span class="p">:</span> <span class="mf">0.0</span>
<span class="p">}</span>
<span class="p">},</span> <span class="p">{</span>
<span class="nt">&quot;segmentId&quot;</span> <span class="p">:</span> <span class="s2">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span><span class="p">,</span>
<span class="nt">&quot;offset&quot;</span> <span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="nt">&quot;event&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;robot&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;namespace&quot;</span> <span class="p">:</span> <span class="s2">&quot;article&quot;</span><span class="p">,</span>
<span class="nt">&quot;anonymous&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;unpatrolled&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;page&quot;</span> <span class="p">:</span> <span class="s2">&quot;113_U.S._73&quot;</span><span class="p">,</span>
<span class="nt">&quot;language&quot;</span> <span class="p">:</span> <span class="s2">&quot;en&quot;</span><span class="p">,</span>
<span class="nt">&quot;newpage&quot;</span> <span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="nt">&quot;user&quot;</span> <span class="p">:</span> <span class="s2">&quot;MZMcBride&quot;</span><span class="p">,</span>
<span class="nt">&quot;count&quot;</span> <span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="nt">&quot;added&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;delta&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;variation&quot;</span> <span class="p">:</span> <span class="mf">70.0</span><span class="p">,</span>
<span class="nt">&quot;deleted&quot;</span> <span class="p">:</span> <span class="mf">0.0</span>
<span class="p">}</span>
<span class="p">},</span> <span class="p">{</span>
<span class="nt">&quot;segmentId&quot;</span> <span class="p">:</span> <span class="s2">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span><span class="p">,</span>
<span class="nt">&quot;offset&quot;</span> <span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="nt">&quot;event&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;timestamp&quot;</span> <span class="p">:</span> <span class="s2">&quot;2013-01-01T00:00:00.000Z&quot;</span><span class="p">,</span>
<span class="nt">&quot;robot&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;namespace&quot;</span> <span class="p">:</span> <span class="s2">&quot;article&quot;</span><span class="p">,</span>
<span class="nt">&quot;anonymous&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;unpatrolled&quot;</span> <span class="p">:</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="nt">&quot;page&quot;</span> <span class="p">:</span> <span class="s2">&quot;113_U.S._756&quot;</span><span class="p">,</span>
<span class="nt">&quot;language&quot;</span> <span class="p">:</span> <span class="s2">&quot;en&quot;</span><span class="p">,</span>
<span class="nt">&quot;newpage&quot;</span> <span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="nt">&quot;user&quot;</span> <span class="p">:</span> <span class="s2">&quot;MZMcBride&quot;</span><span class="p">,</span>
<span class="nt">&quot;count&quot;</span> <span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="nt">&quot;added&quot;</span> <span class="p">:</span> <span class="mf">68.0</span><span class="p">,</span>
<span class="nt">&quot;delta&quot;</span> <span class="p">:</span> <span class="mf">68.0</span><span class="p">,</span>
<span class="nt">&quot;variation&quot;</span> <span class="p">:</span> <span class="mf">68.0</span><span class="p">,</span>
<span class="nt">&quot;deleted&quot;</span> <span class="p">:</span> <span class="mf">0.0</span>
<span class="p">}</span>
<span class="p">}</span> <span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span> <span class="p">]</span>
</code></pre></div>
<p>The <code>threshold</code> determines how many hits are returned, with each hit indexed by an offset. When <code>descending</code> is true, the offset will be negative value.</p>
<p>The results above include:</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="nt">&quot;pagingIdentifiers&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span> <span class="p">:</span> <span class="mi">4</span>
<span class="p">},</span>
</code></pre></div>
<h3 id="result-pagination">Result Pagination</h3>
<p>The PagingSpec allows the user to specify that the results of a select query should be returned as a paginated set.</p>
<p>The <code>threshold</code> option controls how many rows are returned in each block of paginated results.</p>
<p>To initiate a paginated query, the user should specify a PagingSpec with a <code>threshold</code> set and a blank <code>pagingIdentifiers</code> field, e.g.:</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span><span class="nt">&quot;pagingSpec&quot;</span><span class="p">:{</span><span class="nt">&quot;pagingIdentifiers&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="nt">&quot;threshold&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">}</span>
</code></pre></div>
<p>When the query returns, the results will contain a <code>pagingIndentifers</code> field indicating the current pagination point in the result set (an identifier and an offset).</p>
<p>To retrieve the next part of the result set, the user should issue the same select query, but replace the <code>pagingIdentifiers</code> field of the query with the <code>pagingIdentifiers</code> from the previous result.</p>
<p>When an empty result set is received, all rows have been returned.</p>
<h4 id="fromnext-backwards-compatibility">fromNext Backwards Compatibility</h4>
<p>In older versions of Druid, when using paginated select queries, it was necessary for the user to manually increment the paging offset by 1 in each <code>pagingIdentifiers</code> before submitting the next query to retrieve the next set of results. This offset increment happens automatically in the current version of Druid by default, the user does not need to modify the <code>pagingIdentifiers</code> offset to retrieve the next result set.</p>
<p>Setting the <code>fromNext</code> field of the PagingSpec to false instructs Druid to operate in the older mode where the user must manually increment the offset (or decrement for descending queries).</p>
<p>For example, suppose the user issues the following initial paginated query, with <code>fromNext</code> false:</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="p">{</span>
<span class="nt">&quot;queryType&quot;</span><span class="p">:</span> <span class="s2">&quot;select&quot;</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;descending&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
<span class="nt">&quot;dimensions&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;metrics&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;granularity&quot;</span><span class="p">:</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
<span class="nt">&quot;intervals&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;2013-01-01/2013-01-02&quot;</span>
<span class="p">],</span>
<span class="nt">&quot;pagingSpec&quot;</span><span class="p">:{</span><span class="nt">&quot;fromNext&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span><span class="p">,</span> <span class="nt">&quot;pagingIdentifiers&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="nt">&quot;threshold&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>The paginated query with <code>fromNext</code> set to false returns a result set with the following <code>pagingIdentifiers</code>:</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="nt">&quot;pagingIdentifiers&quot;</span> <span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span> <span class="p">:</span> <span class="mi">4</span>
<span class="p">},</span>
</code></pre></div>
<p>To retrieve the next result set, the next query must be sent with the paging offset (4) incremented by 1.</p>
<div class="highlight"><pre><code class="language-json" data-lang="json"><span></span> <span class="p">{</span>
<span class="nt">&quot;queryType&quot;</span><span class="p">:</span> <span class="s2">&quot;select&quot;</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;dimensions&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;metrics&quot;</span><span class="p">:[],</span>
<span class="nt">&quot;granularity&quot;</span><span class="p">:</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
<span class="nt">&quot;intervals&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;2013-01-01/2013-01-02&quot;</span>
<span class="p">],</span>
<span class="nt">&quot;pagingSpec&quot;</span><span class="p">:{</span><span class="nt">&quot;fromNext&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span><span class="p">,</span> <span class="nt">&quot;pagingIdentifiers&quot;</span><span class="p">:</span> <span class="p">{</span><span class="nt">&quot;wikipedia_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9&quot;</span> <span class="p">:</span> <span class="mi">5</span><span class="p">},</span> <span class="nt">&quot;threshold&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>Note that specifying the <code>fromNext</code> option in the <code>pagingSpec</code> overrides the default value set by <code>druid.query.select.enableFromNextDefault</code> in the server configuration. See <a href="#server-configuration">Server configuration</a> for more details.</p>
<h3 id="server-configuration">Server configuration</h3>
<p>The following runtime properties apply to select queries:</p>
<table><thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead><tbody>
<tr>
<td><code>druid.query.select.enableFromNextDefault</code></td>
<td>If the <code>fromNext</code> property in a query&#39;s <code>pagingSpec</code> is left unspecified, the system will use the value of this property as the default value for <code>fromNext</code>. This option is true by default: the option of setting <code>fromNext</code> to false by default is intended to support backwards compatibility for deployments where some users may still expect behavior from older versions of Druid.</td>
<td>true</td>
</tr>
</tbody></table>
</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="GitHub" href="https://github.com/apache/druid" target="_blank"><span class="fab fa-github"></span></a>
</div>
<div class="text-center license">
Copyright © 2020 <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.1-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>