DELETE
デスクリプション
このステートメントは、指定されたTable(base index)パーティション内のデータを条件付きで削除するために使用されます。
この操作は、このbase indexに関連するrollup indexのデータも削除します。
Syntax
Syntax 1: この構文ではフィルタ述語のみを指定できます
DELETE FROM table_name [PARTITION partition_name | PARTITIONS (partition_name [, partition_name])]
WHERE
column_name op { value | value_list } [ AND column_name op { value | value_list } ...];
構文2: この構文はUNIQUE KEYモデルでのみ使用できます
[cte]
DELETE FROM table_name
[PARTITION partition_name | PARTITIONS (partition_name [, partition_name])]
[USING additional_tables]
WHERE condition
必須パラメータ
- table_name: 行を削除するTableを指定します。
- column_name: table_nameに属するカラム
- op: 論理比較演算子。opのオプション型には次のものが含まれます: =, >, <, >=, <=, !=, in, not in
- value | value_list: 論理比較に使用される値または値のリスト
- WHERE condition: 削除する行を選択するために使用する条件を指定します
オプションパラメータ
- cte: Common Table Expression、例: 'WITH a AS SELECT * FROM tbl'。
- PARTITION partition_name | PARTITIONS (partition_name [, partition_name]): 削除する行を選択するパーティションまたはパーティションを指定します
- table_alias: Tableのエイリアス
- USING additional_tables: 削除する行を特定するためにWHERE句で追加のTableを参照する必要がある場合は、USING句でそれらのTable名を指定します。削除する行を特定するサブクエリを指定するためにもUSING句を使用できます。
注意
- AGGREGATE (UNIQUE) modelを使用する場合、キーカラムの条件のみを指定できます。
- 選択されたキーカラムがrollupに存在しない場合、削除を実行できません。
- syntax 1を使用する場合、条件は「and」関係のみを持つことができます。「or」関係を実現したい場合は、2つのDELETE文で条件を記述する必要があります。
- syntax 1では、パーティションTableの場合、パーティションを指定できます。指定しない場合、Dorisは指定された条件からパーティションを推論します。Dorisが条件からパーティションを推論できない2つのケースがあります: 1) 条件にパーティションカラムが含まれていない; 2) パーティションカラムの演算子がinではない。パーティションTableがUniqueTableではなく、パーティションが指定されていない、または条件からパーティションを推論できない場合、すべてのパーティションにdelete文を適用するためには、セッション変数delete_without_partitionをtrueにする必要があります。
Tips
この機能はApache Doris 1.2バージョンからサポートされています
- この文の実行後、一定期間クエリ効率が低下する可能性があります。影響の程度は、文で指定されたdelete条件の数によって異なります。指定する条件が多いほど、影響が大きくなります。
例
-
my_tableパーティションp1でk1カラム値が3であるデータ行を削除
DELETE FROM my_table PARTITION p1
WHERE k1 = 3; -
my_tableのパーティションp1において、列k1の値が3以上かつ列k2の値が"abc"であるデータ行を削除する
DELETE FROM my_table PARTITION p1
WHERE k1 >= 3 AND k2 = "abc"; -
my_tableのパーティションp1、p2において、列k1の値が3以上かつ列k2の値が"abc"であるデータ行を削除する
DELETE FROM my_table PARTITIONS (p1, p2)
WHERE k1 >= 3 AND k2 = "abc"; -
t2joint3の結果を使用してt1から行を削除する。delete table は unique key model のみをサポートする-- create t1, t2, t3 tables
CREATE TABLE t1
(id INT, c1 BIGINT, c2 STRING, c3 DOUBLE, c4 DATE)
UNIQUE KEY (id)
DISTRIBUTED BY HASH (id)
PROPERTIES('replication_num'='1', "function_column.sequence_col" = "c4");
CREATE TABLE t2
(id INT, c1 BIGINT, c2 STRING, c3 DOUBLE, c4 DATE)
DISTRIBUTED BY HASH (id)
PROPERTIES('replication_num'='1');
CREATE TABLE t3
(id INT)
DISTRIBUTED BY HASH (id)
PROPERTIES('replication_num'='1');
-- insert data
INSERT INTO t1 VALUES
(1, 1, '1', 1.0, '2000-01-01'),
(2, 2, '2', 2.0, '2000-01-02'),
(3, 3, '3', 3.0, '2000-01-03');
INSERT INTO t2 VALUES
(1, 10, '10', 10.0, '2000-01-10'),
(2, 20, '20', 20.0, '2000-01-20'),
(3, 30, '30', 30.0, '2000-01-30'),
(4, 4, '4', 4.0, '2000-01-04'),
(5, 5, '5', 5.0, '2000-01-05');
INSERT INTO t3 VALUES
(1),
(4),
(5);
-- remove rows from t1
DELETE FROM t1
USING t2 INNER JOIN t3 ON t2.id = t3.id
WHERE t1.id = t2.id;
期待される結果は、Tablet1でid = 1の行のみを削除することです
+----+----+----+--------+------------+
| id | c1 | c2 | c3 | c4 |
+----+----+----+--------+------------+
| 2 | 2 | 2 | 2.0 | 2000-01-02 |
| 3 | 3 | 3 | 3.0 | 2000-01-03 |
+----+----+----+--------+------------+
-
CTEを使用する
create table orders(
o_orderkey bigint,
o_totalprice decimal(15, 2)
) unique key(o_orderkey)
distributed by hash(o_orderkey) buckets 1
properties (
"replication_num" = "1"
);
insert into orders values
(1, 34.1),
(2, 432.8);
create table lineitem(
l_linenumber int,
o_orderkey bigint,
l_discount decimal(15, 2)
) unique key(l_linenumber)
distributed by hash(l_linenumber) buckets 1
properties (
"replication_num" = "1"
);
insert into lineitem values
(1, 1, 1.23),
(2, 1, 3.21),
(3, 2, 18.08),
(4, 2, 23.48);
with discount_orders as (
select * from orders
where o_totalprice > 100
)
delete from lineitem
using discount_orders
where lineitem.o_orderkey = discount_orders.o_orderkey;
Keywords
DELETE