mirror of
https://github.com/apache/impala.git
synced 2025-12-30 03:01:44 -05:00
Fill in syntax, usage notes, examples for UPDATE, DELETE, UPSERT. Take out IGNORE from INSERT. Add 2nd syntax form and examples for DELETE. Add join syntax to UPDATE. Change-Id: I60512b7957fb53d86d3123a4f1d46fbb355f4665 Reviewed-on: http://gerrit.cloudera.org:8080/5646 Reviewed-by: Matthew Jacobs <mj@cloudera.com> Tested-by: Impala Public Jenkins
182 lines
6.4 KiB
XML
182 lines
6.4 KiB
XML
<?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 id="update" rev="kudu">
|
|
|
|
<title>UPDATE Statement (<keyword keyref="impala28"/> or higher only)</title>
|
|
<titlealts audience="PDF"><navtitle>UPDATE</navtitle></titlealts>
|
|
<prolog>
|
|
<metadata>
|
|
<data name="Category" value="Impala"/>
|
|
<data name="Category" value="SQL"/>
|
|
<data name="Category" value="Kudu"/>
|
|
<data name="Category" value="ETL"/>
|
|
<data name="Category" value="Ingest"/>
|
|
<data name="Category" value="DML"/>
|
|
<data name="Category" value="Developers"/>
|
|
<data name="Category" value="Data Analysts"/>
|
|
</metadata>
|
|
</prolog>
|
|
|
|
<conbody>
|
|
|
|
<p>
|
|
<indexterm audience="hidden">UPDATE statement</indexterm>
|
|
Updates an arbitrary number of rows in a Kudu table.
|
|
This statement only works for Impala tables that use the Kudu storage engine.
|
|
</p>
|
|
|
|
<p conref="../shared/impala_common.xml#common/syntax_blurb"/>
|
|
|
|
<codeblock>
|
|
UPDATE [<varname>database_name</varname>.]<varname>table_name</varname> SET <varname>col</varname> = <varname>val</varname> [, <varname>col</varname> = <varname>val</varname> ... ]
|
|
[ FROM <varname>joined_table_refs</varname> ]
|
|
[ WHERE <varname>where_conditions</varname> ]
|
|
</codeblock>
|
|
|
|
<p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>
|
|
|
|
<p>
|
|
None of the columns that make up the primary key can be updated by the
|
|
<codeph>SET</codeph> clause.
|
|
</p>
|
|
|
|
<p>
|
|
The conditions in the <codeph>WHERE</codeph> clause are the same ones allowed
|
|
for the <codeph>SELECT</codeph> statement. See <xref href="impala_select.xml#select"/>
|
|
for details.
|
|
</p>
|
|
|
|
<p>
|
|
If the <codeph>WHERE</codeph> clause is omitted, all rows in the table are updated.
|
|
</p>
|
|
|
|
<p>
|
|
The conditions in the <codeph>WHERE</codeph> clause can refer to
|
|
any combination of primary key columns or other columns. Referring to
|
|
primary key columns in the <codeph>WHERE</codeph> clause is more efficient
|
|
than referring to non-primary key columns.
|
|
</p>
|
|
|
|
<p>
|
|
Because Kudu currently does not enforce strong consistency during concurrent DML operations,
|
|
be aware that the results after this statement finishes might be different than you
|
|
intuitively expect:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<p>
|
|
If some rows cannot be updated because their
|
|
some primary key columns are not found, due to their being deleted
|
|
by a concurrent <codeph>DELETE</codeph> operation,
|
|
the statement succeeds but returns a warning.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
An <codeph>UPDATE</codeph> statement might also overlap with
|
|
<codeph>INSERT</codeph>, <codeph>UPDATE</codeph>,
|
|
or <codeph>UPSERT</codeph> statements running concurrently on the same table.
|
|
After the statement finishes, there might be more or fewer matching rows than expected
|
|
in the table because it is undefined whether the <codeph>UPDATE</codeph> applies to rows
|
|
that are inserted or updated while the <codeph>UPDATE</codeph> is in progress.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
The number of affected rows is reported in an <cmdname>impala-shell</cmdname> message
|
|
and in the query profile.
|
|
</p>
|
|
|
|
<p>
|
|
The optional <codeph>FROM</codeph> clause lets you restrict the
|
|
updates to only the rows in the specified table that are part
|
|
of the result set for a join query. The join clauses can include
|
|
non-Kudu tables, but the table from which the rows are deleted
|
|
must be a Kudu table.
|
|
</p>
|
|
|
|
<p conref="../shared/impala_common.xml#common/dml_blurb_kudu"/>
|
|
|
|
<note conref="../shared/impala_common.xml#common/compute_stats_next"/>
|
|
|
|
<p conref="../shared/impala_common.xml#common/example_blurb"/>
|
|
|
|
<p>
|
|
The following examples show how to perform a simple update
|
|
on a table, with or without a <codeph>WHERE</codeph> clause:
|
|
</p>
|
|
|
|
<codeblock>
|
|
-- Set all rows to the same value for column c3.
|
|
-- In this case, c1 and c2 are primary key columns
|
|
-- and so cannot be updated.
|
|
UPDATE kudu_table SET c3 = 'not applicable';
|
|
|
|
-- Update only the rows that match the condition.
|
|
UPDATE kudu_table SET c3 = NULL WHERE c1 > 100 AND c3 IS NULL;
|
|
|
|
-- Does not update any rows, because the WHERE condition is always false.
|
|
UPDATE kudu_table SET c3 = 'impossible' WHERE 1 = 0;
|
|
|
|
-- Change the values of multiple columns in a single UPDATE statement.
|
|
UPDATE kudu_table SET c3 = upper(c3), c4 = FALSE, c5 = 0 WHERE c6 = TRUE;
|
|
</codeblock>
|
|
|
|
<p>
|
|
The following examples show how to perform an update using the
|
|
<codeph>FROM</codeph> keyword with a join clause:
|
|
</p>
|
|
|
|
<codeblock>
|
|
-- Uppercase a column value, only for rows that have
|
|
-- an ID that matches the value from another table.
|
|
UPDATE kudu_table SET c3 = upper(c3)
|
|
FROM kudu_table JOIN non_kudu_table
|
|
ON kudu_table.id = non_kudu_table.id;
|
|
|
|
-- Same effect as previous statement.
|
|
-- Assign table aliases in FROM clause, then refer to
|
|
-- short names elsewhere in the statement.
|
|
UPDATE t1 SET c3 = upper(c3)
|
|
FROM kudu_table t1 JOIN non_kudu_table t2
|
|
ON t1.id = t2.id;
|
|
|
|
-- Same effect as previous statements, but more efficient.
|
|
-- Use WHERE clause to skip updating values that are
|
|
-- already uppercase.
|
|
UPDATE t1 SET c3 = upper(c3)
|
|
FROM kudu_table t1 JOIN non_kudu_table t2
|
|
ON t1.id = t2.id
|
|
WHERE c3 != upper(c3);
|
|
</codeblock>
|
|
|
|
<p conref="../shared/impala_common.xml#common/related_info"/>
|
|
|
|
<p>
|
|
<xref href="impala_kudu.xml#impala_kudu"/>, <xref href="impala_insert.xml#insert"/>,
|
|
<xref href="impala_delete.xml#delete"/>, <xref href="impala_upsert.xml#upsert"/>
|
|
</p>
|
|
|
|
</conbody>
|
|
|
|
</concept>
|