DELETE

1つ以上のカラムからデータを削除するか、行全体を削除します。

選択した1つ以上のカラムからデータを削除するか(データはNullで置き換えられます)、カラムが指定されていない場合は行全体を削除します。選択した各パーティション内のデータをアトミックかつ個別に削除します。データはディスクから即座に削除されるのではなく、トゥームストーンのマークが付き、猶予期間が過ぎると削除されます。
注意: DELETEの使用はパフォーマンスに影響を及ぼす可能性があります。トゥームストーンが作成されるため、コンパクションによって削除されない限り古いデータが読み込まれます。

構文

DELETE [ column_name [ term ] [ , ... ] ]
  FROM [keyspace_name.]table_name 
  [ USING TIMESTAMP timestamp_value ]
  WHERE PK_column_conditions 
  [ ( IF EXISTS | IF static_column_conditions ) ] ;
1. 凡例
構文規則 説明
大文字 リテラル・キーワード。
小文字 リテラル以外。
イタリック体 変数値。ユーザー定義値と置き換えます。
[] 任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。
( ) グループ。丸かっこ(( ))は、選択肢を含むグループを示します。丸かっこは入力しないでください。
| または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。
... 繰り返し可能。省略記号(...)は、構文要素を必要な回数だけ繰り返すことができることを示します。
'Literal string' 単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。
{ key : value } マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。
<datatype1,datatype2> セット、リスト、マップ、またはタプル。山かっこ(< >)で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。
cql_statement; CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。
[--] コマンドライン・オプションとコマンド引数は、2つのハイフン(--)。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。
' <schema> ... </schema> ' 検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。
@xml_entity='xml_entity_type' 検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。
column_name

削除するカラムを設定するか、カラムのコンマ区切りリストを使用します。カラムが指定されていない場合は、行全体が削除されます。

term
コレクション型の要素識別子。
  • リストは項目のインデックス番号を指定します(先頭は0)。
  • マップは項目の要素キーを指定します。
timestamp_value

timestamp_valueよりも古い値を削除します。

PK_column_conditions
PRIMARY KEY値を照合するための構文。複数の条件はANDで区切ります。
制約事項:
  • 等号(=)とINのみがサポートされています。
  • 静的カラム条件を指定する場合、範囲(IN)はサポートされません。「IF condition」を参照してください。
  • 条件に一致する行のカラムからデータを削除する場合は、すべてのプライマリ・キーに対して条件を指定する必要があります。
IF EXISTS

文によって処理が実行されない場合はエラーが返されます。

IF condition
静的フィールドが一致するための条件を指定します。複数の条件はANDで区切ります。
制約事項: プライマリ・キーの文を変更します。すべてのプライマリ・キーが必須です。

指定されたカラムのデータの行からの削除

特定のカラムのデータを削除するには、DELETEコマンドの後に、カラムをコンマで区切ってリストします。idで指定されたサイクリストについて、firstnameカラムとlastnameカラムのデータをNullに変更します。

DELETE firstname, lastname
FROM cycling.cyclist_name 
WHERE id = e7ae5cf3-d358-4d99-b900-85902fda9bb0;
firstnameとlastnameを削除する前のテーブル・スキーマと入力済みのテーブルは以下のとおりです。
CREATE TABLE cycling.cyclist_name (
  id UUID PRIMARY KEY,
  lastname text,
  firstname text
);
 id                                   | firstname | lastname
--------------------------------------+-----------+-----------------
 e7ae5cf3-d358-4d99-b900-85902fda9bb0 |      Alex |           FRAME
 fb372533-eb95-4bb4-8685-6ef61e994caa |   Michael |        MATTHEWS
 5b6962dd-3f90-4c93-8f61-eabfa4a803e2 |  Marianne |             VOS
 220844bf-4860-49d6-9a4b-6b5d3a79cbfb |     Paolo |       TIRALONGO
 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47 |    Steven |      KRUIKSWIJK
 e7cd5752-bc0d-4157-a80f-7523add8dbcd |      Anna | VAN DER BREGGEN

(6 rows)
結果:
 id                                   | firstname | lastname
--------------------------------------+-----------+-----------------
 e7ae5cf3-d358-4d99-b900-85902fda9bb0 |      null |            null
 fb372533-eb95-4bb4-8685-6ef61e994caa |   Michael |        MATTHEWS
 5b6962dd-3f90-4c93-8f61-eabfa4a803e2 |  Marianne |             VOS
 220844bf-4860-49d6-9a4b-6b5d3a79cbfb |     Paolo |       TIRALONGO
 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47 |    Steven |      KRUIKSWIJK
 e7cd5752-bc0d-4157-a80f-7523add8dbcd |      Anna | VAN DER BREGGEN

(6 rows)

行全体の削除

DELETEの後にカラム名を入力しないと、条件に一致する行全体が削除されます。IF EXISTSを指定して、サイクリスト・エントリーをcyclist_nameテーブルから削除し、条件に一致する行がない場合はエラーを返します。

DELETE FROM cycling.cyclist_name 
WHERE id = e7ae5cf3-d358-4d99-b900-85902fda9bb0
IF EXISTS;
IF EXISTSを使用しない場合、コマンドは標準出力なしで続行されます。IF EXISTSTrueを返す場合(このプライマリ・キーを含む行が存在する場合)、以下のようなテーブルが標準出力で表示されます。
 [applied]
-----------
      True
Alex Frameという名前のサイクリストがテーブルから完全に削除されました。
 id                                   | firstname | lastname
