INSERT

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

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

制約事項:
  • INSERTではカウンター・カラムはサポートされていません。代わりにUPDATEを使用してください。
  • PRIMARY KEYは、partition keyの後にクラスター化カラムが続きます。

構文

INSERT [ JSON ] INTO [keyspace_name.]table_name
  [ column_list VALUES column_values ] 
  [ IF NOT EXISTS ] 
  [ USING [ TTL seconds ] [ [ AND ] TIMESTAMP epoch_in_microseconds ] ] ;
注: INSERTは、コマンドラインから手動でテストとトラブルシューティングを行うためのJSON構文もサポートしています。「JSON形式の値の挿入」を参照してください。
注: アクセス許可が有効になっている場合INSERTコマンドまたはUPDATEコマンドを使用してマテリアライズド・ビュー(MV)が含まれたベース・テーブルを変更する場合は、そのベース・テーブルに対するMODIFYまたはALL PERMISSIONSがユーザーに与えられている必要があります。
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 [, ...] }という同等のHOCON構文でフォーマットされています。
  • リスト:角かっこの中に値を入力します。[literal [, ...]].
  • Map: 中かっこの中に値を入力します。 { key : value [, ...] }という同等のHOCON構文でフォーマットされています。
TTL seconds

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

テーブルのdefault_time_to_liveプロパティを設定すると、デフォルトのTTLをテーブル全体に設定できます。INSERTまたはUPDATEコマンドを使用してカラムにTTLを設定すると、テーブルTTLはオーバーライドされます。

警告: 2038年問題のため、データベース・ストレージ・エンジンでは、January 19 2038 03:14:07 UTCのみをエンコードできます。TTL日付オーバーフローポリシーによって、有効期限が最長の日付よりも後のタイムスタンプの要求を拒否するか、受け入れるかどうかが決定します。-Dcassandra.expiration_date_overflow_policyを参照してください。
IF NOT EXISTS
PRIMARY KEY値に一致する行がない場合に、新しいデータ行を挿入します。
TIMESTAMP epoch_in_microseconds
挿入したデータに書き込み時間のTIMESTAMPを付けます。エポック(1970年1月1日)以来の経過時間をマイクロ秒単位で入力します。デフォルトでは、書き込みの実際の時刻が使用されます。
制約事項: INSERTでは、同じ文でIF NOT EXISTSUSING TIMESTAMPを使用することはできません。

タイムスタンプとTime To Live(TTL)の指定

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、秒単位)
  • エポック以来の経過マイクロ秒数のタイムスタンプ

コレクション内でのTime To Live(TTL)とタイムスタンプの指定。

sponsorshipセット・コレクションのTTLとタイムスタンプの両方を使用してサイクリスト名を挿入します。

INSERT INTO cycling.cyclist_sponsors_expire (cyclist_name, sponsorship) 
  VALUES ('PRIETO, Marcela',  {'Castrelli', 'Alfa Romeo'}) 
  USING TIMESTAMP 100 AND TTL 10000;
  • Time To Live(TTL、秒単位)
  • エポック以来の経過マイクロ秒数のタイムスタンプ

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

コレクションにデータを挿入するには、値を中かっこで囲みます。設定した値は一意である必要があります。サイクリストVOSsetとしてチームのリストを挿入します。セットは、テーブル内でteams set<text>として定義されます。
INSERT INTO cycling.cyclist_career_teams (
  id,lastname,teams
 ) VALUES (
  5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 
  'VOS', 
  { 'Rabobank-Liv Woman Cycling Team','Rabobank-Liv Giant','Rabobank Women Team','Nederland bloeit' }
 );
teamsという名前のmapにデータを挿入します。このマップはサイクリストVOSについて直近の2つのチーム・メンバーシップをリストします。マップは、テーブル内でteams map<int, text>として定義されます。
INSERT INTO cycling.cyclist_teams (
  id,firstname,lastname,teams
) VALUES (
  5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 
  'Marianne',
  '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の詳細については、「直列化可能な整合性」を参照してください。