# System schema keyspace layout This section describes layouts and usage of system\_schema.* tables. ## system\_schema.keyspaces This table contains one row per keyspaces. Schema: ``` CREATE TABLE system_schema.keyspaces ( keyspace_name text PRIMARY KEY, durable_writes boolean, replication frozen> ) ``` Columns: * `keyspace_name` - name of the keyspace * `durable_writes` - whether writes to the keyspace are using commitlog. * `replication` - Deprecated replication settings for the keyspace. Contains the same options as the `replication_v2` column, but rack lists are replaced with replica count (numeric RF) for backwards compatibility with drivers which don't recognize rack lists here. * `replication_v2` - replication settings for the keyspace. The value for the `"class"` key determines replication strategy name. The structure of other options depends on the replication strategy. For `NetworkTopologyStrategy` the other options specify replication factors for datacenters, stored as a flattened map of the extended options map (see below). For `SimpleStrategy` there is a single option `"replication_factor"` specifying the replication factor. Extended options map used by NetworkTopologyStrategy is a map where values can be either strings or lists of strings. For example: ``` { 'dc1': '3', 'dc2': ['rack1', 'rack2'], 'dc3': [] } ``` The options above mean that the replication factor for datacenter `dc1` is 3, for datacenter `dc2` it is 2, with replicas placed on racks `rack1` and `rack2`. For 'dc3' the replication factor is 0, expressed as an empty list of racks. The extended map is stored in the "replication" column in a flattened form, where values which are lists are represented as multiple entries in the map with the list index appended to the key, with `:` as the separator. The index can be negative, which is used to indicate that the list is empty. The example extended options map from above has a flattened representation of: ``` { 'dc1': '3', 'dc2:0': 'rack1', 'dc2:1': 'rack2', 'dc3:-1': '' } ``` ## system\_schema.computed\_columns Computed columns are a special kind of columns. Rather than having their value provided directly by the user, they are computed - possibly from other column values. Examples of such computed columns could be: * token column generated from the base partition key for secondary indexes * map value column, generated as the extraction of a single value from a map stored in a different column Computed columns in many ways act as regular columns, so they are also present in the `system_schema.columns` table - `system_schema.computed_columns` is an additional mapping that marks the column as computed and provides its computation. Schema: ~~~ CREATE TABLE system_schema.computed_columns ( keyspace_name text, table_name text, column_name text, computation blob, PRIMARY KEY (keyspace_name, table_name, column_name) ) WITH CLUSTERING ORDER BY (table_name ASC, column_name ASC); ~~~ `computation` is stored as a blob and its contents are assumed to be a JSON representation of computation's type and any custom fields needed. Example representations: ~~~ {'type':'token'} {'type':'map_value','map':'my_map_column_name','key':'AF$^GESHHgge6yhf'} ~~~ The token computation does not need additional arguments, as it returns the token of base's partition key. In order to compute a map value, what's additionally needed is the column name that stores the map and the key at which the value is expected.