--------------------------------------+-----------+-----------------
 fb372533-eb95-4bb4-8685-6ef61e994caa |   Michael |        MATTHEWS
 5b6962dd-3f90-4c93-8f61-eabfa4a803e2 |  Marianne |             VOS
 220844bf-4860-49d6-9a4b-6b5d3a79cbfb |     Paolo |       TIRALONGO
 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47 |    Steven |      KRUIKSWIJK
 e7cd5752-bc0d-4157-a80f-7523add8dbcd |      Anna | VAN DER BREGGEN

(5 rows)

静的カラム条件に基づく行の削除

IF条件はWHERE句を制限し、非PRIMARY KEYカラム(firstnameやlastnameなど)の値に基づく選択を可能にします。以下の例では、firstnameとlastnameが条件に一致していない場合はサイクリスト・レコードが削除されます。

DELETE FROM cycling.cyclist_name 
WHERE id = fb372533-eb95-4bb4-8685-6ef61e994caa 
IF firstname = 'Michael' AND lastname = 'Smith';
結果には該当するすべてのデータが表示されます。lastnameが条件に一致しなかったため、条件は満たされませんでした。したがって、操作は適用されませんでした。
 [applied] | firstname | lastname
-----------+-----------+----------
     False |   Michael | MATTHEWS

条件付きでデータをカラムから削除する

条件付きでデータをカラムから削除するには、IFまたはIF EXISTS句を使用します。カラム・データの条件付き削除は、UPDATEの条件付き実行に似ています。

指定した行が存在しない場合に処理が実行されないようにするには、IF EXISTSをコマンドに追加します。
DELETE id FROM cycling.cyclist_id 
WHERE lastname = 'JONES' and firstname = 'Bram' 
IF EXISTS;
一方、そのような行が存在しない場合は、条件によってFalseが返され、コマンドは失敗します。この場合、標準出力は次のようになります。
 [applied]
-----------
     False
選択した行の1つ以上のカラム値にテストを適用するには、IF条件を使用します。
DELETE id FROM cycling.cyclist_id 
WHERE lastname = 'WELTEN' AND firstname = 'Bram' 
IF age = 20;
すべての条件がTRUEを返す場合の標準出力は、IF EXISTSがtrueを返した場合と同じになります。いずれかの条件が失敗した場合の標準出力には、[applied]カラムにFalseと表示され、失敗した条件に関する情報も表示されます。
 [applied] | age
-----------+-----
     False |  18
注意: 条件付き削除は、多大なパフォーマンス・コストが発生するので、慎重に使用する必要があります。

1つ以上の行の削除

WHERE句では、指定したテーブルから削除する行を指定します。

DELETE FROM cycling.cyclist_name 
WHERE id = 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47;
Steven Kruikswijkという名前のサイクリストがテーブルから完全に削除されました。
 id                                   | firstname | lastname
--------------------------------------+-----------+-----------------
 fb372533-eb95-4bb4-8685-6ef61e994caa |   Michael |        MATTHEWS
 5b6962dd-3f90-4c93-8f61-eabfa4a803e2 |  Marianne |             VOS
 220844bf-4860-49d6-9a4b-6b5d3a79cbfb |     Paolo |       TIRALONGO
 e7cd5752-bc0d-4157-a80f-7523add8dbcd |      Anna | VAN DER BREGGEN

(4 rows)

複数の行を削除するには、キーワードINを使用して、値のコンマ区切りリストを丸かっこで囲んで指定します。

DELETE FROM cycling.cyclist_name 
WHERE id IN (
  5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 220844bf-4860-49d6-9a4b-6b5d3a79cbfb
);
注: 非プライマリ・キーでのIN述語の使用はサポートされていません。
ヒント: CQLでは、空の値リストをIN句で使用できます。これは、Javaドライバー・アプリケーションで役立ちます。
Marianne VosとPaolo Tiralongoという名前のサイクリストがテーブルから削除されました。
 id                                   | firstname | lastname
--------------------------------------+-----------+-----------------
 fb372533-eb95-4bb4-8685-6ef61e994caa |   Michael |        MATTHEWS
 e7cd5752-bc0d-4157-a80f-7523add8dbcd |      Anna | VAN DER BREGGEN

(2 rows)

タイムスタンプを使用した古いデータの削除

TIMESTAMPはマイクロ秒を表す整数です。TIMESTAMPを使用して、削除するデータを特定します。クエリーによって、タイムスタンプより古いパーティションの行が削除されます。

DELETE firstname, lastname
FROM cycling.cyclist_name
USING TIMESTAMP 1318452291034
WHERE lastname = 'VOS';

コレクション・セット、リスト、またはマップからの削除

レースのセットからすべての要素を削除するには、sponsorshipであるcolumn_nameを指定します。
DELETE sponsorship
FROM cycling.race_sponsors 
WHERE race_name = 'Giro d''Italia';

リストから要素を削除するには、column_nameの後に、リスト・インデックス位置を角かっこで囲んで指定します。

DELETE sponsorship[2]
FROM cycling.race_sponsors
WHERE race_year = 2018
  AND race_name = 'Tour de France';
警告: インデックス位置を使用してlistから要素を削除するには、内部読み取りが必要です。さらに、クライアント側アプリケーションでは、リスト全体を読み取り、削除する値を検索することによってのみインデックス位置を検出できるため、操作のレイテンシーが増えます。操作の完了前に別のスレッドまたはクライアントがリストの先頭に要素を書き込んだ場合には、誤ったデータが削除されます。
ヒント: より安全で高速な方法でリスト要素を削除するために、UPDATEコマンドと減算演算子を併用することを推奨します。「リスト・フィールド」を参照してください。
マップから要素を削除するには、column_nameの後に、要素のキーを角かっこで囲んで指定します。
DELETE teams[2014]
FROM cycling.cyclist_teams
WHERE id = 5b6962dd-3f90-4c93-8f61-eabfa4a803e2;