

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.

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