blob: e3f82b6130ca00d5c54811cb9df62589c03b4d1b [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.10.0" id="disable_codegen_rows_threshold">
<title>DISABLE_CODEGEN_ROWS_THRESHOLD Query Option (<keyword keyref="impala210_full"/> or higher only)</title>
<titlealts audience="PDF"><navtitle>DISABLE CODEGEN 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"> This setting controls the cutoff point (in terms of number
of rows processed per Impala daemon) below which Impala disables native
code generation for the whole query. Native code generation is very
beneficial for queries that process many rows because it reduces the time
taken to process of each row. However, generating the native code adds
latency to query startup. Therefore, automatically disabling codegen for
queries that process relatively small amounts of data can improve query
response time. </p>
<p conref="../shared/impala_common.xml#common/syntax_blurb"/>
<codeblock>SET DISABLE_CODEGEN_ROWS_THRESHOLD=<varname>number_of_rows</varname></codeblock>
<p>
<b>Type:</b> numeric
</p>
<p>
<b>Default:</b> 50000
</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 codegen
being disabled. 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 0.
</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">
If a query uses the complex data types <codeph>STRUCT</codeph>, <codeph>ARRAY</codeph>,
or <codeph>MAP</codeph>, then codegen is never automatically disabled regardless of the
<codeph>DISABLE_CODEGEN_ROWS_THRESHOLD</codeph> setting.
</p>
<p conref="../shared/impala_common.xml#common/added_in_2100"/>
<!-- 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>