| <?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="delete" rev="kudu"> |
| |
| <title>DELETE Statement (<keyword keyref="impala28"/> or higher only)</title> |
| <titlealts audience="PDF"><navtitle>DELETE</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">DELETE statement</indexterm> |
| Deletes an arbitrary number of rows from 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> |
| DELETE [FROM] [<varname>database_name</varname>.]<varname>table_name</varname> [ WHERE <varname>where_conditions</varname> ] |
| |
| DELETE <varname>table_ref</varname> FROM [<varname>joined_table_refs</varname>] [ WHERE <varname>where_conditions</varname> ] |
| </codeblock> |
| |
| <p> |
| The first form evaluates rows from one table against an optional |
| <codeph>WHERE</codeph> clause, and deletes all the rows that |
| match the <codeph>WHERE</codeph> conditions, or all rows if |
| <codeph>WHERE</codeph> is omitted. |
| </p> |
| |
| <p> |
| The second form evaluates one or more join clauses, and deletes |
| all matching rows from one of the tables. The join clauses can |
| include non-Kudu tables, but the table from which the rows |
| are deleted must be a Kudu table. The <codeph>FROM</codeph> |
| keyword is required in this case, to separate the name of |
| the table whose rows are being deleted from the table names |
| of the join clauses. |
| </p> |
| |
| <p conref="../shared/impala_common.xml#common/usage_notes_blurb"/> |
| |
| <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> |
| 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> |
| If the <codeph>WHERE</codeph> clause is omitted, all rows are removed from the table. |
| </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 deleted 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> |
| A <codeph>DELETE</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 rows than expected in the table |
| because it is undefined whether the <codeph>DELETE</codeph> applies to rows that are |
| inserted or updated while the <codeph>DELETE</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 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 delete rows from a specified |
| table, either all rows or rows that match a <codeph>WHERE</codeph> |
| clause: |
| </p> |
| |
| <codeblock> |
| -- Deletes all rows. The FROM keyword is optional. |
| DELETE FROM kudu_table; |
| DELETE kudu_table; |
| |
| -- Deletes 0, 1, or more rows. |
| -- (If c1 is a single-column primary key, the statement could only |
| -- delete 0 or 1 rows.) |
| DELETE FROM kudu_table WHERE c1 = 100; |
| |
| -- Deletes all rows that match all the WHERE conditions. |
| DELETE FROM kudu_table WHERE |
| (c1 > c2 OR c3 IN ('hello','world')) AND c4 IS NOT NULL; |
| DELETE FROM t1 WHERE |
| (c1 IN (1,2,3) AND c2 > c3) OR c4 IS NOT NULL; |
| DELETE FROM time_series WHERE |
| year = 2016 AND month IN (11,12) AND day > 15; |
| |
| -- WHERE condition with a subquery. |
| DELETE FROM t1 WHERE |
| c5 IN (SELECT DISTINCT other_col FROM other_table); |
| |
| -- Does not delete any rows, because the WHERE condition is always false. |
| DELETE FROM kudu_table WHERE 1 = 0; |
| </codeblock> |
| |
| <p> |
| The following examples show how to delete rows that are part |
| of the result set from a join: |
| </p> |
| |
| <codeblock> |
| -- Remove _all_ rows from t1 that have a matching X value in t2. |
| DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x; |
| |
| -- Remove _some_ rows from t1 that have a matching X value in t2. |
| DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x |
| WHERE t1.y = FALSE and t2.z > 100; |
| |
| -- Delete from a Kudu table based on a join with a non-Kudu table. |
| DELETE t1 FROM kudu_table t1 JOIN non_kudu_table t2 ON t1.x = t2.x; |
| |
| -- The tables can be joined in any order as long as the Kudu table |
| -- is specified as the deletion target. |
| DELETE t2 FROM non_kudu_table t1 JOIN kudu_table t2 ON t1.x = t2.x; |
| </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_update.xml#update"/>, <xref href="impala_upsert.xml#upsert"/> |
| </p> |
| |
| </conbody> |
| |
| </concept> |