blob: 62f7988c040c6a6d363cce064a56a2a788aff0df [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept rev="2.0.0" id="exec_single_node_rows_threshold">
<title>EXEC_SINGLE_NODE_ROWS_THRESHOLD Query Option (<keyword keyref="impala21"/> or higher only)</title>
<titlealts audience="PDF"><navtitle>EXEC_SINGLE_NODE_ROWS_THRESHOLD</navtitle></titlealts>
<prolog>
<metadata>
<data name="Category" value="Impala"/>
<data name="Category" value="Impala Query Options"/>
<data name="Category" value="Scalability"/>
<data name="Category" value="Performance"/>
<data name="Category" value="Developers"/>
<data name="Category" value="Data Analysts"/>
</metadata>
</prolog>
<conbody>
<p rev="2.0.0">
<indexterm audience="hidden">EXEC_SINGLE_NODE_ROWS_THRESHOLD query option</indexterm>
This setting controls the cutoff point (in terms of number of rows scanned) below which Impala treats a query
as a <q>small</q> query, turning off optimizations such as parallel execution and native code generation. The
overhead for these optimizations is applicable for queries involving substantial amounts of data, but it
makes sense to skip them for queries involving tiny amounts of data. Reducing the overhead for small queries
allows Impala to complete them more quickly, keeping admission control slots, CPU, memory, and so on
available for resource-intensive queries.
</p>
<p conref="../shared/impala_common.xml#common/syntax_blurb"/>
<codeblock>SET EXEC_SINGLE_NODE_ROWS_THRESHOLD=<varname>number_of_rows</varname></codeblock>
<p>
<b>Type:</b> numeric
</p>
<p>
<b>Default:</b> 100
</p>
<p>
<b>Usage notes:</b> Typically, you increase the default value to make this optimization apply to more queries.
If incorrect or corrupted table and column statistics cause Impala to apply this optimization
incorrectly to queries that actually involve substantial work, you might see the queries being slower as a
result of remote reads. In that case, recompute statistics with the <codeph>COMPUTE STATS</codeph>
or <codeph>COMPUTE INCREMENTAL STATS</codeph> statement. If there is a problem collecting accurate
statistics, you can turn this feature off by setting the value to -1.
</p>
<p conref="../shared/impala_common.xml#common/internals_blurb"/>
<p>
This setting applies to queries where the number of rows processed can be accurately
determined, either through table and column statistics, or by the presence of a
<codeph>LIMIT</codeph> clause. If Impala cannot accurately estimate the number of rows,
then this setting does not apply.
</p>
<p rev="2.3.0">
In <keyword keyref="impala23_full"/> and higher, where Impala supports the complex data types <codeph>STRUCT</codeph>,
<codeph>ARRAY</codeph>, and <codeph>MAP</codeph>, if a query refers to any column of those types,
the small-query optimization is turned off for that query regardless of the
<codeph>EXEC_SINGLE_NODE_ROWS_THRESHOLD</codeph> setting.
</p>
<p>
For a query that is determined to be <q>small</q>, all work is performed on the coordinator node. This might
result in some I/O being performed by remote reads. The savings from not distributing the query work and not
generating native code are expected to outweigh any overhead from the remote reads.
</p>
<p conref="../shared/impala_common.xml#common/added_in_210"/>
<p conref="../shared/impala_common.xml#common/example_blurb"/>
<p>
A common use case is to query just a few rows from a table to inspect typical data values. In this example,
Impala does not parallelize the query or perform native code generation because the result set is guaranteed
to be smaller than the threshold value from this query option:
</p>
<codeblock>SET EXEC_SINGLE_NODE_ROWS_THRESHOLD=500;
SELECT * FROM enormous_table LIMIT 300;
</codeblock>
<!-- Don't have any other places that tie into this particular optimization technique yet.
Potentially: conceptual topics about code generation, distributed queries
<p conref="../shared/impala_common.xml#common/related_info"/>
<p>
</p>
-->
</conbody>
</concept>