ALTER TABLE
Add new columns, drop existing columns, renames columns, and change table properties. The command returns no results.
- Can only rename clustering columns in the primary key.
- Cannot change the data type of a column.
- For a table that has a materialized view, cannot drop a column from the table even if the column is not used in the materialized view.
- Cannot rename or drop columns that have dependent secondary indexes or Datastax Enterprise Search indexes.
- Do not add a column with the same name as an existing column but with a different data type. It will prevent commit log replays and corrupt existing SSTables with old data.
ALTER COLUMNFAMILY
is deprecated.Synopsis
ALTER TABLE [keyspace_name.]table_name [ ADD ( column_definition | column_definition_list ) [ , ... ] ] [ DROP column_name [ , ... ] ] [ RENAME column_name TO column_name ] [ WITH table_properties [ , ... ] ] ;
Syntax conventions | Description |
---|---|
UPPERCASE | Literal keyword. |
Lowercase | Not literal. |
Italics |
Variable value. Replace with a user-defined value. |
[] |
Optional. Square brackets ( [] ) surround
optional command arguments. Do not type the square brackets. |
( ) |
Group. Parentheses ( ( ) ) identify a group to
choose from. Do not type the parentheses. |
| |
Or. A vertical bar ( | ) separates alternative
elements. Type any one of the elements. Do not type the vertical
bar. |
... |
Repeatable. An ellipsis ( ... ) indicates that
you can repeat the syntax element as often as required. |
'Literal string' |
Single quotation ( ' ) marks must surround
literal strings in CQL statements. Use single quotation marks to
preserve upper case. |
{ key : value
} |
Map collection. Braces ( { } ) enclose map
collections or key value pairs. A colon separates the key and the
value. |
<datatype1,datatype2> |
Set, list, map, or tuple. Angle brackets ( <
> ) enclose data types in a set, list, map, or tuple.
Separate the data types with a comma. |
cql_statement; |
End CQL statement. A semicolon ( ; ) terminates
all CQL statements. |
[--] |
Separate the command line options from the command arguments with
two hyphens ( -- ). This syntax is useful when
arguments might be mistaken for command line options. |
' <schema> ... </schema>
' |
Search CQL only: Single quotation marks ( ' )
surround an entire XML schema declaration. |
@xml_entity='xml_entity_type' |
Search CQL only: Identify the entity and literal value to overwrite the XML element in the schema and solrConfig files. |
- ADD column_definition | ( column_definition_list )
- Add one or more columns and set the column data types. Specify the column names
followed by the data types. The column value is automatically set to null. To add
multiple columns, use a comma separated list of columns placed inside
parentheses.
column_name cql_type [ , ] [ column_name cql_type [ , ... ]
Restriction: Adding columns to a primary key is not supported after a table has been created. - DROP column | ( column_list )
- Drop one or more columns. The values contained in the row are also dropped and not recoverable. To drop multiple columns, use a comma separated list of columns placed inside parentheses.
- RENAME column_name TO column_name
- Changes the name of a primary key column and preserves the existing values.Restriction: Not supported on materialized view base-tables, or tables with secondary indexes or Datastax Enterprise Search indexes.
- table_properties
-
You can modify an existing table's properties. Some properties are single options that are set to a value:
For example,option_name = value [ AND ... ]
speculative_retry = '10ms'
. Enclose the value for a string property in single quotation marks.Other table properties are set using a JSON map:
option_name = { subproperty_name : value [ , ... ] }
See table_options for more details.
Examples
This section uses the cyclist_races table.
Adding a column
ALTER TABLE cycling.cyclist_races ADD manager UUID;
ALTER TABLE cycling.cyclist_races ADD completed list<text>;
This operation does not validate the existing data.
- A column with the same name as an existing column
- A static column if the table has no clustering columns.
Dropping a column
ALTER TABLE cycling.cyclist_races DROP manager;
DROP removes the column from the table definition. The column becomes unavailable for queries immediately after it is dropped. The database drops the column data during the next compaction.
- If you drop a column then re-add it, DataStax Enterprise does not restore the values written before the column was dropped.
- Do not re-add a dropped column that contained timestamps generated by a client; you can re-add columns with timestamps generated by the write time facility.
Renaming a column
ALTER TABLE cycling.race_times RENAME race_date TO date;
- You can only rename clustering columns, which are part of the primary key.
- You cannot rename the partition key because the partition key determines the data
storage location on a node. If a different partition name is required, the table must
be recreated and the data migrated.Note: There are many restrictions when using RENAME because SSTables are immutable. To change the state of the data on disk, everything must be rewritten.
- You can index a renamed column.
- You cannot rename a column if an index has been created on it.
- You cannot rename a static column.
Modifying table properties
- Single property name and value.
- Property map to set the names and values, as shown in the next section on compression and compaction.
ALTER TABLE cycling.cyclist_base WITH comment = 'basic cyclist information';
Enclose a text property value in single quotation marks.
Modifying compression and compaction
ALTER TABLE cycling.comments WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 };
Enclose the name of each key in single quotes. If the value is a string, enclose the string in quotes as well.
Changing caching
ALTER TABLE cycling.comments WITH caching = { 'keys' : 'NONE', 'rows_per_partition' : 10 };
Change the speculative retries
cyclist_base
table to 95th percentile for speculative
retry:ALTER TABLE cycling.cyclist_base WITH speculative_retry = '95percentile';
cyclist_base
table to use 10 milliseconds for speculative
retry:ALTER TABLE cycling.cyclist_base WITH speculative_retry = '10ms';
Enabling and disabling background compaction
enabled
property to
false
to disable background
compaction:ALTER TABLE cycling.comments WITH COMPACTION = { 'class' : 'SizeTieredCompactionStrategy', 'enabled' : 'false' };
Reading extended compaction logs
Set the
log_all
subproperty to true
to collect in-depth
information about compaction activity on a node in a dedicated log file.
When extended compaction
is enabled, the database creates a file named compaction-%d.log
(where %d
is a sequential number) in home/logs.
-
type:enable
Lists SSTables that have been flushed previously.
{"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
Logs a flush event from a memtable to an SSTable on disk, including the CompactionStrategy for each table.
{"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
Logs a compaction event.
{"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
Lists the number of pending tasks for a compaction strategy.
{"type":"pending","keyspace":"test","table":"t", "time":1470083447967,"strategyId":"1","pending":200}
Reviewing the table definition
DESC cycling.comments;
CREATE TABLE cycling.comments (
id uuid,
created_at timestamp,
comment text,
commenter text,
record_id timeuuid,
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', 'enabled': 'true', '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';