DELETE 構文を使用して、ワイドテーブルからデータを削除するか、または時系列テーブルから指定された条件を満たす時系列を削除できます。
適用エンジンおよびバージョン
DELETE 構文は LindormTable および LindormTSDB で使用できます。
LindormTSDB バージョン 3.4.19 以降では、タイムライン削除がサポートされています。現在のバージョンの確認またはアップグレード方法については、「バージョンガイド」および「マイナーバージョン更新」をご参照ください。
DELETE 構文は LindormTable のすべてのバージョンでサポートされています。
構文
delete_statement ::= DELETE FROM table_identifier
WHERE where_clause
where_clause ::= relation ( AND|OR relation )*
relation ::= column_name operator term
| '(' column_name ( ',' column_name )* ')' operator tuple_literal
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE注意事項
DELETE 文を使用してデータを削除する前に、以下の点に注意してください。
LindormTable の場合:
`2.8.2.26` より前のバージョンの `LindormTable` では、
DELETE文は単一行の削除のみをサポートしています。つまり、行を削除するには、フィルター条件ですべてのプライマリキー列を指定する必要があります。指定しない場合、エラーが発生します。`LindormTable 2.8.2.26` 以降では、バッチ削除がサポートされています。この機能は、デフォルトでは無効になっています。この機能を使用するには、`Lindorm` のテクニカルサポートにご連絡ください。現在のバージョンを表示またはスペックアップするには、「LindormTable バージョンガイド」および「マイナーバージョンの更新」をご参照ください。DELETE 文を実行すると、Lindorm は削除対象のデータに対して削除マーカーを追加します。削除操作の前にデータをクエリすることはありません。そのため、削除対象の行が存在するかどうかに関係なく、削除操作は成功します。
UPSERT 文を使用してデータを書き込み、ヒントワードを使用してデータのバージョンとして将来のタイムスタンプを指定した場合、DELETE 操作を実行しても、DELETE 文が成功したとしても、実際にはデータは削除されません。詳細については、「マルチバージョン データ管理」をご参照ください。
時系列エンジンの場合:
DELETE文の `WHERE` 句では、フィルター条件は `TAG` 列にのみ指定できます。DELETE操作は、特定のデータレコードを削除できません。これは、TAG フィルター条件を満たす時系列内のすべてのデータを削除します。
削除条件(where_clause)
LindormTable および LindormTSDB の両方で、削除条件(where_clause)を指定できます。
LindormTable
2.7.5 より前の LindormTable:WHERE 句にはすべてのプライマリキー列に対する等価フィルター条件(column_name=value)を含める必要があり、単一行のデータのみを削除できます。
2.7.5 以降の LindormTable(バッチ削除が無効の場合):WHERE 句にはすべてのプライマリキー列に対する等価フィルター条件(column_name=value)を含める必要があり、単一行のデータのみを削除できます。
LindormTable 2.7.5 以降で、バッチ削除が有効になっている場合、WHERE 句で幅広いフィルター条件をサポートします。これは、
SELECT文の WHERE 句でサポートされる条件と同様です。重要DELETE 操作中にタイムアウトなどのエラーが発生すると、一部のデータのみが削除される可能性があります。
LindormTSDB
where_clause には TAG 列を指定する必要があります。削除操作により、TAG フィルター条件を満たす時系列のすべてのデータが削除されます。
関係式(relation)
時系列テーブルから時系列を削除するために DELETE 構文を使用する場合、relation パラメーター内の column_identifier フィールドは VARCHAR(TAG)列である必要があります。
例
テーブルスキーマおよびそのデータは次のとおりとします。
-- sensor という名前のテーブルを作成します。
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
p2 INTEGER NOT NULL,
c1 VARCHAR,
c2 VARCHAR,
PRIMARY KEY(p1, p2)
);
-- テーブルにデータを挿入します。
UPSERT INTO sensor(p1, p2, c1, c2) VALUES (1,1,'a','a'),(2,2,'b','b'),(3,3,'c','c');単一行データの削除
DELETE FROM sensor WHERE p1 = 1 AND p2 = 1;結果の確認
SELECT * FROM sensor; 文を実行して、データが削除されたことを確認します。期待される出力は次のとおりです。
+------+------+------+------+
| p1 | p2 | c1 | c2 |
+------+------+------+------+
| 2 | 2 | b | b |
| 3 | 3 | c | c |
+------+------+------+------+複数行データの一括削除
この機能はパブリックプレビュー段階です。ご利用になるには、Lindorm テクニカルサポート(DingTalk ID:s0s3eg3)までお問い合わせください。
DELETE FROM sensor WHERE c1 > 'b' OR p2 > 1;結果の確認
SELECT * FROM sensor; 文を実行して、データが削除されたことを確認します。