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コマンドの後に、カラムをコンマで区切ってリストします。firstnameカラムとlastnameカラムのデータをNullに変更します。

DELETE firstname, lastname FROM cycling.cyclist_name 
WHERE id = e7ae5cf3-d358-4d99-b900-85902fda9bb0;

行全体の削除

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

DELETE FROM cycling.cyclist_name 
WHERE id=e7ae5cf3-d358-4d99-b900-85902fda9bb0 IF EXISTS;
静的カラム条件に基づく行の削除

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

DELETE FROM cycling.cyclist_name 
WHERE id =e7ae5cf3-d358-4d99-b900-85902fda9bb0 
if firstname='Alex' and lastname='Smith';

結果にはすべてのデータが表示されます。

 [applied] | firstname | lastname
-----------+-----------+----------
     False |      Alex |    FRAME

カラムの条件付き削除

IFまたはIF EXISTSを使用して、条件付きでカラムを削除できます。カラムの削除は、条件付きで挿入または更新することに似ています。

指定した行が存在しない場合に処理が実行されないようにするには、IF EXISTSをコマンドに追加します。

DELETE id FROM cyclist_id 
WHERE lastname = 'WELTEN' and firstname = 'Bram' 
IF EXISTS;

IF EXISTSを使用しない場合、コマンドは標準出力なしで続行されます。IF EXISTSがtrueを返す場合(このプライマリ・キーを含む行が存在する場合)、以下のようなテーブルが標準出力で表示されます。

DELETE ... IF EXISTSがTRUEを返す場合の標準出力

一方、そのような行が存在しない場合は、条件によってFALSEが返され、コマンドは失敗します。この場合、標準出力は次のようになります。

DELETE ... IS EXISTSがFALSEを返す場合の標準出力

選択した行の1つ以上のカラム値にテストを適用するには、IF条件を使用します。
DELETE id FROM cyclist_id 
WHERE lastname = 'WELTEN' AND firstname = 'Bram' 
IF age = 2000;
すべての条件がTRUEを返す場合の標準出力は、IF EXISTSがtrueを返した場合(上記を参照)と同じになります。いずれかの条件が失敗した場合の標準出力には、[applied]カラムにFalseと表示され、失敗した条件に関する情報も表示されます。

DELETE ... IFがFALSEを返す場合の標準出力

条件付き削除は、多大なパフォーマンス・コストが発生するので、慎重に使用する必要があります。

TIMESTAMPを使用した古いデータの削除

TIMESTAMPはマイクロ秒を表す整数です。TIMESTAMPを使用して、削除するカラムを識別できます。

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

複数の行の削除

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

DELETE FROM cycling.cyclist_name 
WHERE id = 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47;

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

DELETE FROM cycling.cyclist_name 
WHERE firstname IN ('Alex', 'Marianne');

CQLでは、空の値リストをIN句で使用できます。これは、Javaドライバー・アプリケーションで役立ちます。

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

行の1カラムとして格納されている要素をマップから削除するには、column_nameの後に、要素のキーを角かっこで囲んで指定します。

DELETE sponsorship ['sponsor_name'] FROM cycling.races 
WHERE race_name = 'Criterium du Dauphine';

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

DELETE categories[3] FROM cycling.cyclist_history 
WHERE lastname = 'TIRALONGO';

セットからすべての要素を削除するには、column_nameを単独で指定します。

DELETE sponsorship FROM cycling.races 
WHERE race_name = 'Criterium du Dauphine';