

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Referencia del lenguaje CQL para Amazon Keyspaces (para Apache Cassandra)
<a name="cql"></a>

Tras conectarse a un punto de conexión de Amazon Keyspaces, utiliza Cassandra Query Language (CQL) para trabajar con su base de datos. CQL es similar en muchos aspectos a Structured Query Language (SQL).
+ **Elementos de CQL**: en esta sección se describen los elementos fundamentales de CQL compatibles con Amazon Keyspaces, incluidos los identificadores, las constantes, los términos y los tipos de datos. También se explican conceptos como los tipos de cadenas, los tipos numéricos, los tipos de colecciones, etc. 
+ **Lenguaje de definición de datos (DDL)**: las instrucciones DDL se utilizan para administrar estructuras de datos, como los espacios de claves y las tablas, en Amazon Keyspaces. En esta sección se describen las instrucciones para crear, modificar y eliminar espacios clave y tablas, así como la restauración de tablas a partir de una copia de seguridad. point-in-time 
+ **Lenguaje de manipulación de datos (DML)**: las instrucciones de DML se utilizan para administrar los datos de las tablas. En esta sección se explican las instrucciones para seleccionar, insertar, actualizar y eliminar datos. También explica las capacidades de consulta avanzadas, como el uso del operador `IN`, la ordenación de los resultados y la paginación. 
+ **Funciones integradas**: Amazon Keyspaces admite diversas funciones escalares integradas que se pueden utilizar en las instrucciones CQL. En esta sección se proporciona información general sobre estas funciones y se incluyen ejemplos de su uso. 

A lo largo de este tema, encontrará información detallada sobre la sintaxis, ejemplos y prácticas recomendadas para utilizar CQL de forma eficaz en Amazon Keyspaces.

**Topics**
+ [Elementos de Cassandra Query Language (CQL) en Amazon Keyspaces](cql.elements.md)
+ [Instrucciones DDL (lenguaje de definición de datos) en Amazon Keyspaces](cql.ddl.md)
+ [Instrucciones DML (lenguaje de manipulación de datos) en Amazon Keyspaces](cql.dml.md)
+ [Funciones integradas en Amazon Keyspaces](cql.functions.md)

# Elementos de Cassandra Query Language (CQL) en Amazon Keyspaces
<a name="cql.elements"></a>

Obtenga información sobre los elementos de Cassandra Query Language (CQL) compatibles con Amazon Keyspaces, incluyendo los identificadores, las constantes, los términos y los tipos de datos.

