

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.

# 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. | 