INSERT

既存の行に行全体、またはupsertデータを挿入します。

既存の行に行全体、またはupsertデータを挿入します。文には完全なPRIMARY KEYを含める必要があります。プライマリ・キーのコンポーネントごとに値が必要ですが、他のカラムの値は必須ではありません。欠落している値はNullに設定されます。IF NOT EXISTSを使用した場合を除き、結果は返されません。

制約事項:

構文

INSERT INTO [keyspace_name.]table_name (column_list) 
VALUES (column_values) 
[IF NOT EXISTS] 
[USING TTL seconds | TIMESTAMP epoch_in_microseconds] 
注: INSERTは、コマンドラインから手動でテストとトラブルシューティングを行うためのJSON構文もサポートしています。「JSON形式の値の挿入」を参照してください。
表 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_list
カラムのコンマ区切りリスト。PRIMARY KEYフィールドはすべて必須です。Nullはすべての静的カラムに挿入され、これらのカラムは除外されます。
column_values

カラムごとに、対応する値のリストを入力します。column_listと同じ順序を使用します。

リテラルか、コレクションの次の構文を使用してデータを入力します。
  • セット:中かっこの中に値を入力します。{ literal [, ...] }.
  • リスト:角かっこの中に値を入力します。[literal [, ...]].
  • マップ:中かっこの中に値を入力します。{ key : value [, ...] }.
TTL seconds

TTLを秒単位で設定します。TTLの期限が切れると、挿入したデータは自動的に削除済みとマークされます(トゥームストーン付き)。TTL設定は、カラム全体ではなく、挿入したデータにのみ適用されます。それ以降はカラムを更新するたびに、TTLがリセットされます。デフォルトでは、値は期限切れになりません。

テーブルのdefault_time_to_liveプロパティを設定すると、デフォルトのTTLをテーブル全体に設定できます。テーブルTTLで定義されている時間を超えるTTLを特定のカラムに設定しようとすると、DataStax Enterpriseでエラーが返されます。

IF NOT EXISTS
PRIMARY KEY値に一致する行がない場合に、新しいデータ行を挿入します。
TIMESTAMP epoch_in_microseconds
挿入したデータに書き込み時間のTIMESTAMPを付けます。エポック(1970年1月1日)以来の経過時間をマイクロ秒単位で入力します。デフォルトでは、書き込みの実際の時刻が使用されます。
制約事項: INSERTでは、同じ文でIF NOT EXISTSUSING TIMESTAMPを使用することはできません。

TTLとTIMESTAMPの指定

TTLとタイムスタンプの両方を使用してサイクリスト名を挿入します。

INSERT INTO cycling.cyclist_name (id, lastname, firstname)
  VALUES (6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47, 'KRUIKSWIJK','Steven')
  USING TTL 86400 AND TIMESTAMP 123456789;
  • Time To Live(TTL、秒単位)
  • エポック以来の経過マイクロ秒数のタイムスタンプ

コレクションへの値の挿入(セットとマップ)

コレクションにデータを挿入するには、値を中かっこで囲みます。設定した値は一意である必要があります。例:サイクリストのカテゴリー・リストを挿入します。
INSERT INTO cycling.cyclist_categories (id,lastname,categories)
  VALUES(
    '6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47', 
    'KRUIJSWIJK', 
    {'GC', 'Time-trial', 'Sprint'});
teamsという名前のマップを挿入します。このマップはユーザーVOSについて直近の2つのチーム・メンバーシップをリストします。
INSERT INTO cycling.cyclist_teams (id,lastname,teams)
  VALUES(
    5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 
    'VOS', 
    { 2015 : 'Rabobank-Liv Woman Cycling Team', 
      2014 : 'Rabobank-Liv Woman Cycling Team' });

コレクション内の1つの項目のサイズは64Kに制限されています。

ユーザー定義型のコレクション・カラムにデータを挿入するには、「ユーザー定義型の使用」で示すように、丸かっこの中で、その型の構成要素を中かっこで囲みます。

行がまだ存在しない場合の行の挿入

IF NOT EXISTSをコマンドに追加して、同じプライマリ・キーを持つ行が既に存在する場合には操作が実行されないようにします。

INSERT INTO cycling.cyclist_name (id, lastname, firstname) 
   VALUES (c4b65263-fe58-4846-83e8-f0e1c13d518f, 'RATTO', 'Rissella') 
IF NOT EXISTS; 
IF NOT EXISTSがないと、コマンドは標準出力なしで処理されます。 IF NOT EXISTSがtrueを返す(このプライマリ・キーを持つ行が存在しない)場合、標準出力で次のようなテーブルが表示されます。
 [applied]
-----------
      True
ただし行が既に存在する場合、コマンドは失敗し、標準出力には次の例に示すように[applied]カラムの値falseと挿入されなかった値を含むテーブルが表示されます。
 [applied] | id                                   | firstname | lastname
-----------+--------------------------------------+-----------+----------
     False | c4b65263-fe58-4846-83e8-f0e1c13d518f |  Rissella |    RATTO
注: IF NOT EXISTSを使用すると、内部的なPaxosの使用に関連してパフォーマンスへの影響が発生します。Paxosの詳細については、「直列化可能な整合性」を参照してください。