ALTER TABLE

テーブルのカラム・メタデータを変更します。

テーブルのカラム・メタデータを変更します。

構文 

ALTER TABLE keyspace_name.table_name instruction
instructionは以下のとおりです。
ALTER column_name TYPE cql_type |(ADD column_name cql_type)|(DROP column_name)|(RENAME column_name TO column_name)|(WITH property AND property ...)

cql_typeは元の型と互換性があり、コレクションまたはカウンター以外のCQL型です。例外:ADDはコレクション型をサポートします。また、テーブルがカウンターの場合は、カウンター型もサポートします。

propertyは、speculative_retry = '10ms'のようなCQLテーブル・プロパティおよび値です。文字列プロパティは単一引用符で囲んでください。

構文の凡例 

  • 大文字はリテラルを意味する
  • 小文字は、リテラルでないことを意味する
  • イタリック体は指定が任意であることを意味する
  • パイプ(|)記号はORまたはAND/ORを意味する
  • 省略記号(...)は繰り返し可能を意味する
  • 範囲記号「(」および「)」はリテラルではなく、範囲を示す

この構文には、CQL文の終了となるセミコロンは含まれていません。

説明 

ALTER TABLEはテーブル・メタデータを操作します。カラムのデータ・ストレージ型を変更したり、新しいカラムを追加したり、既存のカラムを削除したり、テーブル・プロパティを変更したりできます。結果は返されません。別名であるALTER COLUMNFAMILYも使用できます。

最初に、変更するテーブルの名前をALTER TABLEキーワードの後に指定し、その後に変更の種類(ALTER、ADD、DROP、RENAME、またはWITH)を指定します。次に、以下のセクションで説明するように、必要な残りの情報を指定します。

テーブル名は、キースペースで修飾できます。たとえば、monstersキースペースのaddamsFamilyテーブルを変更するには、以下のように記述します。

ALTER TABLE monsters.addamsFamily ALTER lastKnownLocation TYPE uuid;

カラムの型の変更 

カラムのストレージ型を変更するには、元の型が変更後の型と互換性がある必要があります。 ascii型はtextに変更できます。text(varchar)をasciiに変更することはできません。すべてのUTF8文字列がasciiであるとは限らないためです。 textはBLOBに変換できます。BLOBをtextに変換することはできません。すべてのBLOBがUTF8文字列でないとは限らないためです。たとえば、usersテーブルのbioカラムの型をasciiからtextに、さらにtextからBLOBに変更するには、以下のように記述します。

CREATE TABLE users ( user_name varchar PRIMARY KEY, bio ascii, ); ALTER TABLE users ALTER bio TYPE text; ALTER TABLE users ALTER bio TYPE blob;

カラムはすでに現在の行に存在する必要があります。そのカラムの値に格納されているバイトは変更されません。既存のデータが新しい型に従ってデシリアライズできない場合は、CQLドライバまたはインターフェイスがエラーを報告する場合があります。

カラム型への以下のような変更は許可されません。

データを挿入した後でカラムの型を変更すると、新しい型がデータと互換性がない場合にCQLドライバー/ツールで混乱が生じることがあります。

カラムの追加 

コレクション型以外のカラムをテーブルに追加するには、ALTER TABLEとADDキーワードを以下のように使用します。

ALTER TABLE addamsFamily ADD gravesite varchar;

コレクション型のカラムを追加するには、以下のように使用します。

ALTER TABLE users ADD top_places list<text>;

既存データは検証されません。

テーブルへの以下のような追加は許可されません。

  • 既存のカラムと同じ名前のカラムの追加
  • 静的(STATIC)カラム

カラムの削除 

テーブルからカラムを削除するには、ALTER TABLEとDROPキーワードを使用します。カラムを削除すると、そのカラムはテーブルから削除されます。
ALTER TABLE addamsFamily DROP gender;