**Topics**
+ [identifier](#cql.elements.identifier)
+ [constants](#cql.elements.constants)
+ [term](#cql.elements.term)
+ [Tipos de datos](#cql.data-types)
+ [Codificación JSON de los tipos de datos de Amazon Keyspaces](#cql.data-types.JSON)

## Identificadores
<a name="cql.elements.identifier"></a>

Los identificadores (o nombres) se utilizan para identificar tablas, columnas y otros objetos. Un identificador puede estar entre comillas o no. Se aplica lo siguiente.

```
identifier          ::=  unquoted_identifier | quoted_identifier
unquoted_identifier ::=  re('[a-zA-Z][a-zA-Z0-9_]*')
quoted_identifier   ::=  '"' (any character where " can appear if doubled)+ '"'
```

## Constantes
<a name="cql.elements.constants"></a>

Se definen las siguientes constantes.

```
constant ::=  string | integer | float | boolean | uuid | blob | NULL
string   ::=  '\'' (any character where ' can appear if doubled)+ '\''
              '$$' (any character other than '$$') '$$'
integer  ::=  re('-?[0-9]+')
float    ::=  re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY
boolean  ::=  TRUE | FALSE
uuid     ::=  hex{8}-hex{4}-hex{4}-hex{4}-hex{12}
hex      ::=  re("[0-9a-fA-F]")
blob     ::=  '0' ('x' | 'X') hex+
```

## Términos
<a name="cql.elements.term"></a>

Un término denota el tipo de valores que se admiten. Los términos se definen del siguiente modo.

```
term                 ::=  constant | literal | function_call | arithmetic_operation | type_hint | bind_marker
literal              ::=  collection_literal | tuple_literal
function_call        ::=  identifier '(' [ term (',' term)* ] ')'
arithmetic_operation ::=  '-' term | term ('+' | '-' | '*' | '/' | '%') term
```

## Tipos de datos
<a name="cql.data-types"></a>

Amazon Keyspaces admite los siguientes tipos de datos:

### Tipos de cadena
<a name="cql.data-types.string"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `ascii`  | Representa una cadena de caracteres ASCII. | 
|  `text`  | Representa una cadena codificada en UTF-8. | 
|  `varchar`  |  Representa una cadena codificada en UTF-8 (`varchar` es un alias de `text`).  | 

### Tipos numéricos
<a name="cql.data-types.numeric"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `bigint`  | Representa un entero largo con signo de 64 bits. | 
|  `counter`  | Representa un contador entero con signo de 64 bits. Para obtener más información, consulte [Contadores](#cql.data-types.numeric.counters). | 
|  `decimal`  | Representa un decimal de precisión variable. | 
|  `double`  | Representa un valor de coma flotante IEEE 754 de 64 bits. | 
|  `float`  | Representa un valor de coma flotante IEEE 754 de 32 bits. | 
|  `int`  |  Representa un entero con signo de 32 bits.  | 
|  `varint`  |  Representa un valor entero dentro del rango de \$1/-10^38.  | 

#### Contadores
<a name="cql.data-types.numeric.counters"></a>

Una columna `counter` contiene un entero con signo de 64 bits. El valor del contador se incrementa o decrementa mediante la instrucción [UPDATE](cql.dml.update.md) y no se puede establecer directamente. Esto hace que las columnas `counter` sean útiles para el seguimiento de recuentos. Por ejemplo, puede utilizar contadores para realizar un seguimiento del número de entradas en un archivo de registro o del número de veces que se ha visto una publicación en una red social. Se aplican las siguientes restricciones a las columnas `counter`:
+ Una columna de tipo `counter` no puede formar parte de la `primary key` de una tabla.
+ En una tabla que contenga una o más columnas de tipo `counter`, todas las columnas de esa tabla deben ser de tipo `counter`.

En los casos en que la actualización de un contador fallase (por ejemplo, debido a tiempos de espera o a la pérdida de conexión con Amazon Keyspaces), el cliente no sabe si el valor del contador se actualizó. Si se vuelve a intentar la actualización, es posible que la actualización del valor del contador se aplique por segunda vez.

### Tipo de blob
<a name="cql.data-types.blob"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `blob`  | Representa bytes arbitrarios. | 

### Tipo booleano
<a name="cql.data-types.boolean"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `boolean`  | Representa true o false. | 

### Tipos relacionados en el tiempo
<a name="cql.data-types.time"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `date`  | Una cadena en el formato. <yyyy>-<mm>-<dd> | 
|  `timestamp`  | Entero con signo de 64 bits que representa la fecha y la hora desde epoch (1 de enero de 1970 a las 00:00:00 GMT) en milisegundos. | 
|  `timeuuid`  | Representa un [UUID versión 1](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). | 

### Tipos de colección
<a name="cql.data-types.collection"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `list`  | Representa una colección ordenada de elementos literales. | 
|  `map`  | Representa una colección desordenada de pares clave-valor. | 
|  `set`  | Representa una colección desordenada de uno o más elementos literales. | 

Una columna de colección se declara utilizando el tipo de colección seguido de otro tipo de datos (por ejemplo, `TEXT` o `INT`) entre corchetes angulares. Puede crear una columna con un `SET` de `TEXT` o puede crear un `MAP` de `TEXT` y pares clave-valor `INT`, como se muestra en el siguiente ejemplo.

```
SET <TEXT>
MAP <TEXT, INT>
```

Una colección *no congelada* le permite realizar actualizaciones en cada elemento individual de la colección. Las marcas de tiempo del lado del cliente y los ajustes de periodo de vida (TTL) se almacenan para elementos individuales.

Al utilizar la palabra clave `FROZEN` en un tipo de colección, los valores de la colección se serializan en un único valor inmutable y Amazon Keyspaces los trata como un `BLOB`. Esto es una colección *congelada*. Una instrucción `INSERT` o `UPDATE` sobrescribe toda la colección congelada. No se pueden realizar actualizaciones de elementos individuales dentro de una colección congelada.

Las marcas de tiempo del lado del cliente y los ajustes de periodo de vida (TTL) se aplican a toda la colección congelada, no a elementos individuales. Las columnas `Frozen` de la colección pueden formar parte de la `PRIMARY KEY` de una tabla.

Puede anidar colecciones congeladas. Por ejemplo, puede definir un `MAP` dentro de un `SET` si el `MAP` utiliza la palabra clave `FROZEN`, como se muestra en el siguiente ejemplo. 

```
SET <FROZEN> <MAP <TEXT, INT>>>
```

Amazon Keyspaces admite el anidamiento de hasta 8 niveles de colecciones congeladas de forma predeterminada. Para obtener más información, consulte [Cuotas de servicio de Amazon Keyspaces](quotas.md#table). Para obtener más información sobre las diferencias funcionales con Apache Cassandra, consulte [Colecciones `FROZEN`](functional-differences.md#functional-differences.frozen-collections). Para obtener más información sobre la sintaxis CQL, consulte [CREATE TABLE](cql.ddl.table.md#cql.ddl.table.create) y [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter).

### Tipo de tupla
<a name="cql.data-types.tuple"></a>

El tipo de datos `tuple` representa un grupo acotado de elementos literales. Puede utilizar una tupla como alternativa a un `user defined type`. No es necesario que utilice la palabra clave `FROZEN` para las tuplas. Esto se debe a que una tupla siempre está congelada y no puede actualizar los elementos de forma individual. 

### Otros tipos
<a name="cql.data-types.other"></a>


****  

| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `inet`  | Cadena que representa una dirección IP, en cualquiera IPv4 de los dos formatos. IPv6 | 

### Estático
<a name="cql.data-types.static"></a>

En una tabla de Amazon Keyspaces con columnas de agrupación, puede utilizar la palabra clave `STATIC` para crear una columna estática de cualquier tipo. 

La siguiente instrucción es un ejemplo de ello.

```
my_column INT STATIC
```

Para obtener más información sobre el trabajo con columnas estáticas, consulte [Estimación del consumo de capacidad de las columnas estáticas en Amazon Keyspaces](static-columns.md).

### Tipos definidos por el usuario () UDTs
<a name="cql.data-types.user-defined"></a>

Amazon Keyspaces admite tipos definidos por el usuario (). UDTs Puede usar cualquier tipo de datos de Amazon Keyspaces válido para crear una UDT, incluidas las colecciones y otras existentes. UDTs Los crea UDTs en un espacio de claves y puede utilizarlos para definir las columnas de cualquier tabla del espacio de claves.

Para obtener más información sobre la sintaxis CQL, consulte [Tipos definidos por el usuario () UDTs](cql.ddl.type.md). Para obtener más información sobre cómo trabajar con ellas UDTs, consulte. [Tipos definidos por el usuario (UDTs) en Amazon Keyspaces](udts.md)

Para ver cuántos UDTs se admiten por espacio de claves, los niveles de anidación admitidos y otros valores predeterminados y cuotas relacionados con ellos UDTs, consulte. [Cuotas y valores predeterminados para los tipos definidos por el usuario (UDTs) en Amazon Keyspaces](quotas.md#quotas-udts)

## Codificación JSON de los tipos de datos de Amazon Keyspaces
<a name="cql.data-types.JSON"></a>

Amazon Keyspaces ofrece las mismas correspondencias de tipos de datos JSON que Apache Cassandra. En la siguiente tabla se describen los tipos de datos que Amazon Keyspaces acepta en las instrucciones `INSERT JSON` y los tipos de datos que Amazon Keyspaces utiliza al devolver datos con la instrucción `SELECT JSON`.

En los tipos de datos de campo único como `float`, `int`, `UUID` y `date` también puede insertar datos como `string`. En los tipos de datos compuestos y colecciones, como `tuple`, `map` y `list` también puede insertar datos como JSON o como `JSON string` codificado.


****  

| Tipos de datos de JSON | Tipos de datos aceptados en instrucciones `INSERT JSON` | Tipos de datos devueltos en instrucciones `SELECT JSON` | Notas | 
| --- | --- | --- | --- | 
|  `ascii`  | string | string | Utiliza el escape de caracteres JSON `\u`. | 
|  `bigint`  | integer, string | integer | La cadena debe ser un entero válido de 64 bits. | 
|  `blob`  | string | string | La cadena debe empezar con `0x` seguido de un número par de dígitos hexadecimales. | 
|  `boolean`  | boolean, string | boolean | La cadena debe ser `true` o `false`. | 
|  `date`  | string | string | Fecha en formato `YYYY-MM-DD`, zona horaria UTC. | 
|  `decimal`  | integer, float, string | float | Puede superar la precisión de punto flotante IEEE-754 de 32 o 64 bits en el decodificador del lado del cliente. | 
|  `double`  | integer, float, string | float | La cadena debe ser un entero válido o flotante. | 
|  `float`  | integer, float, string | float | La cadena debe ser un entero válido o flotante. | 
|  `inet`  | string | string | IPv4 o dirección. IPv6  | 
|  `int`  | integer, string | integer | La cadena debe ser un entero válido de 32 bits. | 
|  `list`  | list, string | list | Utiliza la representación de lista JSON nativa. | 
|  `map`  | map, string | map | Utiliza la representación de mapa JSON nativa. | 
|  `smallint`  | integer, string | integer | La cadena debe ser un entero válido de 16 bits. | 
|  `set`  | list, string | list | Utiliza la representación de lista JSON nativa. | 
|  `text`  | string | string | Utiliza el escape de caracteres JSON `\u`. | 
|  `time`  | string | string | Hora del día en formato `HH-MM-SS[.fffffffff]`. | 
|  `timestamp`  | integer, string | string | Una marca temporal. Las constantes de cadena permiten almacenar las marcas de tiempo como fechas. Se devuelven marcas de fecha con formato `YYYY-MM-DD HH:MM:SS.SSS`. | 
|  `timeuuid`  | string | string | UUID tipo 1. Consulte [constants](#cql.elements.constants) para obtener el formato UUID. | 
|  `tinyint`  | integer, string | integer | La cadena debe ser un entero válido de 8 bits. | 
|  `tuple`  | list, string | list | Utiliza la representación de lista JSON nativa. | 
|  `UDT`  | map, string | map | Utiliza la representación cartográfica JSON nativa con los nombres de los campos como claves. | 
|  `uuid`  | string | string | Consulte [constants](#cql.elements.constants) para obtener el formato UUID. | 
|  `varchar`  | string | string | Utiliza el escape de caracteres JSON `\u`. | 
|  `varint`  | integer, string | integer | Longitud variable; podría desbordar enteros de 32 o 64 bits en el decodificador del lado del cliente. | 

# Instrucciones DDL (lenguaje de definición de datos) en Amazon Keyspaces
<a name="cql.ddl"></a>

*Lenguaje de definición de datos* (DDL) es el conjunto de instrucciones de Cassandra Query Language (CQL) que se utiliza para administrar estructuras de datos en Amazon Keyspaces (para Apache Cassandra), como espacios de claves y tablas. Se utiliza DDL para crear estas estructuras de datos, modificarlas una vez creadas y eliminarlas cuando ya no estén en uso. Amazon Keyspaces realiza las operaciones DDL de forma asíncrona. Para obtener más información sobre cómo confirmar si una operación asíncrona se ha completado, consulte [Creación y eliminación asíncronas de espacios de claves y tablas](functional-differences.md#functional-differences.table-keyspace-management).

 Se admiten las siguientes instrucciones DDL: 
+  [CREATE KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.create) 
+  [ALTER KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.alter) 
+  [DROP KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.drop) 
+  [USA](cql.ddl.keyspace.md#cql.ddl.keyspace.use) 
+  [CREATE TABLE](cql.ddl.table.md#cql.ddl.table.create) 
+  [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter) 
+  [RESTORE TABLE](cql.ddl.table.md#cql.ddl.table.restore) 
+  [DROP TABLE](cql.ddl.table.md#cql.ddl.table.drop) 
+  [CREAR TIPO](cql.ddl.type.md#cql.ddl.type.create) 
+  [TIPO DE CAÍDA](cql.ddl.type.md#cql.ddl.type.drop) 

**Topics**
+ [Keyspaces](cql.ddl.keyspace.md)
+ [Tablas](cql.ddl.table.md)
+ [Tipos definidos por el usuario () UDTs](cql.ddl.type.md)

# Keyspaces
<a name="cql.ddl.keyspace"></a>

Un *espacio de claves* agrupa tablas relacionadas que son relevantes para una o más aplicaciones. En términos de un sistema de administración de bases de datos relacionales (RDBMS), los espacios de claves son aproximadamente similares a las bases de datos, espacios de tablas o construcciones similares.

**nota**  
En Apache Cassandra, los espacios de claves determinan cómo se replican los datos entre varios nodos de almacenamiento. Sin embargo, Amazon Keyspaces es un servicio totalmente administrado: los detalles de su capa de almacenamiento se administran en su nombre. Por este motivo, los espacios de claves en Amazon Keyspaces son solo construcciones lógicas y no están relacionados con el almacenamiento físico subyacente.

Para obtener información sobre los límites de cuota y las restricciones de los espacios de claves de Amazon Keyspaces, consulte [Cuotas para Amazon Keyspaces (para Apache Cassandra)](quotas.md).

**Topics**
+ [CREATE KEYSPACE](#cql.ddl.keyspace.create)
+ [ALTER KEYSPACE](#cql.ddl.keyspace.alter)
+ [DROP KEYSPACE](#cql.ddl.keyspace.drop)
+ [USE](#cql.ddl.keyspace.use)

## CREATE KEYSPACE
<a name="cql.ddl.keyspace.create"></a>

Utilice la instrucción `CREATE KEYSPACE` para crear un nuevo espacio de claves.

**Sintaxis**

```
create_keyspace_statement ::= 
    CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name
    WITH options
```

Donde:
+ `keyspace_name` es el nombre del espacio de claves que se va a crear.
+ *opciones* son una o más de las siguientes opciones:
  + `REPLICATION`: un mapa que indica la estrategia de réplica del espacio de claves:
    + `SingleRegionStrategy`: para un espacio de claves de región única. (Obligatorio) 
    + `NetworkTopologyStrategy`— Especifique al menos dos Regiones de AWS. El factor de réplica para cada región es tres. (Opcional)
  + `DURABLE_WRITES`: las escrituras en Amazon Keyspaces son siempre duraderas, por lo que esta opción no es necesaria. Sin embargo, si se especifica, el valor debe ser `true`.
  + `TAGS`: una lista de etiquetas de par clave-valor que se vinculan al recurso al crearlo. (Opcional)

**Ejemplo**

Cree un espacio de claves de la siguiente manera.

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class': 'SingleRegionStrategy'} and TAGS ={'key1':'val1', 'key2':'val2'} ;
```

Para crear un espacio de claves multirregional, especifique `NetworkTopologyStrategy` e incluya al menos dos. Regiones de AWS El factor de réplica para cada región es tres.

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'us-east-1':'3', 'ap-southeast-1':'3','eu-west-1':'3'};
```

## ALTER KEYSPACE
<a name="cql.ddl.keyspace.alter"></a>

*Puede usar la `ALTER KEYSPACE WITH` instrucción para las siguientes opciones*
+ `REPLICATION`— Utilice esta opción para añadir una nueva Región de AWS réplica a un espacio de claves. Puede añadir una nueva región a un espacio de claves de una sola región o de varias regiones. 
+ `TAGS`— Utilice esta opción para añadir o eliminar etiquetas de un espacio de teclas.

**Sintaxis**

```
alter_keyspace_statement ::= 
    ALTER KEYSPACE keyspace_name
    WITH options
```

Donde:
+ `keyspace_name` es el nombre del espacio de claves que se va a modificar.
+ *las opciones* son una de las siguientes:
  + `ADD | DROP TAGS`: una lista de etiquetas de par clave-valor que se van a añadir o eliminar del espacio de claves. 
  + `REPLICATION`— Un mapa que indica la estrategia de replicación del espacio de claves; 
    + `class`— `NetworkTopologyStrategy` define el espacio de claves como un espacio de claves multirregional.
    + `region`— Especifique uno adicional Región de AWS para este espacio de claves. El factor de réplica para cada región es tres.
    + `CLIENT_SIDE_TIMESTAMPS`— El valor predeterminado es`DISABLED`. Solo puede cambiar el estado a`ENABLED`.

**Ejemplos**

Modifique un espacio de teclas como se muestra en el siguiente ejemplo para añadir etiquetas.

```
ALTER KEYSPACE my_keyspace ADD TAGS {'key1':'val1', 'key2':'val2'};
```

Para añadir una tercera región a un espacio de claves de varias regiones, puede utilizar la siguiente instrucción.

```
ALTER KEYSPACE my_keyspace
WITH REPLICATION = {
    'class': 'NetworkTopologyStrategy',
    'us-east-1': '3',
    'us-west-2': '3',
    'us-west-1': '3'
} AND CLIENT_SIDE_TIMESTAMPS = {'status': 'ENABLED'};
```

## DROP KEYSPACE
<a name="cql.ddl.keyspace.drop"></a>

Utilice la `DROP KEYSPACE` instrucción para eliminar un espacio de claves, incluido todo su contenido, como las tablas.

**Sintaxis**

```
drop_keyspace_statement ::= 
    DROP KEYSPACE [ IF EXISTS ] keyspace_name
```

Donde:
+ *keyspace\$1name* es el nombre del espacio de claves que se va a eliminar.

**Ejemplo**

```
DROP KEYSPACE my_keyspace;
```

## USE
<a name="cql.ddl.keyspace.use"></a>

Utilice la `USE` sentencia para definir el espacio de claves actual. Esto le permite hacer referencia a objetos enlazados a un espacio de claves específico, por ejemplo, tablas y tipos, sin utilizar el nombre completo que incluye el prefijo del espacio de claves. 

**Sintaxis**

```
use_statement ::= 
    USE keyspace_name
```

Donde:
+ *keyspace\$1name es el nombre del* espacio de claves que se va a utilizar.

**Ejemplo**

```
USE my_keyspace;
```

# Tablas
<a name="cql.ddl.table"></a>

Las *tablas* son las estructuras de datos principales de Amazon Keyspaces. Los datos de una tabla se organizan en filas y columnas. Un subconjunto de esas columnas se utiliza para determinar la partición (y, en última instancia, la ubicación de los datos) mediante la especificación de una clave de partición.

Otro conjunto de columnas puede definirse en columnas de agrupación, lo que significa que pueden participar como predicados en la ejecución de consultas. 

De forma predeterminada, las tablas nuevas se crean con capacidad de rendimiento *bajo demanda*. Puede cambiar el modo de capacidad para las tablas nuevas y existentes. Para obtener más información sobre los modos read/write de rendimiento de capacidad, consulte. [Configurar los modos de read/write capacidad en Amazon Keyspaces](ReadWriteCapacityMode.md) 

Para las tablas en modo aprovisionado, puede configurar `AUTOSCALING_SETTINGS` de manera opcional. Para obtener más información sobre el escalado automático de Amazon Keyspaces y las opciones disponibles, consulte [Configuración del escalado automático en una tabla existente](autoscaling.configureTable.md).

Para obtener información sobre los límites de cuota y las restricciones de las tablas de Amazon Keyspaces, consulte [Cuotas para Amazon Keyspaces (para Apache Cassandra)](quotas.md).

**Topics**
+ [CREATE TABLE](#cql.ddl.table.create)
+ [ALTER TABLE](#cql.ddl.table.alter)
+ [RESTORE TABLE](#cql.ddl.table.restore)
+ [DROP TABLE](#cql.ddl.table.drop)

## CREATE TABLE
<a name="cql.ddl.table.create"></a>

Utilice la instrucción `CREATE TABLE` para crear una tabla nueva.

 **Sintaxis**

```
create_table_statement ::=  CREATE TABLE [ IF NOT EXISTS ] table_name
    '('
        column_definition 
        ( ',' column_definition )*
        [ ',' PRIMARY KEY '(' primary_key ')' ]
    ')' [ WITH table_options ]

column_definition      ::=  column_name cql_type [ FROZEN ][ STATIC ][ PRIMARY KEY]

primary_key            ::=  partition_key [ ',' clustering_columns ]

partition_key          ::=  column_name
                              | '(' column_name ( ',' column_name )* ')'

clustering_columns     ::=  column_name ( ',' column_name )*

table_options          ::=  [table_options]
                              | CLUSTERING ORDER BY '(' clustering_order ')' [ AND table_options ]
                              | cdc
                              | CUSTOM_PROPERTIES
                              | AUTOSCALING_SETTINGS
                              | default_time_to_live
                              | TAGS

clustering_order       ::=  column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*
```

Donde:
+ `table_name` es el nombre de la tabla que se va a crear. El nombre completo incluye el prefijo de espacio clave. Como alternativa, puede establecer el espacio de claves actual con la instrucción de espacio de `USE` claves.
+ `column_definition` consta de lo siguiente:
  +  *`column_name`*: el nombre de la columna.
  + `cql_type`: un tipo de datos de Amazon Keyspaces (consulte [Tipos de datos](cql.elements.md#cql.data-types)).
  + `FROZEN`— Designa esta columna definida por el usuario o cuyo tipo `collection` (por ejemplo,, `LIST``SET`, o`MAP`) está inmovilizada. Una colección *congelada* se serializa en un único valor inmutable y se trata como un `BLOB`. Para obtener más información, consulte [Tipos de colección](cql.elements.md#cql.data-types.collection).
  + `STATIC`: designa esta columna como estática. Las columnas estáticas almacenan valores que comparten todas las filas de la misma partición.
  + `PRIMARY KEY`: designa esta columna como clave principal de la tabla.
+ `primary_key` consta de lo siguiente:
  + `partition_key`
  + `clustering_columns`
+ `partition_key`:
  + La clave de partición puede ser una única columna o un valor compuesto formado por dos o más columnas. La porción de clave de partición de la clave principal es obligatoria y determina cómo almacena Amazon Keyspaces sus datos. 
+ `clustering_columns`:
  + La porción de columna de agrupación opcional de su clave principal determina cómo se agrupan y clasifican los datos dentro de cada partición. 
+ `table_options` consta de lo siguiente:
  + *`CLUSTERING ORDER BY`*: el CLUSTERING ORDER predeterminado en una tabla se compone de sus claves de agrupación en la dirección de ordenación `ASC` (ascendente). Especifíquelo para anular el comportamiento de ordenación predeterminado. 
  +  *`cdc`*— Un booleano que especifica si Amazon Keyspaces crea un flujo de captura de datos de cambios (CDC) para la tabla. El valor predeterminado es `false`. Para especificar `view type` cuándo se habilita una transmisión, defina el valor with. `cdc_specification` `CUSTOM_PROPERTIES` 
  +  *`CUSTOM_PROPERTIES`*: un mapa de ajustes específicos de Amazon Keyspaces.
    +  `capacity_mode`: especifica el modo de capacidad de rendimiento de lectura/escritura para la tabla. Las opciones son `throughput_mode:PAY_PER_REQUEST` y `throughput_mode:PROVISIONED`. El modo de capacidad aprovisionada requiere `read_capacity_units` y `write_capacity_units` como entradas. El valor predeterminado es `throughput_mode:PAY_PER_REQUEST`.
    +  `cdc_specification`: Especifica el flujo `view_type` de la CDC. Las opciones son:
      + `NEW_AND_OLD_IMAGES`— ambas versiones de la fila, antes y después del cambio. Este es el valor predeterminado.
      + `NEW_IMAGE`— la versión de la fila tras el cambio.
      + `OLD_IMAGE`— la versión de la fila anterior al cambio.
      + `KEYS_ONLY`— las claves de partición y agrupamiento de la fila que se ha modificado.

      Para obtener más información sobre las transmisiones de los CDC, consulte[Trabajar con transmisiones de captura de datos de cambios (CDC) en Amazon Keyspaces](cdc.md). Para ver ejemplos de código, consulte [Habilita una transmisión de CDC al crear una tabla nueva en Amazon Keyspaces](keyspaces-enable-cdc-new-table.md).
    +  `client_side_timestamps`: especifica si las marcas de tiempo del lado del cliente están habilitadas o deshabilitadas para la tabla. Las opciones son `{'status': 'enabled'}` y `{'status': 'disabled'}`. Si no se especifica, el valor predeterminado es `status:disabled`. Una vez habilitadas las marcas de tiempo del lado del cliente para una tabla, este ajuste no se puede deshabilitar. 
    +  `encryption_specification`: especifica las opciones de cifrado para el cifrado en reposo. Si no se especifica, el valor predeterminado es `encryption_type:AWS_OWNED_KMS_KEY`. La clave gestionada por el cliente de la opción de cifrado requiere la AWS KMS clave en formato Amazon Resource Name (ARN) como entrada::`kms_key_identifier:ARN`. `kms_key_identifier:ARN` 
    +  `point_in_time_recovery`: Especifica si point-in-time la restauración está habilitada o deshabilitada para la tabla. Las opciones son `status:enabled` y `status:disabled`. Si no se especifica, el valor predeterminado es `status:disabled`.
    + `replica_updates`: especifica la configuración de una tabla multirregional que es específica de una Región de AWS. En el caso de una tabla multirregional, puede configurar la capacidad de lectura de la tabla de forma diferente según la Región de AWS. Para ello, configure los siguientes parámetros. Para obtener más información y ejemplos, consulta [Creación de una tabla multirregional en modo aprovisionado con escalado automático en Amazon Keyspaces](tables-mrr-create-provisioned.md).
      + `region`— La réplica Región de AWS de la tabla con los siguientes ajustes:
        + `read_capacity_units`
    +  `TTL`: habilita la configuración personalizada del período de vida para la tabla. Para habilitarla, utilice `status:enabled`. El valor predeterminado es `status:disabled`. Una vez habilitado, `TTL` no se puede deshabilitar para la tabla.
  + `AUTOSCALING_SETTINGS` incluye la siguiente configuración opcional para las tablas en modo aprovisionado. Para obtener más información y ejemplos, consulta [Creación de una nueva tabla con escalado automático](autoscaling.createTable.md).
    + `provisioned_write_capacity_autoscaling_update`:
      + `autoscaling_disabled`: para habilitar el escalado automático de la capacidad de escritura, defina el valor en `false`. El valor predeterminado es `true`. (Opcional)
      + `minimum_units`: el nivel mínimo de rendimiento de escritura para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
      + `maximum_units`: el nivel máximo de rendimiento de escritura para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
      + `scaling_policy`: Amazon Keyspaces es compatible con la política de seguimiento de objetivos. El objetivo de escalado automático es la capacidad de escritura aprovisionada de la tabla.
        + `target_tracking_scaling_policy_configuration`: para definir la política de seguimiento de objetivos, debe definir el valor objetivo. Para obtener más información acerca del seguimiento de objetivos y los periodos de recuperación, consulte [Políticas de escalado de seguimiento de objetivos](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) en la *Guía del usuario de Application Auto Scaling*. 
          + `target_value`: la tasa de utilización objetivo de la tabla. El escalado automático de Amazon Keyspaces garantiza que la relación entre capacidad consumida y capacidad aprovisionada se mantenga en este valor o cerca del mismo. `target_value` se define como un porcentaje. Un número de dos dígitos entre 20 y 90. (Obligatorio)
          + `scale_in_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de reducción horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
          + `scale_out_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de escalado horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
          + `disable_scale_in`: un valor `boolean` que especifica si el `scale-in` está deshabilitado o habilitado para la tabla. Este parámetro está deshabilitado de forma predeterminada. Para activar el `scale-in`, establezca el valor `boolean` como `FALSE`. Esto significa que la capacidad se reduce verticalmente de forma automática para una tabla en su nombre. (Opcional) 
    + `provisioned_read_capacity_autoscaling_update`:
      + `autoscaling_disabled`: para habilitar el escalado automático de la capacidad de lectura, defina el valor en `false`. El valor predeterminado es `true`. (Opcional)
      + `minimum_units`: el nivel mínimo de rendimiento para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
      + `maximum_units`: el nivel máximo de rendimiento para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
      + `scaling_policy`: Amazon Keyspaces es compatible con la política de seguimiento de objetivos. El objetivo de escalado automático es la capacidad de lectura aprovisionada de la tabla.
        + `target_tracking_scaling_policy_configuration`: para definir la política de seguimiento de objetivos, debe definir el valor objetivo. Para obtener más información acerca del seguimiento de objetivos y los periodos de recuperación, consulte [Políticas de escalado de seguimiento de objetivos](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) en la *Guía del usuario de Application Auto Scaling*. 
          + `target_value`: la tasa de utilización objetivo de la tabla. El escalado automático de Amazon Keyspaces garantiza que la relación entre capacidad consumida y capacidad aprovisionada se mantenga en este valor o cerca del mismo. `target_value` se define como un porcentaje. Un número de dos dígitos entre 20 y 90. (Obligatorio)
          + `scale_in_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de reducción horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
          + `scale_out_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de escalado horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
          + `disable_scale_in`: un valor `boolean` que especifica si el `scale-in` está deshabilitado o habilitado para la tabla. Este parámetro está deshabilitado de forma predeterminada. Para activar el `scale-in`, establezca el valor `boolean` como `FALSE`. Esto significa que la capacidad se reduce verticalmente de forma automática para una tabla en su nombre. (Opcional) 
    + `replica_updates`: especifica la configuración de escalado automático Región de AWS específica de una tabla multirregión. En el caso de una tabla multirregional, puede configurar la capacidad de lectura de la tabla de forma diferente según la Región de AWS. Para ello, configure los siguientes parámetros. Para obtener más información y ejemplos, consulta [Actualización de la capacidad aprovisionada y la configuración de escalado automático para una tabla multirregional en Amazon Keyspaces](tables-mrr-autoscaling.md).
      + `region`— La réplica Región de AWS de la tabla con los siguientes ajustes:
        + `provisioned_read_capacity_autoscaling_update`
          + `autoscaling_disabled`: para habilitar el escalado automático de la capacidad de lectura de la tabla, defina el valor en `false`. El valor predeterminado es `true`. (Opcional) 
**nota**  
El escalado automático de una tabla multirregión debe estar activado o desactivado para todas las réplicas de la tabla.
          + `minimum_units`: el nivel mínimo de rendimiento de lectura para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
          + `maximum_units`: el nivel máximo de rendimiento de lectura para el que la tabla debería estar siempre preparada. El valor debe estar comprendido entre 1 y la cuota máxima de rendimiento por segundo de su cuenta (40 000 de forma predeterminada).
          + `scaling_policy`: Amazon Keyspaces es compatible con la política de seguimiento de objetivos. El objetivo de escalado automático es la capacidad de lectura aprovisionada de la tabla.
            + `target_tracking_scaling_policy_configuration`: para definir la política de seguimiento de objetivos, debe definir el valor objetivo. Para obtener más información acerca del seguimiento de objetivos y los periodos de recuperación, consulte [Políticas de escalado de seguimiento de objetivos](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) en la *Guía del usuario de Application Auto Scaling*. 
              + `target_value`: la tasa de utilización objetivo de la tabla. El escalado automático de Amazon Keyspaces garantiza que la relación entre capacidad de lectura consumida y capacidad de lectura aprovisionada se mantenga en este valor o cerca del mismo. `target_value` se define como un porcentaje. Un número de dos dígitos entre 20 y 90. (Obligatorio)
              + `scale_in_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de reducción horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
              + `scale_out_cooldown`: un periodo de recuperación en segundos entre actividades de escalado permite que la tabla se estabilice antes de que comience otra actividad de escalado horizontal. Si no se proporciona ningún valor, el valor predeterminado es 0. (Opcional)
              + `disable_scale_in`: un valor `boolean` que especifica si el `scale-in` está deshabilitado o habilitado para la tabla. Este parámetro está deshabilitado de forma predeterminada. Para activar el `scale-in`, establezca el valor `boolean` como `FALSE`. Esto significa que la capacidad de lectura se reduce verticalmente de forma automática para una tabla en su nombre. (Opcional) 
  + `default_time_to_live`: la configuración predeterminada de periodo de vida en segundos para la tabla.
  + `TAGS`: una lista de etiquetas de par clave-valor que se vinculan al recurso al crearlo. 
  + `clustering_order` consta de lo siguiente:
    +  *`column_name`*: el nombre de la columna. 
    +  *`ASC | DESC`*: establece el modificador de orden ascendente (`ASC`) o descendente (`DESC`). Si no se especifica, el valor predeterminado es ASC. 

**Ejemplo**

```
CREATE TABLE IF NOT EXISTS my_keyspace.my_table (
                                            id text,
                                            name text,
                                            region text,
                                            division text,
                                            project text,
                                            role text,
                                            pay_scale int,
                                            vacation_hrs float,
                                            manager_id text,
                                            PRIMARY KEY (id,division))
                                            WITH CUSTOM_PROPERTIES={
                                                'capacity_mode':{
                                                        'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20
                                                    },
                                                'point_in_time_recovery':{'status': 'enabled'},
                                                'encryption_specification':{
                                                        'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                                                        'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'
                                                    }
                                            }
                                            AND CLUSTERING ORDER BY (division ASC) 
                                            AND TAGS={'key1':'val1', 'key2':'val2'}
                                            AND default_time_to_live = 3024000;
```

En una tabla que utilice columnas de agrupación, las columnas que no sean de agrupación pueden declararse como estáticas en la definición de la tabla. Para obtener más información sobre las columnas estáticas, consulte [Estimación del consumo de capacidad de las columnas estáticas en Amazon Keyspaces](static-columns.md).

**Ejemplo**

```
CREATE TABLE my_keyspace.my_table (
                                            id int,
                                            name text,
                                            region text,
                                            division text,
                                            project text STATIC,
                                            PRIMARY KEY (id,division));
```

Puede crear una tabla con una columna que utilice un tipo definido por el usuario (UDT). La primera sentencia de los ejemplos crea un tipo, la segunda crea una tabla con una columna que utiliza ese tipo.

**Ejemplo**

```
CREATE TYPE my_keyspace."udt""N@ME" (my_field int);
CREATE TABLE my_keyspace.my_table (my_col1 int pri key, my_col2 "udt""N@ME");
```

## ALTER TABLE
<a name="cql.ddl.table.alter"></a>

Utilice la instrucción `ALTER TABLE` para añadir nuevas columnas, añadir etiquetas o modificar las propiedades personalizadas de la tabla.

**Sintaxis**

```
alter_table_statement ::=  ALTER TABLE table_name    
 
        [ ADD ( column_definition | column_definition_list)  ] 
        [[ADD | DROP] TAGS {'key1':'val1', 'key2':'val2'}]            
        [ WITH table_options [ , ... ] ] ;
        
column_definition      ::=  column_name cql_type
```

Donde:
+ `table_name` es el nombre de la tabla que se va a modificar.
+ `column_definition` es el nombre de la columna y el tipo de datos que se van a añadir.
+ `column_definition_list` es una lista separada por comas de columnas colocadas entre paréntesis.
+ `table_options` consta de lo siguiente:
  + `AUTOSCALING_SETTINGS` incluye la configuración de escalado automático opcional para las tablas aprovisionadas. Para ver la sintaxis y descripciones detalladas, consulte [CREATE TABLE](#cql.ddl.table.create). Para ver ejemplos, consulte [Configuración del escalado automático en una tabla existente](autoscaling.configureTable.md).
  +  *`cdc`*— Un booleano que especifica si Amazon Keyspaces crea un flujo de captura de datos de cambios (CDC) para la tabla. El valor predeterminado es `false`. Para especificar `view type` cuándo se habilita una transmisión, defina el valor with. `cdc_specification` `CUSTOM_PROPERTIES` 
  +  *`CUSTOM_PROPERTIES`*: un mapa de ajustes específicos para Amazon Keyspaces.
    +  `capacity_mode`: especifica el modo de capacidad de rendimiento de lectura/escritura para la tabla. Las opciones son `throughput_mode:PAY_PER_REQUEST` y `throughput_mode:PROVISIONED`. El modo de capacidad aprovisionada requiere `read_capacity_units` y `write_capacity_units` como entradas. El valor predeterminado es `throughput_mode:PAY_PER_REQUEST`.
    +  `cdc_specification`: Especifica el flujo `view_type` de la CDC. Las opciones son:
      + `NEW_AND_OLD_IMAGES`— ambas versiones de la fila, antes y después del cambio. Este es el valor predeterminado.
      + `NEW_IMAGE`— la versión de la fila tras el cambio.
      + `OLD_IMAGE`— la versión de la fila anterior al cambio.
      + `KEYS_ONLY`— las claves de partición y agrupamiento de la fila que se ha modificado.

      Para obtener más información sobre las transmisiones de los CDC, consulte[Trabajar con transmisiones de captura de datos de cambios (CDC) en Amazon Keyspaces](cdc.md). Para ver ejemplos de código, consulte [Habilitar una transmisión de CDC para una tabla existente en Amazon Keyspaces](keyspaces-enable-cdc-alter-table.md).
    +  `client_side_timestamps`: especifica si las marcas de tiempo del lado del cliente están habilitadas o deshabilitadas para la tabla. Las opciones son `{'status': 'enabled'}` y `{'status': 'disabled'}`. Si no se especifica, el valor predeterminado es `status:disabled`. Una vez habilitadas las marcas de tiempo del lado del cliente para una tabla, este ajuste no se puede deshabilitar. 
    +  `encryption_specification`: especifica la opción de cifrado para el cifrado en reposo. Las opciones son `encryption_type:AWS_OWNED_KMS_KEY` y `encryption_type:CUSTOMER_MANAGED_KMS_KEY`. La opción de cifrado de clave administrada por el cliente requiere la clave AWS KMS en formato de nombre de recurso de Amazon (ARN) como entrada: `kms_key_identifier:ARN`. 
    +  `point_in_time_recovery`: Especifica si point-in-time la restauración está habilitada o deshabilitada en la tabla. Las opciones son `status:enabled` y `status:disabled`. El valor predeterminado es `status:disabled`.
    + `replica_updates`: especifica la configuración Región de AWS específica de una tabla multirregional. En el caso de una tabla multirregional, puede configurar la capacidad de lectura de la tabla de forma diferente según la Región de AWS. Para ello, configure los siguientes parámetros. Para obtener más información y ejemplos, consulta [Actualización de la capacidad aprovisionada y la configuración de escalado automático para una tabla multirregional en Amazon Keyspaces](tables-mrr-autoscaling.md).
      + `region`— La réplica Región de AWS de la tabla con los siguientes ajustes:
        + `read_capacity_units` 
    +  `ttl`: habilita la configuración personalizada del período de vida para la tabla. Para habilitarla, utilice `status:enabled`. El valor predeterminado es `status:disabled`. Una vez habilitado, `ttl` no se puede deshabilitar para la tabla.
+ `default_time_to_live`: la configuración predeterminada de periodo de vida en segundos para la tabla.
+ `TAGS` es una lista de etiquetas de par clave-valor que se van a vincular al recurso.

**nota**  
Con ALTER TABLE, solo puede cambiar una propiedad personalizada. No puede combinar más de un comando ALTER TABLE en la misma instrucción.

**Ejemplos**

La siguiente instrucción muestra cómo añadir una columna a una tabla existente.

```
ALTER TABLE mykeyspace.mytable ADD (ID int);
```

Esta instrucción muestra cómo añadir dos columnas de colección a una tabla existente: 
+ Una columna de colección congelada `col_frozen_list` que contiene una colección congelada anidada
+ Una columna de colección no congelada `col_map` que contiene una colección congelada anidada

```
ALTER TABLE my_Table ADD(col_frozen_list FROZEN<LIST<FROZEN<SET<TEXT>>>>, col_map MAP<INT, FROZEN<SET<INT>>>);
```

El siguiente ejemplo muestra cómo añadir una columna que utilice un tipo definido por el usuario (UDT) a una tabla.

```
ALTER TABLE my_keyspace.my_table ADD (my_column, my_udt;);
```

Para cambiar el modo de capacidad de una tabla y especificar unidades de capacidad de lectura y escritura, puede utilizar la siguiente instrucción.

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}};
```

La siguiente instrucción especifica una clave KMS administrada por el cliente para la tabla.

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={     
              'encryption_specification':{ 
                      'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                      'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'     
                  } 
         };
```

Para habilitar point-in-time la restauración de una tabla, puede usar la siguiente instrucción.

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'point_in_time_recovery': {'status': 'enabled'}};
```

Para establecer un valor predeterminado de periodo de vida en segundos para una tabla, puede utilizar la siguiente instrucción.

```
ALTER TABLE my_table WITH default_time_to_live = 2592000;
```

Esta instrucción habilita la configuración personalizada de periodo de vida para una tabla.

```
ALTER TABLE mytable WITH CUSTOM_PROPERTIES={'ttl':{'status': 'enabled'}};
```

## RESTORE TABLE
<a name="cql.ddl.table.restore"></a>

Use la instrucción `RESTORE TABLE` para restaurar una tabla a un momento dado. Esta declaración requiere que point-in-time la recuperación esté habilitada en una tabla. Para obtener más información, consulte [Backup y restauración de datos con point-in-time recuperación para Amazon Keyspaces](PointInTimeRecovery.md).

**Sintaxis**

```
restore_table_statement ::=  
    RESTORE TABLE restored_table_name FROM TABLE source_table_name 
                    [ WITH table_options [ , ... ] ];
```

Donde:
+ `restored_table_name` es el nombre de la tabla restaurada.
+ `source_table_name` es el nombre de la tabla de origen.
+ `table_options` consta de lo siguiente:
  + `restore_timestamp` es el tiempo del punto de restauración en formato ISO 8601. Si no se especifica, se utiliza la marca de tiempo actual.
  +  *`CUSTOM_PROPERTIES`*: un mapa de ajustes específicos para Amazon Keyspaces.
    +  `capacity_mode`: especifica el modo de capacidad de rendimiento de lectura/escritura para la tabla. Las opciones son `throughput_mode:PAY_PER_REQUEST` y `throughput_mode:PROVISIONED`. El modo de capacidad aprovisionada requiere `read_capacity_units` y `write_capacity_units` como entradas. La configuración predeterminada es la configuración actual de la tabla de origen.
    +  `encryption_specification`: especifica la opción de cifrado para el cifrado en reposo. Las opciones son `encryption_type:AWS_OWNED_KMS_KEY` y `encryption_type:CUSTOMER_MANAGED_KMS_KEY`. La clave administrada por el cliente de la opción de cifrado requiere la AWS KMS clave en formato Amazon Resource Name (ARN) como entrada:. `kms_key_identifier:ARN` Para restaurar una tabla cifrada con una clave gestionada por el cliente en una tabla cifrada con una Clave propiedad de AWS, Amazon Keyspaces necesita acceder a la AWS KMS clave de la tabla de origen.
    +  `point_in_time_recovery`: Especifica si point-in-time la restauración está habilitada o deshabilitada para la tabla. Las opciones son `status:enabled` y `status:disabled`. A diferencia de cuando se crean tablas nuevas, el estado predeterminado para tablas restauradas es `status:enabled` porque la configuración se hereda de la tabla de origen. Para deshabilitar la PITR para las tablas restauradas, debe configurar `status:disabled` de forma explícita.
    + `replica_updates`: especifica la configuración Región de AWS específica de una tabla multirregional. En el caso de una tabla multirregional, puede configurar la capacidad de lectura de la tabla de forma diferente según la Región de AWS. Para ello, configure los siguientes parámetros. 
      + `region`— La réplica Región de AWS de la tabla con los siguientes ajustes:
        + `read_capacity_units` 
  + `AUTOSCALING_SETTINGS` incluye la configuración de escalado automático opcional para las tablas aprovisionadas. Para ver en detalle la sintaxis y las descripciones, consulte [CREATE TABLE](#cql.ddl.table.create).
  + `TAGS` es una lista de etiquetas de par clave-valor que se van a vincular al recurso.

**nota**  
Las tablas eliminadas solo se pueden restaurar al momento de la eliminación.

**Ejemplo**

```
RESTORE TABLE mykeyspace.mytable_restored from table mykeyspace.my_table 
WITH restore_timestamp = '2020-06-30T04:05:00+0000'
AND custom_properties = {'point_in_time_recovery':{'status':'disabled'}, 'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}}
AND TAGS={'key1':'val1', 'key2':'val2'};
```

## DROP TABLE
<a name="cql.ddl.table.drop"></a>

Utilice la instrucción `DROP TABLE` para eliminar una tabla del espacio de claves.

**Sintaxis**

```
drop_table_statement ::=  
    DROP TABLE [ IF EXISTS ] table_name
```

Donde:
+ `IF EXISTS` evita que `DROP TABLE` falle si la tabla no existe. (Opcional)
+ `table_name` es el nombre de la tabla que se va a desechar.

**Ejemplo**

```
DROP TABLE my_keyspace.my_table;
```

# Tipos definidos por el usuario () UDTs
<a name="cql.ddl.type"></a>

*UDT*: agrupación de campos y tipos de datos que puede utilizar para definir una sola columna en Amazon Keyspaces. Los tipos de datos válidos UDTs son todos los tipos de datos de Cassandra compatibles, incluidas las colecciones y otros UDTs que ya haya creado en el mismo espacio de claves. Para obtener más información sobre los tipos de datos de Cassandra compatibles, consulte. [Compatibilidad con tipos de datos de Cassandra](cassandra-apis.md#cassandra-data-type)

```
user_defined_type::= udt_name
udt_name::= [ keyspace_name '.' ] identifier
```

**Topics**
+ [CREATE TYPE](#cql.ddl.type.create)
+ [DROP TYPE](#cql.ddl.type.drop)

## CREATE TYPE
<a name="cql.ddl.type.create"></a>

Utilice la `CREATE TYPE` sentencia para crear un tipo nuevo.

 **Sintaxis**

```
create_type_statement ::=  CREATE TYPE [ IF NOT EXISTS ] udt_name
    '('field_definition ( ',' field_definition)* ')'
            field_definition::= identifier cql_type
```

Donde:
+ `IF NOT EXISTS``CREATE TYPE`evita que se produzca un error si el tipo ya existe. (Opcional)
+ `udt_name`es el nombre completo de la UDT en formato tipográfico, por ejemplo. `my_keyspace.my_type` Si define el espacio de claves actual con la `USE` instrucción, no necesita especificar el nombre del espacio de claves.
+ `field_definition`consta de un nombre y un tipo.

En la siguiente tabla se muestran ejemplos de nombres UDT permitidos. La primera columna muestra cómo introducir el nombre al crear el tipo, y la segunda columna muestra cómo Amazon Keyspaces formatea el nombre internamente. Amazon Keyspaces espera el nombre formateado para operaciones como. `GetType`


| Nombre introducido | Nombre formateado | Nota | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | Sin comillas dobles, Amazon Keyspaces convierte todos los caracteres en mayúsculas en minúsculas. | 
|  "MY\$1UDT"  | MY\$1UDT | Con las comillas dobles, Amazon Keyspaces respeta los caracteres en mayúscula y elimina las comillas dobles del nombre formateado. | 
|  "1234"  | 1234 | Con comillas dobles, el nombre puede empezar por un número y Amazon Keyspaces elimina las comillas dobles del nombre formateado. | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | Con comillas dobles, el nombre puede contener caracteres especiales y Amazon Keyspaces elimina las comillas dobles del nombre formateado. | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces elimina las comillas dobles exteriores y las comillas dobles de escape del nombre formateado. | 

**Ejemplos**

```
CREATE TYPE my_keyspace.phone (
    country_code int,
    number text
);
```

Puede anidar UDTs si la UDT anidada está inmovilizada. Para obtener más información sobre los valores predeterminados y las cuotas de los tipos, consulte. [Cuotas de UDT y valores predeterminados de Amazon Keyspaces](quotas.md#udt-table)

```
CREATE TYPE my_keyspace.user (
    first_name text,
    last_name text,
    phones FROZEN<phone>
);
```

Para ver más ejemplos de código que muestran cómo crear UDTs, consulte[Tipos definidos por el usuario (UDTs) en Amazon Keyspaces](udts.md).

## DROP TYPE
<a name="cql.ddl.type.drop"></a>

Utilice la `DROP TYPE` sentencia para eliminar una UDT. Solo puede eliminar un tipo que no esté siendo utilizado por otro tipo o tabla.

 **Sintaxis**

```
drop_type_statement ::=  DROP TYPE [ IF EXISTS ] udt_name
```

Donde:
+ `IF EXISTS``DROP TYPE`evita que se produzca un error si el tipo no existe. (Opcional)
+ `udt_name`es el nombre completo de la UDT en formato tipográfico, por ejemplo. `my_keyspace.my_type` Si define el espacio de claves actual con la `USE` instrucción, no necesita especificar el nombre del espacio de claves.

**Ejemplo**

```
DROP TYPE udt_name;
```

# Instrucciones DML (lenguaje de manipulación de datos) en Amazon Keyspaces
<a name="cql.dml"></a>

*Lenguaje de manipulación de datos* (DML) es el conjunto de instrucciones de Cassandra Query Language (CQL) que se utiliza para administrar estructuras de datos en las tablas de Amazon Keyspaces (para Apache Cassandra). Puede usar instrucciones DML para agregar, modificar o eliminar datos de una tabla.

También puede usar instrucciones DML para consultar datos en una tabla. (Tenga en cuenta que CQL no admite uniones ni subconsultas).

**Topics**
+ [SELECT](cql.dml.select.md)
+ [INSERT](cql.dml.insert.md)
+ [UPDATE](cql.dml.update.md)
+ [DELETE](cql.dml.delete.md)

# SELECT
<a name="cql.dml.select"></a>

Utilice una instrucción SELECT para consultar datos. 

**Sintaxis**

```
select_statement ::=  SELECT  [ JSON ] ( select_clause | '*' )
                      FROM table_name
                      [ WHERE 'where_clause' ]
                      [ ORDER BY 'ordering_clause' ]
                      [ LIMIT (integer | bind_marker) ]
                      [ ALLOW FILTERING ]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | CAST '(' selector AS cql_type ')'
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND relation )*
relation         ::=  column_name operator term
                      TOKEN
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | IN | CONTAINS | CONTAINS KEY
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
```

**Ejemplos**

```
SELECT name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;

SELECT JSON name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;
```

Acerca de una tabla que asigne los tipos de datos codificados en JSON a los tipos de datos de Amazon Keyspaces, consulte [Codificación JSON de los tipos de datos de Amazon Keyspaces](cql.elements.md#cql.data-types.JSON).

**Uso de la palabra clave `IN`**

La palabra clave `IN` especifica la igualdad de uno o más valores. Se puede aplicar a la clave de partición y a la columna de agrupación. Los resultados se devuelven en el orden en que se presentan las claves en la instrucción `SELECT`.

**Ejemplos**

```
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 = 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 <= 2;
SELECT * from mykeyspace.mytable WHERE primary.key1 = 1 and clustering.key1 IN (1, 2);
SELECT * from mykeyspace.mytable WHERE primary.key1 <= 2 and clustering.key1 IN (1, 2) ALLOW FILTERING;
```

Para obtener más información sobre la palabra clave `IN` y la forma en que Amazon Keyspaces procesa la instrucción, consulte [Uso del operador `IN` con la instrucción `SELECT` en una consulta en Amazon Keyspaces](in.select.md).

**Ordenación de los resultados**

La cláusula `ORDER BY` especifica el orden de clasificación de los resultados devueltos. Toma como argumentos una lista de nombres de columnas junto con el orden de clasificación de cada columna. Solo puede especificar columnas de agrupación en las cláusulas de ordenación. Las columnas no agrupadas no están permitidas. Las opciones de ordenación son `ASC` para ordenación ascendente y `DESC` para ordenación descendente. Si se omite el orden de clasificación, se utiliza el orden predeterminado de la columna de agrupación. Acerca de los posibles criterios de ordenación, consulte. [Ordenación de resultados con `ORDER BY` en Amazon Keyspaces](ordering-results.md)

**Ejemplo**

```
SELECT name, id, division, manager_id FROM "myGSGKeyspace".employees_tbl WHERE id = '012-34-5678' ORDER BY division;
```

Al utilizar `ORDER BY` con la palabra clave `IN`, los resultados se ordenan dentro de una página. No se admite la reordenación completa con la paginación deshabilitada.

**TOKEN**

Puede aplicar la función `TOKEN` a la columna `PARTITION KEY` en las cláusulas `SELECT` y `WHERE`. Con la función `TOKEN`, Amazon Keyspaces devuelve filas basadas en el valor del token asignado de la `PARTITION_KEY` en lugar de en el valor de la `PARTITION KEY`.

Las relaciones `TOKEN` no se admiten con la palabra clave `IN`.

**Ejemplos**

```
SELECT TOKEN(id) from my_table; 

SELECT TOKEN(id) from my_table WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;
```

**Función TTL**

Puede utilizar la función `TTL` con la instrucción `SELECT` para recuperar el tiempo de caducidad en segundos que se almacena para una columna. Si no se establece ningún valor `TTL`, la función devuelve `null`.

**Ejemplo**

```
SELECT TTL(my_column) from my_table;
```

La función `TTL` no se puede utilizar en columnas multicelda, como las colecciones.

**Función WRITETIME**

Puede utilizar la función `WRITETIME` con la instrucción `SELECT` para recuperar la marca de tiempo que se almacena como metadatos para el valor de una columna solo si la tabla utiliza marcas de tiempo en el lado del cliente. Para obtener más información, consulte [Marcas de tiempo del cliente en Amazon Keyspaces](client-side-timestamps.md). 

```
SELECT WRITETIME(my_column) from my_table;
```

La función `WRITETIME` no se puede utilizar en columnas multicelda, como las colecciones.

**nota**  
Por compatibilidad con el comportamiento establecido de los controladores Cassandra, las políticas de autorización basadas en etiquetas no se aplican cuando se realizan operaciones en tablas del sistema mediante llamadas a la API de Cassandra Query Language (CQL) a través de los controladores y las herramientas para desarrolladores de Cassandra. Para obtener más información, consulte [Acceso a recursos de Amazon Keyspaces basado en etiquetas](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags).

# INSERT
<a name="cql.dml.insert"></a>

Utilice la instrucción `INSERT` para añadir una fila a una tabla.

**Sintaxis**

```
insert_statement ::=  INSERT INTO table_name ( names_values | json_clause )
                      [ IF NOT EXISTS ]
                      [ USING update_parameter ( AND update_parameter )* ]
names_values     ::=  names VALUES tuple_literal
json_clause      ::=  JSON string [ DEFAULT ( NULL | UNSET ) ]                
names            ::=  '(' column_name ( ',' column_name )* ')'
```

**Ejemplo**

```
INSERT INTO "myGSGKeyspace".employees_tbl (id, name, project, region, division, role, pay_scale, vacation_hrs, manager_id)
VALUES ('012-34-5678','Russ','NightFlight','US','Engineering','IC',3,12.5, '234-56-7890') ;
```

**Actualización de parámetros**

`INSERT` admite los siguientes valores como `update_parameter`:
+ `TTL`: un valor de tiempo en segundos. El valor máximo configurable es de 630 720 000 segundos, lo que equivale a 20 años.
+ `TIMESTAMP`: un valor `bigint` que representa el número de microsegundos desde la hora base estándar conocida como epoch: 1 de enero de 1970 a las 00:00:00 GMT. Una marca de tiempo en Amazon Keyspaces debe estar comprendida entre 2 días en el pasado y 5 minutos en el futuro.

**Ejemplo**

```
INSERT INTO my_table (userid, time, subject, body, user)
        VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello','205.212.123.123')
        USING TTL 259200;
```

**Compatibilidad con JSON**

Acerca de una tabla que asigne los tipos de datos codificados en JSON a los tipos de datos de Amazon Keyspaces, consulte [Codificación JSON de los tipos de datos de Amazon Keyspaces](cql.elements.md#cql.data-types.JSON).

Puede utilizar la palabra clave `JSON` para insertar un mapa codificado con `JSON` como una única fila. Para las columnas que existan en la tabla pero que se omitan en la instrucción de inserción JSON, utilice `DEFAULT UNSET` para conservar los valores existentes. Utilice `DEFAULT NULL` para escribir un valor NULL en cada fila de columnas omitidas y sobrescribir los valores existentes (se aplican los cargos de escritura estándar). `DEFAULT NULL` es la opción predeterminada.

**Ejemplo**

```
INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678",
                                                 "name": "Russ",
                                                 "project": "NightFlight",
                                                 "region": "US",
                                                 "division": "Engineering",
                                                 "role": "IC",
                                                 "pay_scale": 3,
                                                 "vacation_hrs": 12.5,
                                                 "manager_id": "234-56-7890"}';
```

Si los datos JSON contienen claves duplicadas, Amazon Keyspaces almacena el último valor de la clave (de forma similar a Apache Cassandra). En el siguiente ejemplo, en el que la clave duplicada es `id`, se utiliza el valor `234-56-7890`.

**Ejemplo**

```
INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678",
                                                 "name": "Russ",
                                                 "project": "NightFlight",
                                                 "region": "US",
                                                 "division": "Engineering",
                                                 "role": "IC",
                                                 "pay_scale": 3,
                                                 "vacation_hrs": 12.5,
                                                 "id": "234-56-7890"}';
```

# UPDATE
<a name="cql.dml.update"></a>

Utilice la instrucción `UPDATE` para modificar una fila en una tabla.

**Sintaxis**

```
update_statement ::=  UPDATE table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      SET assignment ( ',' assignment )*
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]
update_parameter ::=  ( integer | bind_marker )
assignment       ::=  simple_selection '=' term
                     | column_name '=' column_name ( '+' | '-' ) term
                     | column_name '=' list_literal '+' column_name
simple_selection ::=  column_name
                     | column_name '[' term ']'
                     | column_name '.' `field_name
condition        ::=  simple_selection operator term
```

**Ejemplo**

```
UPDATE "myGSGKeyspace".employees_tbl SET pay_scale = 5 WHERE id = '567-89-0123' AND division = 'Marketing' ;
```

Para incrementar un `counter`, utilice la siguiente sintaxis. Para obtener más información, consulte [Contadores](cql.elements.md#cql.data-types.numeric.counters).

```
UPDATE ActiveUsers SET counter = counter + 1  WHERE user = A70FE1C0-5408-4AE3-BE34-8733E5K09F14 AND action = 'click';
```

**Actualización de parámetros**

`UPDATE` admite los siguientes valores como `update_parameter`:
+ `TTL`: un valor de tiempo en segundos. El valor máximo configurable es de 630 720 000 segundos, lo que equivale a 20 años.
+ `TIMESTAMP`: un valor `bigint` que representa el número de microsegundos desde la hora base estándar conocida como epoch: 1 de enero de 1970 a las 00:00:00 GMT. Una marca de tiempo en Amazon Keyspaces debe estar comprendida entre 2 días en el pasado y 5 minutos en el futuro.

**Ejemplo**

```
UPDATE my_table (userid, time, subject, body, user)
        VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello again','205.212.123.123')
        USING TIMESTAMP '2022-11-03 13:30:54+0400';
```

# DELETE
<a name="cql.dml.delete"></a>

Utilice la instrucción `DELETE` para eliminar una fila en una tabla.

**Sintaxis**

```
delete_statement ::=  DELETE [ simple_selection ( ',' simple_selection ) ]
                      FROM table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]

simple_selection ::=  column_name
                     | column_name '[' term ']'
                     | column_name '.' `field_name

condition        ::=  simple_selection operator term
```

Donde:
+ `table_name` es la tabla que contiene la fila que desea eliminar.

**Ejemplo**

```
DELETE manager_id FROM "myGSGKeyspace".employees_tbl WHERE id='789-01-2345' AND division='Executive' ;
```

`DELETE` admite el siguiente valor como `update_parameter`:
+ `TIMESTAMP`: un valor `bigint` que representa el número de microsegundos desde la hora base estándar conocida como epoch: 1 de enero de 1970 a las 00:00:00 GMT.

# Funciones integradas en Amazon Keyspaces
<a name="cql.functions"></a>

Amazon Keyspaces (para Apache Cassandra) admite diversas funciones integradas que puede utilizar en las instrucciones de Cassandra Query Language (CQL).

**Topics**
+ [Funciones escalares](#cql.functions.scalar)

## Funciones escalares
<a name="cql.functions.scalar"></a>

Una *función escalar* realiza un cálculo sobre un único valor y devuelve el resultado como un único valor. Amazon Keyspaces soporta las siguientes funciones escalares.


****  

| Función | Description (Descripción) | 
| --- | --- | 
|  `blobAsType`  | Devuelve un valor del tipo de datos especificado. | 
|  `cast`  | Convierte un tipo de datos nativo en otro tipo de datos nativo. | 
|  `currentDate`  | Devuelve la fecha actual date/time . | 
|  `currentTime`  | Devuelve la corriente en date/time forma de hora. | 
|  `currentTimestamp`  | Devuelve la corriente date/time como una marca de tiempo. | 
|  `currentTimeUUID`  | Devuelve la corriente date/time como un. timeuuid | 
|  `fromJson`  | Convierte la cadena JSON en el tipo de datos de la columna seleccionada.  | 
|  `maxTimeuuid`  | Devuelve el timeuuid más grande posible para la marca de tiempo o la cadena de fecha.  | 
|  `minTimeuuid`  | Devuelve el timeuuid más pequeño posible para la marca de tiempo o la cadena de fecha.  | 
|  `now`  | Devuelve un nuevo timeuuid único.  | 
|  `toDate`  | Convierte un timeuuid o una marca de tiempo en un tipo de fecha. | 
|  `toJson`  | Devuelve el valor de la columna seleccionada en formato JSON.  | 
|  `token`  | Devuelve el valor hash de la clave de partición.  | 
|  `toTimestamp`  | Convierte un timeuuid o una fecha en una marca de tiempo. | 
|  `TTL`  | Devuelve el tiempo de caducidad en segundos de una columna. | 
|  `typeAsBlob`  | Convierte el tipo de datos especificado en un blob. | 
|  `toUnixTimestamp`  | Convierte un timeuuid o una marca de tiempo en un bigInt. | 
|  `uuid`  | Devuelve un UUID versión 4 aleatorio.  | 
|  `writetime`  | Devuelve la marca de tiempo del valor de la columna especificada. | 
|  `dateOf`  | (En desuso) Extrae la marca de tiempo de un timeuuid y devuelve el valor como fecha. | 
|  `unixTimestampOf`  | (En desuso) Extrae la marca de tiempo de un timeuuid y devuelve el valor como una marca de tiempo entera de 64 bits sin procesar.  | 