blob: a21e026683bd917dc8478aed5ca8780f2e3830f3 [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="ver" id="incompatible_changes">
<title><ph audience="standalone">Incompatible Changes and Limitations in Apache Impala (incubating)</ph><ph audience="integrated">Apache Impala (incubating) Incompatible Changes and Limitations</ph></title>
<prolog>
<metadata>
<data name="Category" value="Impala"/>
<data name="Category" value="Release Notes"/>
<data name="Category" value="Incompatible Changes"/>
<data name="Category" value="Limitations"/>
<data name="Category" value="Upgrading"/>
<data name="Category" value="Troubleshooting"/>
<data name="Category" value="Administrators"/>
<data name="Category" value="Developers"/>
<data name="Category" value="Data Analysts"/>
</metadata>
</prolog>
<conbody>
<p>
The Impala version covered by this documentation library contains the following incompatible changes. These
are things such as file format changes, removed features, or changes to implementation, default
configuration, dependencies, or prerequisites that could cause issues during or after an Impala upgrade.
</p>
<p>
Even added SQL statements or clauses can produce incompatibilities, if you have databases, tables, or columns
whose names conflict with the new keywords. <ph audience="PDF">See
<xref href="impala_reserved_words.xml#reserved_words"/> for the set of reserved words for the current
release, and the quoting techniques to avoid name conflicts.</ph>
</p>
<p outputclass="toc inpage"/>
</conbody>
<concept rev="2.9.0" id="incompatible_changes_29x">
<title>Incompatible Changes Introduced in Impala 2.9.x</title>
<conbody>
<p>
For the full list of issues closed in this release, including any that introduce
behavior changes or incompatibilities, see the
<xref keyref="changelog_29">changelog for <keyword keyref="impala29"/></xref>.
</p>
<!-- Prose explanations of specific incompatible changes - TBD.
<ul>
<li>
</li>
</ul>
-->
</conbody>
</concept>
<concept rev="2.8.0" id="incompatible_changes_28x">
<title>Incompatible Changes Introduced in Impala 2.8.x</title>
<conbody>
<ul>
<li>
<p rev="IMPALA-4160">
Llama support is removed completely from Impala. Related flags (<codeph>--enable_rm</codeph>)
and query options (such as <codeph>V_CPU_CORES</codeph>) remain but do not have any effect.
</p>
<p rev="IMPALA-4160">
If <codeph>--enable_rm</codeph> is passed to Impala, a warning is printed to the log on startup.
</p>
</li>
<li>
<p rev="kudu">
The syntax related to Kudu tables includes a number of new reserved words,
such as <codeph>COMPRESSION</codeph>, <codeph>DEFAULT</codeph>, and <codeph>ENCODING</codeph>, that
might conflict with names of existing tables, columns, or other identifiers from older Impala versions.
See <xref href="impala_reserved_words.xml#reserved_words"/> for the full list of reserved words.
</p>
</li>
<li>
<p rev="kudu">
The DDL syntax for Kudu tables, particularly in the <codeph>CREATE TABLE</codeph> statement, is different
from the special <codeph>impala_next</codeph> fork that was previously used for accessing Kudu tables
from Impala:
</p>
<ul rev="kudu">
<li>
<p>
The <codeph>DISTRIBUTE BY</codeph> clause is now <codeph>PARTITIONED BY</codeph>.
</p>
</li>
<li>
<p>
The <codeph>INTO <varname>N</varname> BUCKETS</codeph>
clause is now <codeph>PARTITIONS <varname>N</varname></codeph>.
</p>
</li>
<li>
<p>
The <codeph>SPLIT ROWS</codeph> clause is replaced by different syntax for specifying
the ranges covered by each partition.
</p>
</li>
</ul>
</li>
<li>
<p>
The <codeph>DESCRIBE</codeph> output for Kudu tables includes several extra columns.
</p>
</li>
<li>
<p rev="kudu IMPALA-4527">
Non-primary-key columns can contain <codeph>NULL</codeph> values by default. The
<codeph>SHOW CREATE TABLE</codeph> output for these columns displays the <codeph>NULL</codeph>
attribute. There was a period during early experimental versions of Impala + Kudu where
non-primary-key columns had the <codeph>NOT NULL</codeph> attribute by default.
</p>
</li>
<li>
<p rev="kudu IMPALA-3710">
The <codeph>IGNORE</codeph> keyword that was present in early experimental versions of Impala + Kudu
is no longer present. The behavior of the <codeph>IGNORE</codeph> keyword is now the default:
DML statements continue with warnings, instead of failing with errors, if they encounter conditions
such as <q>primary key already exists</q> for an <codeph>INSERT</codeph> statement or
<q>primary key already deleted</q> for a <codeph>DELETE</codeph> statement.
</p>
</li>
<li>
<p rev="IMPALA-4589">
The replication factor for Kudu tables must be an odd number.
</p>
</li>
<li>
<p rev="IMPALA-4432">
A UDF compiled into an LLVM IR bitcode module (<codeph>.bc</codeph>) might
encounter a runtime error when native code generation is turned off by
setting the query option <codeph>DISABLE_CODEGEN=1</codeph>.
This issue also applies when running a built-in or native UDF with
more than 20 arguments.
See <xref keyref="IMPALA-4432">IMPALA-4432</xref> for details.
As a workaround, either turn native code generation back on with the query option
<codeph>DISABLE_CODEGEN=0</codeph>, or use the regular UDF compilation path
that does not produce an IR module.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="2.7.0" id="incompatible_changes_27x">
<title>Incompatible Changes Introduced in Impala 2.7.x</title>
<conbody>
<ul>
<li>
<p rev="IMPALA-1731 IMPALA-3868">
Bug fixes related to parsing of floating-point values (IMPALA-1731 and IMPALA-3868) can change
the results of casting strings that represent invalid floating-point values.
For example, formerly a string value beginning or ending with <codeph>inf</codeph>,
such as <codeph>1.23inf</codeph> or <codeph>infinite</codeph>, now are converted to <codeph>NULL</codeph>
when interpreted as a floating-point value.
Formerly, they were interpreted as the special <q>infinity</q> value when converting from string to floating-point.
Similarly, now only the string <codeph>NaN</codeph> (case-sensitive) is interpreted as the special <q>not a number</q>
value. String values containing multiple dots, such as <codeph>3..141</codeph> or <codeph>3.1.4.1</codeph>,
are now interpreted as <codeph>NULL</codeph> rather than being converted to valid floating-point values.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="2.6.0" id="incompatible_changes_26x">
<title>Incompatible Changes Introduced in Impala 2.6.x</title>
<conbody>
<ul>
<li>
<p rev="">
The default for the <codeph>RUNTIME_FILTER_MODE</codeph>
query option is changed to <codeph>GLOBAL</codeph> (the highest setting).
</p>
</li>
<li rev="IMPALA-3007">
<p>
The <codeph>RUNTIME_BLOOM_FILTER_SIZE</codeph> setting is now only used
as a fallback if statistics are not available; otherwise, Impala
uses the statistics to estimate the appropriate size to use for each filter.
</p>
</li>
<li>
<p rev="IMPALA-3199">
Admission control and dynamic resource pools are enabled by default.
When upgrading from an earlier release, you must turn on these settings yourself
if they are not already enabled.
See <xref href="impala_admission.xml#admission_control"/> for details
about admission control.
</p>
</li>
<li>
<p>
Impala reserves some new keywords, in preparation for support for Kudu syntax:
<codeph>buckets</codeph>, <codeph>delete</codeph>, <codeph>distribute</codeph>,
<codeph>hash</codeph>, <codeph>ignore</codeph>, <codeph>split</codeph>, and <codeph>update</codeph>.
</p>
</li>
<li>
<p rev="IMPALA-3554">
For Kerberized clusters, the Catalog service now uses
the Kerberos principal instead of the operating sytem user that runs
the <cmdname>catalogd</cmdname> daemon.
This eliminates the requirement to configure a <codeph>hadoop.user.group.static.mapping.overrides</codeph>
setting to put the OS user into the Sentry administrative group, on clusters where the principal
and the OS user name for this user are different.
</p>
</li>
<li>
<p>
The mechanism for interpreting <codeph>DECIMAL</codeph> literals is
improved, no longer going through an intermediate conversion step
to <codeph>DOUBLE</codeph>:
</p>
<ul>
<li>
<p rev="IMPALA-3163">
Casting a <codeph>DECIMAL</codeph> value to <codeph>TIMESTAMP</codeph>
<codeph>DOUBLE</codeph> produces a more precise
value for the <codeph>TIMESTAMP</codeph> than formerly.
</p>
</li>
<li>
<p rev="IMPALA-3439">
Certain function calls involving <codeph>DECIMAL</codeph> literals
now succeed, when formerly they failed due to lack of a function
signature with a <codeph>DOUBLE</codeph> argument.
</p>
</li>
</ul>
</li>
<li>
<p rev="IMPALA-3155">
Improved type accuracy for <codeph>CASE</codeph> return values.
If all <codeph>WHEN</codeph> clauses of the <codeph>CASE</codeph>
expression are of <codeph>CHAR</codeph> type, the final result
is also <codeph>CHAR</codeph> instead of being converted to
<codeph>STRING</codeph>.
</p>
</li>
<li>
<p conref="../shared/impala_common.xml#common/IMPALA-3662"/>
</li>
<li rev="IMPALA-3452">
<p>
The <codeph>S3_SKIP_INSERT_STAGING</codeph> query option, which is enabled by
default, increases the speed of <codeph>INSERT</codeph> operations for S3 tables.
The speedup applies to regular <codeph>INSERT</codeph>, but not <codeph>INSERT OVERWRITE</codeph>.
The tradeoff is the possibility of inconsistent output files left behind if a
node fails during <codeph>INSERT</codeph> execution.
See <xref href="impala_s3_skip_insert_staging.xml#s3_skip_insert_staging"/> for details.
</p>
</li>
</ul>
<p>
Certain features are turned off by default, to avoid regressions or unexpected
behavior following an upgrade. Consider turning on these features after suitable testing:
</p>
<ul>
<li>
<p rev="IMPALA-2660">
Impala now recognizes the <codeph>auth_to_local</codeph> setting,
specified through the HDFS configuration setting
<codeph>hadoop.security.auth_to_local</codeph>.
This feature is disabled by default; to enable it,
specify <codeph>--load_auth_to_local_rules=true</codeph>
in the <cmdname>impalad</cmdname> configuration settings.
</p>
</li>
<li>
<p rev="IMPALA-2069">
A new query option, <codeph>PARQUET_ANNOTATE_STRINGS_UTF8</codeph>,
makes Impala include the <codeph>UTF-8</codeph> annotation
metadata for <codeph>STRING</codeph>, <codeph>CHAR</codeph>,
and <codeph>VARCHAR</codeph> columns in Parquet files created
by <codeph>INSERT</codeph> or <codeph>CREATE TABLE AS SELECT</codeph>
statements.
</p>
</li>
<li>
<p rev="IMPALA-2835">
A new query option,
<codeph>PARQUET_FALLBACK_SCHEMA_RESOLUTION</codeph>,
lets Impala locate columns within Parquet files based on
column name rather than ordinal position.
This enhancement improves interoperability with applications
that write Parquet files with a different order or subset of
columns than are used in the Impala table.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="2.5.x" id="incompatible_changes_25x">
<title>Incompatible Changes Introduced in Impala 2.5.x</title>
<conbody>
<ul>
<li rev="IMPALA-3044">
<p>
The admission control default limit for concurrent queries (the <uicontrol>max requests</uicontrol>
setting) is now unlimited instead of 200.
</p>
</li>
<li>
<p rev="IMPALA-2749">
Multiplying a mixture of <codeph>DECIMAL</codeph> and <codeph>FLOAT</codeph> or
<codeph>DOUBLE</codeph> values now returns
<codeph>DOUBLE</codeph> rather than <codeph>DECIMAL</codeph>. This
change avoids some cases where an intermediate value would underflow or overflow
and become <codeph>NULL</codeph> unexpectedly. The results of
multiplying <codeph>DECIMAL</codeph> and <codeph>FLOAT</codeph> or
<codeph>DOUBLE</codeph> might now be slightly less precise than
before. Previously, the intermediate types and thus the final result
depended on the exact order of the values of different types being
multiplied, which made the final result values difficult to
reason about.
</p>
</li>
<li rev="IMPALA-2204">
<p>
Previously, the <codeph>_</codeph> and <codeph>%</codeph> wildcard
characters for the <codeph>LIKE</codeph> operator would not match
characters on the second or subsequent lines of multi-line string values. The fix for issue
<xref keyref="IMPALA-2204">IMPALA-2204</xref> causes
the wildcard matching to apply to the entire string for values
containing embedded <codeph>\n</codeph> characters. This could cause
different results than in previous Impala releases for identical
queries on identical data.
</p>
</li>
<li rev="IMPALA-1748">
<p>
Formerly, all Impala UDFs and UDAs required running the
<codeph>CREATE FUNCTION</codeph> statements to
re-create them after each <cmdname>catalogd</cmdname> restart.
In <keyword keyref="impala25_full"/> and higher, functions written in C++ are persisted across
restarts, and the requirement to
re-create functions only applies to functions written in Java. Adapt any
function-reloading logic that you have added to your Impala environment.
</p>
</li>
<li>
<p rev="IMPALA-1651">
<codeph>CREATE TABLE LIKE</codeph> no longer inherits HDFS caching settings from the source table.
</p>
</li>
<li>
<p rev="IMPALA-2070">
The <codeph>SHOW DATABASES</codeph> statement now returns two columns rather than one.
The second column includes the associated comment string, if any, for each database.
Adjust any application code that examines the list of databases and assumes the
result set contains only a single column.
</p>
</li>
<li>
<p>
The output of the <codeph>SHOW FUNCTIONS</codeph> statement includes
two new columns, showing the kind of the function (for example,
<codeph>BUILTIN</codeph>) and whether or not the function persists
across catalog server restarts. For example, the <codeph>SHOW
FUNCTIONS</codeph> output for the
<codeph>_impala_builtins</codeph> database starts with:
</p>
<codeblock>
+--------------+-------------------------------------------------+-------------+---------------+
| return type | signature | binary type | is persistent |
+--------------+-------------------------------------------------+-------------+---------------+
| BIGINT | abs(BIGINT) | BUILTIN | true |
| DECIMAL(*,*) | abs(DECIMAL(*,*)) | BUILTIN | true |
| DOUBLE | abs(DOUBLE) | BUILTIN | true |
...
</codeblock>
</li>
</ul>
</conbody>
</concept>
<concept rev="2.4.x" id="incompatible_changes_24x">
<title>Incompatible Changes Introduced in Impala 2.4.x</title>
<conbody>
<p>
Other than support for DSSD storage, the Impala feature set for <keyword keyref="impala24"/> is the same as for <keyword keyref="impala23"/>.
Therefore, there are no incompatible changes for Impala introduced in <keyword keyref="impala24"/>.
</p>
</conbody>
</concept>
<!-- All 2.3.x subsections go under here -->
<!-- Actually for 2.3 and higher, let's get away from doing a separate subhead for each maintenance release,
because in the normal course of events there will be nothing to add here until the next full release. If something new
needs to get noted, just add a new bullet with wording to indicate which x.y.z release it applies to. -->
<concept rev="2.3.x" id="incompatible_changes_23x">
<title>Incompatible Changes Introduced in Impala 2.3.x</title>
<conbody>
<note conref="../shared/impala_common.xml#common/impala_llama_obsolete"/>
<ul>
<li rev="IMPALA-2005" audience="hidden">
<p>
If a <codeph>CREATE TABLE AS SELECT</codeph> operation fails while data is being inserted,
the table is automatically removed. Previously, the table was left behind with no data.
</p>
</li>
<li rev="IMPALA-2130">
<p>
If Impala encounters a Parquet file that is invalid because of an incorrect magic number,
the query skips the file. This change is caused by the fix for issue <xref keyref="IMPALA-2130">IMPALA-2130</xref>.
Previously, Impala would attempt to read the file despite the possibility that the file was corrupted.
</p>
</li>
<li rev="IMPALA-2233">
<p>
Previously, calls to overloaded built-in functions could treat parameters as <codeph>DOUBLE</codeph>
or <codeph>FLOAT</codeph> when no overload had a signature that matched the exact argument types.
Now Impala prefers the function signature with <codeph>DECIMAL</codeph> parameters in this case.
This change avoids a possible loss of precision in function calls such as <codeph>greatest(0, 99999.8888)</codeph>;
now both parameters are treated as <codeph>DECIMAL</codeph> rather than <codeph>DOUBLE</codeph>, avoiding
any loss of precision in the fractional value.
This could cause slightly different results than in previous Impala releases for certain function calls.
</p>
</li>
<li rev="IMPALA-1675">
<p>
Formerly, adding or subtracting a large interval value to a <codeph>TIMESTAMP</codeph> could produce
a nonsensical result. Now when the result goes outside the range of <codeph>TIMESTAMP</codeph> values,
Impala returns <codeph>NULL</codeph>.
</p>
</li>
<li rev="IMPALA-2251 IMPALA-2257">
<p>
Formerly, it was possible to accidentally create a table with identical row and column delimiters.
This could happen unintentionally, when specifying one of the delimiters and using the
default value for the other. Now an attempt to use identical delimiters still succeeds,
but displays a warning message.
</p>
</li>
<li rev="">
<p>
Formerly, Impala could include snippets of table data in log files by default, for example
when reporting conversion errors for data values. Now any such log messages are only produced
at higher logging levels that you would enable only during debugging.
</p>
</li>
<!-- placeholder -->
</ul>
</conbody>
</concept>
<!-- All 2.2.x subsections go under here -->
<concept rev="2.2.x" id="incompatible_changes_22x">
<title>Incompatible Changes Introduced in Impala 2.2.x</title>
<conbody>
<section id="files_220">
<title>
Changes to File Handling
</title>
<p conref="../shared/impala_common.xml#common/ignore_file_extensions"/>
<p>
The log rotation feature in Impala 2.2.0 and higher
means that older log files are now removed by default.
The default is to preserve the latest 10 log files for each
severity level, for each Impala-related daemon. If you have
set up your own log rotation processes that expect older
files to be present, either adjust your procedures or
change the Impala <codeph>-max_log_files</codeph> setting.
<ph audience="PDF">See <xref href="impala_logging.xml#logs_rotate"/> for details.</ph>
</p>
</section>
<section id="prereqs_210">
<title>
Changes to Prerequisites
</title>
<p conref="../shared/impala_common.xml#common/cpu_prereq"/>
</section>
</conbody>
</concept>
<!-- All 2.1.x subsections go under here -->
<concept rev="2.1.x" id="incompatible_changes_21x">
<title>Incompatible Changes Introduced in Impala 2.1.x</title>
<conbody>
<section id="prereqs_210">
<title>
Changes to Prerequisites
</title>
<p rev="">
Currently, Impala 2.1.x does not function on CPUs without the SSE4.1 instruction set. This minimum CPU
requirement is higher than in previous versions, which relied on the older SSSE3 instruction set. Check
the CPU level of the hosts in your cluster before upgrading to <keyword keyref="impala21_full"/>.
</p>
</section>
<section id="output_format_210">
<title>
Changes to Output Format
</title>
<p>
The <q>small query</q> optimization feature introduces some new information in the
<codeph>EXPLAIN</codeph> plan, which you might need to account for if you parse the text of the plan
output.
</p>
</section>
<section id="reserved_words_210">
<title>
New Reserved Words
</title>
<p>
New SQL syntax introduces additional reserved words:
<codeph>FOR</codeph>, <codeph>GRANT</codeph>, <codeph>REVOKE</codeph>, <codeph>ROLE</codeph>, <codeph>ROLES</codeph>,
<codeph>INCREMENTAL</codeph>.
<ph audience="PDF">As always, see <xref href="impala_reserved_words.xml#reserved_words"/>
for the set of reserved words for the current release, and the quoting techniques to avoid name conflicts.</ph>
</p>
</section>
</conbody>
</concept>
<!-- All 2.0.x subsections go under here -->
<concept rev="2.0.5" id="incompatible_changes_205">
<title>Incompatible Changes Introduced in Impala 2.0.5</title>
<conbody>
<p>
No incompatible changes.
</p>
</conbody>
</concept>
<concept rev="2.0.4" id="incompatible_changes_204">
<title>Incompatible Changes Introduced in Impala 2.0.4</title>
<conbody>
<p>
No incompatible changes.
</p>
</conbody>
</concept>
<concept rev="2.0.3" id="incompatible_changes_203">
<title>Incompatible Changes Introduced in Impala 2.0.3</title>
<conbody>
</conbody>
</concept>
<concept rev="2.0.2" id="incompatible_changes_202">
<title>Incompatible Changes Introduced in Impala 2.0.2</title>
<conbody>
<p>
No incompatible changes.
</p>
</conbody>
</concept>
<concept rev="2.0.1" id="incompatible_changes_201">
<title>Incompatible Changes Introduced in Impala 2.0.1</title>
<conbody>
<ul>
<li>
<p conref="../shared/impala_common.xml#common/insert_hidden_work_directory"/>
</li>
<li>
<p>
The <codeph>abs()</codeph> function now takes a broader range of numeric types as arguments, and the
return type is the same as the argument type.
</p>
</li>
<li>
<p>
Shorthand notation for character classes in regular expressions, such as <codeph>\d</codeph> for digit,
are now available again in regular expression operators and functions such as
<codeph>regexp_extract()</codeph> and <codeph>regexp_replace()</codeph>. Some other differences in
regular expression behavior remain between Impala 1.x and Impala 2.x releases. See
<xref href="impala_incompatible_changes.xml#incompatible_changes_200"/> for details.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="2.0.0" id="incompatible_changes_200">
<title>Incompatible Changes Introduced in Impala 2.0.0</title>
<conbody>
<section id="prereqs_200">
<title>
Changes to Prerequisites
</title>
<p rev="">
Currently, Impala 2.0.x does not function on CPUs without the SSE4.1 instruction set. This minimum CPU
requirement is higher than in previous versions, which relied on the older SSSE3 instruction set. Check
the CPU level of the hosts in your cluster before upgrading to <keyword keyref="impala20_full"/>.
</p>
</section>
<section id="queries_200">
<title>
Changes to Query Syntax
</title>
<p>
The new syntax where query hints are allowed in comments causes some changes in the way comments are
parsed in the <cmdname>impala-shell</cmdname> interpreter. Previously, you could end a
<codeph>--</codeph> comment line with a semicolon and <cmdname>impala-shell</cmdname> would treat that
as a no-op statement. Now, a comment line ending with a semicolon is passed as an empty statement to
the Impala daemon, where it is flagged as an error.
</p>
<p>
Impala 2.0 and later uses a different support library for regular expression parsing than in earlier
Impala versions. Now, Impala uses the
<xref href="https://code.google.com/p/re2/" scope="external" format="html">Google RE2 library</xref>
rather than Boost for evaluating regular expressions. This implementation change causes some
differences in the allowed regular expression syntax, and in the way certain regex operators are
interpreted. The following are some of the major differences (not necessarily a complete list):
</p>
<ul>
<li>
<p>
<codeph>.*?</codeph> notation for non-greedy matches is now supported, where it was not in earlier
Impala releases.
</p>
</li>
<li>
<p>
By default, <codeph>^</codeph> and <codeph>$</codeph> now match only begin/end of buffer, not
begin/end of each line. This behavior can be overridden in the regex itself using the
<codeph>m</codeph> flag.
</p>
</li>
<li>
<p>
By default, <codeph>.</codeph> does not match newline. This behavior can be overridden in the regex
itself using the <codeph>s</codeph> flag.
</p>
</li>
<li>
<p>
<codeph>\Z</codeph> is not supported.
</p>
</li>
<li>
<p>
<codeph>&lt;</codeph> and <codeph>&gt;</codeph> for start of word and end of word are not
supported.
</p>
</li>
<li>
<p>
Lookahead and lookbehind are not supported.
</p>
</li>
<li>
<p>
Shorthand notation for character classes, such as <codeph>\d</codeph> for digit, is not recognized.
(This restriction is lifted in Impala 2.0.1, which restores the shorthand notation.)
</p>
</li>
</ul>
</section>
<section id="output_format_210">
<title>
Changes to Output Format
</title>
<p conref="../shared/impala_common.xml#common/user_kerberized"/>
<p>
The changed format for the user name in secure environments is also reflected where the user name is
displayed in the output of the <codeph>PROFILE</codeph> command.
</p>
<p>
In the output from <codeph>SHOW FUNCTIONS</codeph>, <codeph>SHOW AGGREGATE FUNCTIONS</codeph>, and
<codeph>SHOW ANALYTIC FUNCTIONS</codeph>, arguments and return types of arbitrary
<codeph>DECIMAL</codeph> scale and precision are represented as <codeph>DECIMAL(*,*)</codeph>.
Formerly, these items were displayed as <codeph>DECIMAL(-1,-1)</codeph>.
</p>
</section>
<section id="query_options_200">
<title>
Changes to Query Options
</title>
<p>
The <codeph>PARQUET_COMPRESSION_CODEC</codeph> query option has been replaced by the
<codeph>COMPRESSION_CODEC</codeph> query option.
<ph audience="PDF">See <xref href="impala_compression_codec.xml#compression_codec"/> for details.</ph>
</p>
</section>
<section id="config_options_200">
<title>
Changes to Configuration Options
</title>
<p>
The meaning of the <codeph>--idle_query_timeout</codeph> configuration option is changed, to
accommodate the new <codeph>QUERY_TIMEOUT_S</codeph> query option. Rather than setting an absolute
timeout period that applies to all queries, it now sets a maximum timeout period, which can be adjusted
downward for individual queries by specifying a value for the <codeph>QUERY_TIMEOUT_S</codeph> query
option. In sessions where no <codeph>QUERY_TIMEOUT_S</codeph> query option is specified, the
<codeph>--idle_query_timeout</codeph> timeout period applies the same as in earlier versions.
</p>
<p>
The <codeph>--strict_unicode</codeph> option of <cmdname>impala-shell</cmdname> was removed. To avoid
problems with Unicode values in <cmdname>impala-shell</cmdname>, define the following locale setting
before running <cmdname>impala-shell</cmdname>:
</p>
<codeblock>export LC_CTYPE=en_US.UTF-8
</codeblock>
</section>
<section id="reserved_words_210">
<title>
New Reserved Words
</title>
<p>
Some new SQL syntax requires the addition of new reserved words: <codeph>ANTI</codeph>,
<codeph>ANALYTIC</codeph>, <codeph>OVER</codeph>, <codeph>PRECEDING</codeph>,
<codeph>UNBOUNDED</codeph>, <codeph>FOLLOWING</codeph>, <codeph>CURRENT</codeph>,
<codeph>ROWS</codeph>, <codeph>RANGE</codeph>, <codeph>CHAR</codeph>, <codeph>VARCHAR</codeph>.
<ph audience="PDF">As always, see <xref href="impala_reserved_words.xml#reserved_words"/>
for the set of reserved words for the current release, and the quoting techniques to avoid name conflicts.</ph>
</p>
</section>
<section id="output_files_200">
<title>
Changes to Data Files
</title>
<p id="parquet_block_size">
The default Parquet block size for Impala is changed from 1 GB to 256 MB. This change could have
implications for the sizes of Parquet files produced by <codeph>INSERT</codeph> and <codeph>CREATE
TABLE AS SELECT</codeph> statements.
</p>
<p>
Although older Impala releases typically produced files that were smaller than the old default size of
1 GB, now the file size matches more closely whatever value is specified for the
<codeph>PARQUET_FILE_SIZE</codeph> query option. Thus, if you use a non-default value for this setting,
the output files could be larger than before. They still might be somewhat smaller than the specified
value, because Impala makes conservative estimates about the space needed to represent each column as
it encodes the data.
</p>
<p>
When you do not specify an explicit value for the <codeph>PARQUET_FILE_SIZE</codeph> query option,
Impala tries to keep the file size within the 256 MB default size, but Impala might adjust the file
size to be somewhat larger if needed to accommodate the layout for <term>wide</term> tables, that is,
tables with hundreds or thousands of columns.
</p>
<p>
This change is unlikely to affect memory usage while writing Parquet files, because Impala does not
pre-allocate the memory needed to hold the entire Parquet block.
</p>
</section>
</conbody>
</concept>
<concept rev="1.4.4" id="incompatible_changes_144">
<title>Incompatible Changes Introduced in Impala 1.4.4</title>
<conbody>
<p>
No incompatible changes.
</p>
</conbody>
</concept>
<concept rev="1.4.3" id="incompatible_changes_143">
<title>Incompatible Changes Introduced in Impala 1.4.3</title>
<conbody>
<p>
No incompatible changes. The TLS/SSL security fix does not require any change in the way you interact with
Impala.
</p>
</conbody>
</concept>
<concept rev="1.4.2" id="incompatible_changes_142">
<title>Incompatible Changes Introduced in Impala 1.4.2</title>
<conbody>
<p>
None. Impala 1.4.2 is purely a bug-fix release. It does not include any incompatible changes.
</p>
</conbody>
</concept>
<concept rev="1.4.1" id="incompatible_changes_141">
<title>Incompatible Changes Introduced in Impala 1.4.1</title>
<conbody>
<p>
None. Impala 1.4.1 is purely a bug-fix release. It does not include any incompatible changes.
</p>
</conbody>
</concept>
<concept rev="1.4.0" id="incompatible_changes_140">
<title>Incompatible Changes Introduced in Impala 1.4.0</title>
<prolog>
<metadata>
<data name="Category" value="Deprecated Features"/>
</metadata>
</prolog>
<conbody>
<ul>
<li>
<p>
There is a slight change to required security privileges in the Sentry framework. To create a new
object, now you need the <codeph>ALL</codeph> privilege on the parent object. For example, to create a
new table, view, or function requires having the <codeph>ALL</codeph> privilege on the database
containing the new object. See <xref href="impala_authorization.xml"/> for a full list of operations and
associated privileges.
</p>
</li>
<li>
<p>
With the ability of <codeph>ORDER BY</codeph> queries to process unlimited amounts of data with no
<codeph>LIMIT</codeph> clause, the query options <codeph>DEFAULT_ORDER_BY_LIMIT</codeph> and
<codeph>ABORT_ON_DEFAULT_LIMIT_EXCEEDED</codeph> are now deprecated and have no effect.
<ph audience="PDF">See <xref href="impala_order_by.xml#order_by"/> for details about improvements to
the <codeph>ORDER BY</codeph> clause.</ph>
</p>
</li>
<li>
<p>
There are some changes to the list of reserved words. <ph audience="PDF">See
<xref href="impala_reserved_words.xml#reserved_words"/> for the most current list.</ph> The following
keywords are new:
</p>
<ul>
<li>
<codeph>API_VERSION</codeph>
</li>
<li>
<codeph>BINARY</codeph>
</li>
<li>
<codeph>CACHED</codeph>
</li>
<li>
<codeph>CLASS</codeph>
</li>
<li>
<codeph>PARTITIONS</codeph>
</li>
<li>
<codeph>PRODUCED</codeph>
</li>
<li>
<codeph>UNCACHED</codeph>
</li>
</ul>
<p>
The following were formerly reserved keywords, but are no longer reserved:
</p>
<ul>
<li>
<codeph>COUNT</codeph>
</li>
<li>
<codeph>GROUP_CONCAT</codeph>
</li>
<li>
<codeph>NDV</codeph>
</li>
<li>
<codeph>SUM</codeph>
</li>
</ul>
</li>
<li>
<p>
The fix for issue
<xref keyref="IMPALA-973">IMPALA-973</xref>
changes the behavior of the <codeph>INVALIDATE METADATA</codeph> statement regarding nonexistent
tables. In Impala 1.4.0 and higher, the statement returns an error if the specified table is not in the
metastore database at all. It completes successfully if the specified table is in the metastore
database but not yet recognized by Impala, for example if the table was created through Hive. Formerly,
you could issue this statement for a completely nonexistent table, with no error.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="1.3.3" id="incompatible_changes_133">
<title>Incompatible Changes Introduced in Impala 1.3.3</title>
<conbody>
<p>
No incompatible changes. The TLS/SSL security fix does not require any change in the way you interact with
Impala.
</p>
</conbody>
</concept>
<concept rev="1.3.2" id="incompatible_changes_132">
<title>Incompatible Changes Introduced in Impala 1.3.2</title>
<conbody>
<p>
With the fix for IMPALA-1019, you can use HDFS caching for files that are accessed by Impala.
</p>
</conbody>
</concept>
<concept rev="1.3.1" id="incompatible_changes_131">
<title>Incompatible Changes Introduced in Impala 1.3.1</title>
<conbody>
<ul>
<li>
<p conref="../shared/impala_common.xml#common/regexp_matching"/>
</li>
<li>
<p>
The result set for the <codeph>SHOW FUNCTIONS</codeph> statement includes a new first column, with the
data type of the return value. <ph audience="PDF">See <xref href="impala_show.xml#show"/> for
examples.</ph>
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="1.3.0" id="incompatible_changes_130">
<title>Incompatible Changes Introduced in Impala 1.3.0</title>
<conbody>
<ul>
<li>
<p>
The <codeph>EXPLAIN_LEVEL</codeph> query option now accepts numeric options from 0 (most concise) to 3
(most verbose), rather than only 0 or 1. If you formerly used <codeph>SET EXPLAIN_LEVEL=1</codeph> to
get detailed explain plans, switch to <codeph>SET EXPLAIN_LEVEL=3</codeph>. If you used the mnemonic
keyword (<codeph>SET EXPLAIN_LEVEL=verbose</codeph>), you do not need to change your code because now
level 3 corresponds to <codeph>verbose</codeph>. <ph audience="PDF">See
<xref href="impala_explain_level.xml#explain_level"/> for details about the allowed explain levels, and
<xref href="impala_explain_plan.xml#explain_plan"/> for usage information.</ph>
</p>
</li>
<li>
<p>
The keyword <codeph>DECIMAL</codeph> is now a reserved word. If you have any databases, tables,
columns, or other objects already named <codeph>DECIMAL</codeph>, quote any references to them using
backticks (<codeph>``</codeph>) to avoid name conflicts with the keyword.
<note>
Although the <codeph>DECIMAL</codeph> keyword is a reserved word, currently Impala does not support
<codeph>DECIMAL</codeph> as a data type for columns.
</note>
</p>
</li>
<li>
<p>
The query option formerly named <codeph>YARN_POOL</codeph> is now named
<codeph>REQUEST_POOL</codeph> to reflect its broader use with the Impala admission control feature.
<ph audience="PDF">See <xref href="impala_request_pool.xml#request_pool"/> for information about the
option, and <xref href="impala_admission.xml#admission_control"/> for details about its use with the
admission control feature.</ph>
</p>
</li>
<li>
<p>
There are some changes to the list of reserved words. <ph audience="PDF">See
<xref href="impala_reserved_words.xml#reserved_words"/> for the most current list.</ph>
</p>
<ul>
<li>
<p>
The names of aggregate functions are no longer reserved words, so you can have databases, tables,
columns, or other objects named <codeph>AVG</codeph>, <codeph>MIN</codeph>, and so on without any
name conflicts.
</p>
</li>
<li>
<p>
The internal function names <codeph>DISTINCTPC</codeph> and <codeph>DISTINCTPCSA</codeph> are no
longer reserved words, although <codeph>DISTINCT</codeph> is still a reserved word.
</p>
</li>
<li>
<p>
The keywords <codeph>CLOSE_FN</codeph> and <codeph>PREPARE_FN</codeph> are now reserved words.
<ph audience="PDF">See <xref href="impala_create_function.xml#create_function"/> for their role in
the <codeph>CREATE FUNCTION</codeph> statement, and <xref href="impala_udf.xml#udf_threads"/> for
usage information.</ph>
</p>
</li>
</ul>
</li>
<li>
<p>
The HDFS property <codeph>dfs.client.file-block-storage-locations.timeout</codeph> was renamed to
<codeph>dfs.client.file-block-storage-locations.timeout.millis</codeph>, to emphasize that the unit of
measure is milliseconds, not seconds. Impala requires a timeout of at least 10 seconds, making the
minimum value for this setting 10000. If you are not using cluster management software, you might need to
edit the <filepath>hdfs-site.xml</filepath> file in the Impala configuration directory for the new name
and minimum value.
</p>
</li>
</ul>
</conbody>
</concept>
<concept rev="1.2.4" id="incompatible_changes_124">
<title>Incompatible Changes Introduced in Impala 1.2.4</title>
<conbody>
<p>
There are no incompatible changes introduced in Impala 1.2.4.
</p>
<p>
Previously, after creating a table in Hive, you had to issue the <codeph>INVALIDATE METADATA</codeph>
statement with no table name, a potentially expensive operation on clusters with many databases, tables,
and partitions. Starting in Impala 1.2.4, you can issue the statement <codeph>INVALIDATE METADATA
<varname>table_name</varname></codeph> for a table newly created through Hive. Loading the metadata for
only this one table is faster and involves less network overhead. Therefore, you might revisit your setup
DDL scripts to add the table name to <codeph>INVALIDATE METADATA</codeph> statements, in cases where you
create and populate the tables through Hive before querying them through Impala.
</p>
</conbody>
</concept>
<concept rev="1.2.3" id="incompatible_changes_123">
<title>Incompatible Changes Introduced in Impala 1.2.3</title>
<conbody>
<p>
Because the feature set of Impala 1.2.3 is identical to Impala 1.2.2, there are no new incompatible
changes. See <xref href="impala_incompatible_changes.xml#incompatible_changes_122"/> if you are upgrading
from Impala 1.2.1 or 1.1.x.
</p>
</conbody>
</concept>
<concept rev="1.2.2" id="incompatible_changes_122">
<title>Incompatible Changes Introduced in Impala 1.2.2</title>
<conbody>
<p>
The following changes to SQL syntax and semantics in Impala 1.2.2 could require updates to your SQL code,
or schema objects such as tables or views:
</p>
<ul>
<li>
<p>
With the addition of the <codeph>CROSS JOIN</codeph> keyword, you might need to rewrite any queries
that refer to a table named <codeph>CROSS</codeph> or use the name <codeph>CROSS</codeph> as a table
alias:
</p>
<codeblock>-- Formerly, 'cross' in this query was an alias for t1
-- and it was a normal join query.
-- In 1.2.2 and higher, CROSS JOIN is a keyword, so 'cross'
-- is not interpreted as a table alias, and the query
-- uses the special CROSS JOIN processing rather than a
-- regular join.
select * from t1 cross join t2...
-- Now if CROSS is used in other context such as a table or column name,
-- use backticks to escape it.
create table `cross` (x int);
select * from `cross`;</codeblock>
</li>
<li>
<p>
Formerly, a <codeph>DROP DATABASE</codeph> statement in Impala would not remove the top-level HDFS
directory for that database. The <codeph>DROP DATABASE</codeph> has been enhanced to remove that
directory. (You still need to drop all the tables inside the database first; this change only applies
to the top-level directory for the entire database.)
</p>
</li>
<li>
The keyword <codeph>PARQUET</codeph> is introduced as a synonym for <codeph>PARQUETFILE</codeph> in the
<codeph>CREATE TABLE</codeph> and <codeph>ALTER TABLE</codeph> statements, because that is the common
name for the file format. (As opposed to SequenceFile and RCFile where the <q>File</q> suffix is part of
the name.) Documentation examples have been changed to prefer the new shorter keyword. The
<codeph>PARQUETFILE</codeph> keyword is still available for backward compatibility with older Impala
versions.
</li>
<li>
New overloads are available for several operators and built-in functions, allowing you to insert their
result values into smaller numeric columns such as <codeph>INT</codeph>, <codeph>SMALLINT</codeph>,
<codeph>TINYINT</codeph>, and <codeph>FLOAT</codeph> without using a <codeph>CAST()</codeph> call. If you
remove the <codeph>CAST()</codeph> calls from <codeph>INSERT</codeph> statements, those statements might
not work with earlier versions of Impala.
</li>
</ul>
<p>
Because many users are likely to upgrade straight from Impala 1.x to Impala 1.2.2, also read
<xref href="impala_incompatible_changes.xml#incompatible_changes_121"/> for things to note about upgrading
to Impala 1.2.x in general.
</p>
</conbody>
</concept>
<concept rev="1.2.1" id="incompatible_changes_121">
<title>Incompatible Changes Introduced in Impala 1.2.1</title>
<conbody>
<p>
The following changes to SQL syntax and semantics in Impala 1.2.1 could require updates to your SQL code,
or schema objects such as tables or views:
</p>
<ul>
<li>
<p conref="../shared/impala_common.xml#common/null_sorting_change"/>
<p audience="PDF">
See <xref href="impala_literals.xml#null"/> for more information.
</p>
</li>
</ul>
<p>
The new <cmdname>catalogd</cmdname> service might require changes to any user-written scripts that stop,
start, or restart Impala services, install or upgrade Impala packages, or issue <codeph>REFRESH</codeph> or
<codeph>INVALIDATE METADATA</codeph> statements:
</p>
<ul conref="../shared/impala_common.xml#common/catalogd_xrefs">
<li/>
</ul>
</conbody>
</concept>
<concept rev="1.2" id="incompatible_changes_120">
<title>Incompatible Changes Introduced in Impala 1.2.0 (Beta)</title>
<conbody>
<p>
There are no incompatible changes to SQL syntax in Impala 1.2.0 (beta).
</p>
<p>
The new <cmdname>catalogd</cmdname> service might require changes to any user-written scripts that stop,
start, or restart Impala services, install or upgrade Impala packages, or issue <codeph>REFRESH</codeph> or
<codeph>INVALIDATE METADATA</codeph> statements:
</p>
<ul conref="../shared/impala_common.xml#common/catalogd_xrefs">
<li/>
</ul>
<p>
The new resource management feature interacts with both YARN and Llama services.
<ph audience="PDF">See
<xref href="impala_resource_management.xml#resource_management"/> for usage information for Impala resource
management.</ph>
</p>
</conbody>
</concept>
<concept id="incompatible_changes_111">
<title>Incompatible Changes Introduced in Impala 1.1.1</title>
<conbody>
<p>
There are no incompatible changes in Impala 1.1.1.
</p>
<!-- These couple of paragraphs were originally intended to be conref'ed from the Parquet section of Installing/Using. -->
<!-- But conbodydiv tag too restrictive, can't have just paragraphs and codeblocks inside. -->
<!-- So I will physically copy the info for the time being. -->
<!-- Also copying it under the Upgrading topic. -->
<!-- <conbodydiv conref="impala_parquet.xml#upgrade_parquet_metadata"/> -->
<p>
Previously, it was not possible to create Parquet data through Impala and reuse that table within Hive. Now
that Parquet support is available for Hive 10, reusing existing Impala Parquet data files in Hive requires
updating the table metadata. Use the following command if you are already running Impala 1.1.1:
</p>
<codeblock>ALTER TABLE <varname>table_name</varname> SET FILEFORMAT PARQUETFILE;
</codeblock>
<p>
If you are running a level of Impala that is older than 1.1.1, do the metadata update through Hive:
</p>
<codeblock>ALTER TABLE <varname>table_name</varname> SET SERDE 'parquet.hive.serde.ParquetHiveSerDe';
ALTER TABLE <varname>table_name</varname> SET FILEFORMAT
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat"
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat";
</codeblock>
<p>
Impala 1.1.1 and higher can reuse Parquet data files created by Hive, without any action required.
</p>
<p>
As usual, make sure to upgrade the Impala LZO package to the latest level at the same
time as you upgrade the Impala server.
</p>
</conbody>
</concept>
<concept id="incompatible_changes_11">
<title>Incompatible Change Introduced in Impala 1.1</title>
<conbody>
<ul>
<li>
<p>
The <codeph>REFRESH</codeph> statement now requires a table name; in Impala 1.0, the table name was
optional. This syntax change is part of the internal rework to make <codeph>REFRESH</codeph> a true
Impala SQL statement so that it can be called through the JDBC and ODBC APIs. <codeph>REFRESH</codeph>
now reloads the metadata immediately, rather than marking it for update the next time any affected
table is accessed. The previous behavior, where omitting the table name caused a refresh of the entire
Impala metadata catalog, is available through the new <codeph>INVALIDATE METADATA</codeph> statement.
<codeph>INVALIDATE METADATA</codeph> can be specified with a table name to affect a single table, or
without a table name to affect the entire metadata catalog; the relevant metadata is reloaded the next
time it is requested during the processing for a SQL statement. See
<xref href="impala_refresh.xml#refresh"/> and
<xref href="impala_invalidate_metadata.xml#invalidate_metadata"/> for the latest details about these
statements.
</p>
</li>
</ul>
</conbody>
</concept>
<concept id="incompatible_changes_10">
<title>Incompatible Changes Introduced in Impala 1.0</title>
<conbody>
<ul>
<li>
If you use LZO-compressed text files, when you upgrade Impala to version 1.0, also update the
Impala LZO package to the latest level. See <xref href="impala_txtfile.xml#lzo"/> for
details.
</li>
</ul>
</conbody>
</concept>
</concept>