ALTER TABLE
テーブルのカラムとプロパティを変更します。
カラムのデータ型の変更、新しいカラムの追加、既存のカラムの削除、カラム名の変更、テーブル・プロパティの変更を行います。このコマンドは結果を返しません。
ALTER COLUMNFAMILY
は廃止予定です。構文
ALTER TABLE [keyspace_name.]table_name [ALTER column_name TYPE cql_type] [ADD (column_definition_list)] [DROP (column_list)] [RENAME column_name TO column_name] [WITH table_properties];
構文規則 | 説明 |
---|---|
大文字 | リテラル・キーワード。 |
小文字 | リテラル以外。 |
イタリック体 |
変数値。ユーザー定義値と置き換えます。 |
[] |
任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。 |
( ) |
グループ。丸かっこ(( ) )は、選択肢を含むグループを示します。丸かっこは入力しないでください。 |
| |
または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。 |
... |
繰り返し可能。省略記号(... )は、構文要素を必要な回数だけ繰り返すことができることを示します。 |
'Literal string' |
単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。 |
{ key : value } |
マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。 |
<datatype1,datatype2> |
セット、リスト、マップ、またはタプル。山かっこ(< > )で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。 |
cql_statement; |
CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。 |
[--] |
コマンドライン・オプションとコマンド引数は、2つのハイフン(-- )で区切ります。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。 |
' <schema> ...</schema> ' |
検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。 |
@xml_entity='xml_entity_type' |
検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。 |
- ALTER column_name TYPE cql_type
-
column_name:変更するカラムの名前。
cql_type:カラムのデータ型を互換性のある型に変更します。
注: コレクション(リスト、セット、およびマップ)とカウンターの型の変更はサポートされていません。CQLデータ型には、変換の互換性について厳密な要件があります。以下の表に、置き換え可能なデータ型を示します。表 2. データ型の互換性 変換前の型 変換後の型 ascii、bigint、boolean、decimal、double、float、inet、int、timestamp、timeuuid、uuid、varchar、varint BLOB int varint text varchar timeuuid uuid varchar text クラスター化カラムでは、データがディスクに書き込まれる順序が指定されているため、より厳密な要件があります。以下の表に、クラスター化カラムで使用されるデータ型について、置き換え可能なデータ型を示します。表 3. クラスター化カラム型の互換性 変換前の型 変換後の型 varint int varchar text text varchar
- ADD (column_definition_list)
- 1つ以上のカラムを追加してデータ型を設定し、名前、データ型の順に入力します。値は自動的にNullに設定されます。複数のカラムを追加するには、コンマ区切りリストを使用します。
column_name cql_type [,] [column_name cql_type [, ...]
制約事項: テーブルを作成した後にPRIMARY KEYを追加することはできません。 - DROP (column_list)
- 削除するカラムのコンマ区切りリスト。行に含まれている値も削除され、復元することはできません。
- RENAME column_name TO column_name
- カラムの名前を変更し、既存の値を保持します。
- table_properties
-
テーブルを作成した後にプロパティを変更できます。プロパティには2つの種類があり、1つのオプションはvalueと等しい値に設定されます。
たとえば、option_name = value [AND ...]
speculative_retry = '10ms'
があります。文字列プロパティの値は単一引用符で囲みます。一部のテーブル・プロパティは、次の単純なJSON形式でマップとして定義されます。
option_name = { subproperty_name : value [, ...]}
詳細については、「table_options」を参照してください。
例
テーブルとキースペースの指定
テーブル名は、キースペースの名前を前に追加して修飾できます。たとえば、cycling
キースペース内のteams
テーブルを指定するには、以下のように記述します。
ALTER TABLE cycling.teams ALTER ID TYPE uuid;
カラムの型の変更
カラムのデータ型を互換性のある型に変更します。
birthdayタイムスタンプ・カラムをBLOB型に変更します。
ALTER TABLE cycling.cyclist_alt_stats ALTER birthday TYPE blob;
カラムのデータ型を変更できるのは、カラムが既に存在する場合のみです。カラムのデータ型が変更されても、そのカラムの値に格納されているバイトは変更されません。既存のデータが新しいデータ型に従ってデシリアライズできない場合は、CQLドライバーまたはインターフェイスがエラーを報告します。
データを挿入した後でカラムの型を変更すると、新しい型が挿入したデータと互換性がない場合にCQLドライバー/ツールで混乱が生じることがあります。
カラムの追加
(コレクション型以外の)カラムをテーブルに追加するには、ADD命令を使用します。
ALTER TABLE cycling.cyclist_races ADD firstname text;
コレクション型のカラムを追加するには、以下のように記述します。
ALTER TABLE cycling.upcoming_calendar ADD events list<text>;
この操作では既存のデータは検証されません。
ADD命令を使用して次のカラムを追加することはできません。
- 既存のカラムと同じ名前のカラム
- テーブルにクラスター化カラムがなく、COMPACT STORAGEを使用する場合の静的カラム。
カラムの削除
ALTER TABLE cycling.basic_info DROP birth_year;
DROPは、テーブル定義からカラムを削除し、カラム値にトゥームストーンのマークが付きます。削除されたカラムは、すぐにクエリーできなくなります。カラム・データは次回のコンパクション時に削除されます。削除したカラムの除去をコンパクションの前に強制的に実行するには、ALTER TABLEを使用してメタデータを更新してから、nodetool upgradesstablesを実行して削除を有効にします。
- カラムを削除して再び追加しても、削除する前にカラムに書き込まれていた値は復元されません。
- 削除したカラムにクライアントで生成されたタイムスタンプが含まれている場合、そのカラムを再び追加しないでください。書き込み時間機能で生成されたタイムスタンプを含むカラムは再び追加できます。
- COMPACT STORAGEオプションで定義したテーブルからカラムを削除することはできません。
カラムの名前変更
- 変更できるのは、プライマリ・キーのクラスター化カラムの名前のみです。
- パーティション・キーの名前は変更できません。
- 名前を変更したカラムのインデックスを作成できます。
- そのカラムに基づいてインデックスが作成されているカラムの名前は変更できません。
- 静的カラムはテーブルのプライマリ・キーに使用できないため、静的カラムの名前は変更できません。
テーブル・プロパティの変更
- ALTER TABLEと、プロパティ名および値を指定するWITH命令を使用します。
- ALTER TABLE WITHと、圧縮とコンパクションに関する次のセクションで説明するプロパティ・マップを使用します。
この例では、WITH命令を使用して、非クォーラムの整合性の維持に使用するテーブルの読み取りリペアを構成するread_repair_chanceプロパティを変更し、ANDを使用して複数のプロパティを変更します。
ALTER TABLE cyclist_mv WITH comment = 'ID, name, birthdate and country' AND read_repair_chance = 0.2;
テキスト・プロパティ値は単一引用符で囲んでください。COMPACT STORAGEを使用するテーブルのプロパティは変更できません。
圧縮とコンパクションの変更
テーブルの圧縮またはコンパクションの設定を変更するには、プロパティ・マップを使用します。
ALTER TABLE cycling_comments WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 };
各キーの名前を単一引用符で囲みます。値が文字列の場合も同様に引用符で囲みます。
キャッシングの変更
10を返すクエリーを最適化するには、プロパティ・マップを使用してキャッシング・オプションを作成し、変更します。
ALTER TABLE cycling.events WITH caching = { 'keys': 'NONE', 'rows_per_partition': 10 };
テーブル定義の確認
DESC TABLE cycling.events;
カラム名を含む詳細が表示されます。
CREATE TABLE cycling.events ( month int, end timestamp, class text, title text, location text, start timestamp, type text, PRIMARY KEY (month, end, class, title) ) WITH CLUSTERING ORDER BY (end ASC, class ASC, title ASC) AND bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'NONE', 'rows_per_partition': '10'} AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99PERCENTILE';