ALTER DROPは、テーブル定義からカラムを削除し、カラムに対応するデータを削除し、最終的には、そのカラムが使用していたスペースを使用可能にします。削除されたカラムは、すぐにクエリーできなくなります。実際にデータが削除されるのは、コンパクションのときです。データはその後、SSTableに含まれません。削除されたカラムの除去をコンパクションの前に強制的に実行するには、nodetool upgradesstablesコマンドの次にALTER TABLE文を記述します。これにより、テーブルのメタデータが更新されて削除が登録されます。

削除したカラムを再度追加した後、クエリーを実行しても、カラムが削除する前に書き込まれた値は返されません。削除したカラムをテーブルに再度追加する場合、クライアント指定タイムスタンプは使用しないでください。これは、Cassandraが生成した書き込み時間ではありません。

COMPACT STORAGEオプションで定義されたテーブルからはカラムを削除できません。

カラムの名前変更 

RENAME句の主な目的は、CQLが生成したプライマリ・キーの名前と、レガシー・テーブルに見つからないカラム名を変更することです。プライマリ・キーのカラム名は変更できます。インデックスが付いたカラムまたは静的(STATIC)カラムの名前は変更できません。これは、Cassandra 2.0.6以降でサポートされています。

テーブル・プロパティの変更 

テーブル作成時に確立されたテーブル・ストレージ・プロパティを変更するには、以下のいずれかの形式でテーブルを変更します。
  • ALTER TABLE、およびプロパティ名と値を含むWITHディレクティブ
  • ALTER TABLE、および次のセクションで示すプロパティ・マップ

WITHディレクティブを使用すると、たとえば、read_repair_chanceプロパティを変更できます。これにより、非クォーラムの整合性を維持するように構成されたクラスターの読み取り時に読み取りリペアを呼び出すための基準が構成されます。

複数のプロパティを変更するには、以下の例のようにANDを使用します。

ALTER TABLE addamsFamily WITH comment = 'A most excellent and useful table' AND read_repair_chance = 0.2;

テキスト・プロパティ値は単一引用符で囲んでください。コンパクト・ストレージを持つテーブルのプロパティは変更できません。

圧縮とコンパクションの変更 

圧縮またはコンパクションのオプションを変更するには、プロパティ・マップを使用します。

ALTER TABLE addamsFamily WITH compression = { 'sstable_compression' :'DeflateCompressor', 'chunk_length_kb' :64 }; ALTER TABLE mykeyspace.mytable WITH compaction = {'class':'SizeTieredCompactionStrategy', 'cold_reads_to_omit': 0.05};
キャッシング・プロパティの値を変更します。たとえば、keysオプションをALL(デフォルト)からNONEに変更して、rows_per_partitionを15に変更します。
注: Cassandra 3.0以降では、SizeTieredCompactionStrategyに対するcold_reads_to_omitは除去されています。

キャッシングの変更 

Cassandra 2.1では、プロパティ・マップを使用してキャッシング・オプションを作成および変更します。

//Cassandra 2.1 only ALTER TABLE users WITH caching = { 'keys' :'NONE', 'rows_per_partition' :'15' };

次に、rows_per_partitionだけを25に変更します。

//Cassandra 2.1 only ALTER TABLE users WITH caching = { 'rows_per_partition' :'25' };

最後に、テーブル定義を見てみましょう。

//Cassandra 2.1 only DESCRIBE TABLE users; CREATE TABLE mykeyspace.users ( user_name text PRIMARY KEY, bio blob ) WITH bloom_filter_fp_chance = 0.01 AND caching = '{"keys":"NONE", "rows_per_partition":"25"}' AND comment = '' AND compaction = {'min_threshold':'4', 'class':'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold':'32'} AND compression = {'sstable_compression':'org.apache.cassandra.io.compress.LZ4Compressor'} 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.1 AND speculative_retry = '99.0PERCENTILE';

Cassandra 2.0.xでは、WITHディレクティブを使用してキャッシング・オプションを変更します。

//Cassandra 2.0.x only ALTER TABLE users WITH caching = "keys_only;
重要: Cassandra 2.0.xでは、注意して行キャッシングを使用してください。