ALTER TABLE
新しいカラムの追加、既存のカラムの削除、カラム名の変更、テーブル・プロパティの変更を行います。このコマンドは結果を返しません。
- 変更できるのは、プライマリ・キーのクラスター化カラムの名前のみです。
- カラムのデータ型は変更できません。
- マテリアライズド・ビューを含むテーブルの場合、カラムがマテリアライズド・ビューで使用されていない場合でも、テーブルからそのカラムを削除することはできません。
- 依存関係のあるセカンダリ・インデックスまたはDatastax Enterprise Searchインデックスを含むカラムについては、名前の変更または削除を行うことはできません。
- データ型が異なる場合でも、既存のカラムと同じ名前でカラムを追加しないでください。これにより、コミット・ログの再生と、古いデータを含む既存のSSTableの破損が防止されます。
ALTER COLUMNFAMILY
は廃止予定です。構文
ALTER TABLE [keyspace_name.]table_name [ ADD ( column_definition | column_definition_list ) [ , ... ] ] [ DROP column_name [ , ... ] ] [ 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要素を上書きするための実体とリテラル値を示します。 |
- ADD column_definition | ( column_definition_list )
- 1つ以上のカラムを追加して、カラムのデータ型を設定します。カラム名、データ型の順に指定します。カラム値は自動的にNullに設定されます。複数のカラムを追加するには、丸かっこ内にカラムのコンマ区切りリスト配置して使用します。
column_name cql_type [ , ] [ column_name cql_type [ , ... ]
制約事項: テーブルを作成した後にプライマリ・キーにカラムを追加することはできません。 - DROP column | ( column_list )
- 1つ以上のカラムを削除します。行に含まれている値も削除され、復元することはできません。複数のカラムを削除するには、カラムを丸かっこ内に配置して、コンマ区切りリストを使用します。
- RENAME column_name TO column_name
- プライマリ・キーのカラムの名前を変更し、既存の値を保持します。制約事項: マテリアライズド・ビュー・ベースのテーブル、またはセカンダリ・インデックスまたはDatastax Enterprise Searchインデックスを含むテーブルではサポートされていません。
- table_properties
-
既存のテーブルのプロパティを変更できます。いくつかのプロパティは単一のオプションとして、値に設定されます。
たとえば、option_name = value [ AND ... ]
speculative_retry = '10ms'
があります。文字列プロパティの値は単一引用符で囲みます。その他のプロパティは、JSONマップを使用して設定されます。
option_name = { subproperty_name : value [ , ... ] }
詳細については、「table_options」を参照してください。
例
このセクションでは、cyclist_racesテーブルを使用します。
カラムの追加
ALTER TABLE cycling.cyclist_races ADD manager UUID;
ALTER TABLE cycling.cyclist_races ADD completed list<text>;
この操作では既存のデータは検証されません。
- 既存のカラムと同じ名前のカラム
- テーブルにクラスター化カラムがない場合の静的カラム。
カラムの削除
ALTER TABLE cycling.cyclist_races DROP manager;
DROPは、テーブル定義からカラムを削除します。削除されたカラムは、すぐにクエリーできなくなります。カラム・データは次回のコンパクション時に削除されます。削除したカラムの除去をコンパクションの前に強制的に実行するには、ALTER TABLEを使用してメタデータを更新してから、nodetool upgradesstablesを実行して削除を有効にします。
- カラムを削除して再び追加しても、削除する前にカラムに書き込まれていた値は復元されません。
- 削除したカラムにクライアントで生成されたタイムスタンプが含まれている場合、そのカラムを再び追加しないでください。書き込み時間機能で生成されたタイムスタンプを含むカラムは再び追加できます。
カラムの名前変更
ALTER TABLE cycling.race_times RENAME race_date TO date;
- 変更できるのは、プライマリ・キーのクラスター化カラムの名前のみです。
- パーティション・キーによってノード上のデータ格納場所が決定するため、パーティション・キーの名前は変更できません。別のパーティション名が必要な場合は、テーブルを再作成し、データを移行する必要があります。注: SSTableは不変であるため、RENAMEを使用する場合、多くの制限事項が存在します。ディスクのデータの状態を変更するには、すべてを書き込みなおす必要があります。
- 名前を変更したカラムのインデックスを作成できます。
- そのカラムに基づいてインデックスが作成されているカラムの名前は変更できません。
- 静的なカラムの名前は変更できません。
テーブル・プロパティの変更
- 単一のプロパティ名および値。
- 名前および値を設定するためのプロパティ・マップ。「圧縮とコンパクションに関する次のセクション」を参照してください。
ALTER TABLE cycling.cyclist_base WITH comment = 'basic cyclist information';
テキスト・プロパティ値は単一引用符で囲んでください。
圧縮とコンパクションの変更
ALTER TABLE cycling.comments WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 };
各キーの名前を単一引用符で囲みます。値が文字列の場合も同様に引用符で囲みます。
キャッシングの変更
ALTER TABLE cycling.comments WITH caching = { 'keys': 'NONE', 'rows_per_partition': 10 };
推測的リトライの変更
cyclist_base
テーブルで、推測的リトライを95パーセンタイルに変更します。ALTER TABLE cycling.cyclist_base WITH speculative_retry = '95percentile';
cyclist_base
テーブルで、推測的リトライに10ミリ秒を使用します。ALTER TABLE cycling.cyclist_base WITH speculative_retry = '10ms';
バックグラウンド・コンパクションの有効化と無効化
enabled
プロパティをfalse
プロパティに設定してバックグラウンド・コンパクションを無効にするには、次のように指定します。ALTER TABLE cycling.comments WITH COMPACTION = { 'class': 'SizeTieredCompactionStrategy', 'enabled': 'false' };
拡張コンパクション・ログの取得
特定のノードでのコンパクション・アクティビティーに関する詳細な情報を専用のログ・ファイルで収集するには、log_all
サブプロパティをtrue
に設定します。
拡張コンパクションを有効にすると、データベースによってcompaction-%d.log(%d
は連続番号)という名前のファイルがhome/logsに作成されます。
-
type:enable
以前にフラッシュされたSSTableをリストします。
{"type":"enable","keyspace":"test","table":"t","time":1470071098866,"strategies": [ {"strategyId":"0","type":"LeveledCompactionStrategy","tables":[],"repaired":true,"folders": ["/home/carl/oss/cassandra/bin/../data/data"]}, {"strategyId":"1","type":"LeveledCompactionStrategy","tables":[],"repaired":false,"folders": ["/home/carl/oss/cassandra/bin/../data/data"] } ] }
type: flush
各テーブルのCompactionStrategyも含め、memtableのフラッシュ・イベントをディスク上のSSTableのログに記録します。
{"type":"flush","keyspace":"test","table":"t","time":1470083335639,"tables": [ {"strategyId":"1","table": {"generation":1,"version":"mb","size":106846362,"details": {"level":0,"min_token":"-9221834874718566760","max_token":"9221396997139245178"} } } ] }
type: compaction
コンパクション・イベントをログに記録します。
{"type":"compaction","keyspace":"test","table":"t","time":1470083660267, "start":"1470083660188","end":"1470083660267","input": [ {"strategyId":"1","table": {"generation":1372,"version":"mb","size":1064979,"details": {"level":1,"min_token":"7199305267944662291","max_token":"7323434447996777057"} } } ],"output": [ {"strategyId":"1","table": {"generation":1404,"version":"mb","size":1064306,"details": {"level":2,"min_token":"7199305267944662291","max_token":"7323434447996777057"} } } ] }
type: pending
コンパクション・ストラテジの保留中タスクの数をリストします。
{"type":"pending","keyspace":"test","table":"t", "time":1470083447967,"strategyId":"1","pending":200}
テーブル定義の確認
DESC cycling.comments
CREATE TABLE cycling.comments (
id uuid,
created_at timestamp,
comment text,
commenter text,
record_id timeuuid,
solr_query text,
PRIMARY KEY (id, created_at)
) WITH CLUSTERING ORDER BY (created_at DESC)
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.DeflateCompressor'}
AND crc_check_chance = 1.0
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 speculative_retry = '99PERCENTILE';