

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.

# Creación, lectura, actualización y eliminación de datos (CRUD) mediante CQL en Amazon Keyspaces
<a name="getting-started.dml"></a>

En este paso del tutorial, aprenderá a insertar, leer, actualizar y eliminar datos en una tabla de Amazon Keyspaces mediante instrucciones en el lenguaje de manipulación de datos (DML) de CQL. En Amazon Keyspaces, solo puede crear instrucciones DML en lenguaje CQL. En este tutorial, practicará la ejecución de instrucciones DML utilizando la `cqlsh-expansion` con [AWS CloudShell](using-aws-with-cloudshell.md) en la Consola de administración de AWS.
+ **Inserción de datos**: en esta sección se describe la inserción de registros individuales y múltiples en una tabla mediante la instrucción `INSERT`. Aprenderá a cargar datos desde un archivo CSV y a comprobar que las inserciones se hayan realizado correctamente mediante consultas `SELECT`. 
+ **Lectura de datos**: aquí explorará diferentes variaciones de la instrucción `SELECT` para recuperar datos de una tabla. Entre los temas se incluyen la selección de todos los datos, la selección de columnas específicas, el filtrado de filas en función de las condiciones mediante la cláusula `WHERE` y la comprensión de las condiciones simples y compuestas. 
+ **Actualización de datos**: en esta sección, aprenderá a modificar los datos existentes en una tabla mediante la instrucción `UPDATE`. Practicará la actualización de columnas únicas y múltiples y, al mismo tiempo, comprenderá las restricciones relativas a la actualización de las columnas de clave principal. 
+ **Eliminación de datos**: la última sección trata sobre la eliminación de datos de una tabla mediante la instrucción `DELETE`. Aprenderá a eliminar celdas específicas y filas enteras y verá cuáles son las implicaciones de eliminar datos en lugar de eliminar toda la tabla o todo el espacio de claves. 

A lo largo del tutorial, encontrará ejemplos, consejos y oportunidades para practicar cómo escribir sus propias consultas CQL para distintos escenarios.

**Topics**
+ [Inserción y carga de datos en una tabla de Amazon Keyspaces](getting-started.dml.create.md)
+ [Lectura de los datos de una tabla con la instrucción CQL `SELECT` en Amazon Keyspaces](getting-started.dml.read.md)
+ [Actualización de datos en una tabla de Amazon Keyspaces con CQL](getting-started.dml.update.md)
+ [Eliminación de los datos de una tabla mediante la sentencia CQL `DELETE`](getting-started.dml.delete.md)

# Inserción y carga de datos en una tabla de Amazon Keyspaces
<a name="getting-started.dml.create"></a>

Para crear datos en su tabla `book_awards`, utilice la instrucción `INSERT` para añadir una única fila. 

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región.

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

   La salida de ese comando debería tener este aspecto.

   ```
   Connected to Amazon Keyspaces at cassandra.us-east-1.amazonaws.com:9142
   [cqlsh 6.1.0 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
   Use HELP for help.
   cqlsh current consistency level is ONE.
   ```

1. Para poder escribir datos en su tabla Amazon Keyspaces con cqlsh, antes debe establecer la coherencia de escritura de la sesión actual de cqlsh en `LOCAL_QUORUM`. Para obtener más información sobre los niveles de coherencia admitidos, consulte [Niveles de coherencia de escritura](consistency.md#WriteConsistency). Tenga en cuenta que este paso no es necesario si utiliza el editor CQL en la Consola de administración de AWS.

   ```
   CONSISTENCY LOCAL_QUORUM;
   ```

1. Para insertar un único registro, ejecute el siguiente comando en el editor CQL.

   ```
   INSERT INTO catalog.book_awards (award, year, category, rank, author, book_title, publisher)
   VALUES ('Wolf', 2023, 'Fiction',3,'Shirley Rodriguez','Mountain', 'AnyPublisher') ;
   ```

1. Verifique que los datos se hayan añadido correctamente a su tabla; para ello, ejecute el siguiente comando.

   ```
   SELECT * FROM catalog.book_awards;
   ```

   La salida de la sentencia debería tener el siguiente aspecto.

   ```
    year | award | category | rank | author            | book_title | publisher
   ------+-------+----------+------+-------------------+------------+--------------
    2023 |  Wolf |  Fiction |    3 | Shirley Rodriguez |   Mountain | AnyPublisher
   
   (1 rows)
   ```

**Para insertar varios registros desde un archivo con cqlsh**

1. Descargue el archivo CSV de ejemplo (`keyspaces_sample_table.csv`), contenido en el archivo comprimido [samplemigration.zip](samples/samplemigration.zip). Descomprima el archivo y tome nota de la ruta a `keyspaces_sample_table.csv`.  
![\[Captura de pantalla de un archivo CSV que muestra el resultado de la tabla después de importar el archivo csv.\]](http://docs.aws.amazon.com/es_es/keyspaces/latest/devguide/images/keyspaces-awards.png)

1. Abre AWS CloudShell Consola de administración de AWS y conéctate a Amazon Keyspaces mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región.

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. En la línea de comandos de `cqlsh` (`cqlsh>`), especifique un espacio de claves.

   ```
   USE catalog ;
   ```

1. Establezca la coherencia de escritura en `LOCAL_QUORUM`. Para obtener más información sobre los niveles de coherencia admitidos, consulte [Niveles de coherencia de escritura](consistency.md#WriteConsistency).

   ```
   CONSISTENCY LOCAL_QUORUM;
   ```

1.  AWS CloudShell Selecciona **Acciones** en la parte superior derecha de la pantalla y, a continuación, selecciona **Cargar archivo** para cargar el archivo csv descargado anteriormente. Tome nota de la ruta al archivo.

1. En la línea de comandos de espacio de claves (`cqlsh:catalog>`), ejecute la siguiente instrucción.

   ```
   COPY book_awards (award, year, category, rank, author, book_title, publisher) FROM '/home/cloudshell-user/keyspaces_sample_table.csv' WITH header=TRUE ;
   ```

   La salida de la instrucción debe ser similar a esta.

   ```
   cqlsh:catalog> COPY book_awards (award, year, category, rank, author, book_title, publisher)                      FROM '/home/cloudshell-user/keyspaces_sample_table.csv' WITH delimiter=',' AND header=TRUE ;
   cqlsh current consistency level is LOCAL_QUORUM.
   Reading options from /home/cloudshell-user/.cassandra/cqlshrc:[copy]: {'numprocesses': '16', 'maxattempts': '1000'}
   Reading options from /home/cloudshell-user/.cassandra/cqlshrc:[copy-from]: {'ingestrate': '1500', 'maxparseerrors': '1000', 'maxinserterrors': '-1', 'maxbatchsize': '10', 'minbatchsize': '1', 'chunksize': '30'}
   Reading options from the command line: {'delimiter': ',', 'header': 'TRUE'}
   Using 16 child processes
   
   Starting copy of catalog.book_awards with columns [award, year, category, rank, author, book_title, publisher].
   OSError: handle is closed      0 rows/s; Avg. rate:       0 rows/s
   Processed: 9 rows; Rate:       0 rows/s; Avg. rate:       0 rows/s
   9 rows imported from 1 files in 0 day, 0 hour, 0 minute, and 26.706 seconds (0 skipped).
   ```

1. Verifique que los datos se hayan añadido correctamente a su tabla; para ello, ejecute la siguiente consulta.

   ```
   SELECT * FROM book_awards ;
   ```

   Debería ver la siguiente salida.

   ```
    year | award            | category    | rank | author             | book_title            | publisher
   ------+------------------+-------------+------+--------------------+-----------------------+---------------
    2020 |             Wolf | Non-Fiction |    1 |        Wang Xiulan |      History of Ideas | Example Books
    2020 |             Wolf | Non-Fiction |    2 | Ana Carolina Silva |         Science Today | SomePublisher
    2020 |             Wolf | Non-Fiction |    3 |  Shirley Rodriguez | The Future of Sea Ice |  AnyPublisher
    2020 | Kwesi Manu Prize |     Fiction |    1 |         Akua Mansa |     Where did you go? | SomePublisher
    2020 | Kwesi Manu Prize |     Fiction |    2 |        John Stiles |             Yesterday | Example Books
    2020 | Kwesi Manu Prize |     Fiction |    3 |         Nikki Wolf | Moving to the Chateau |  AnyPublisher
    2020 |      Richard Roe |     Fiction |    1 |  Alejandro Rosalez |           Long Summer | SomePublisher
    2020 |      Richard Roe |     Fiction |    2 |        Arnav Desai |               The Key | Example Books
    2020 |      Richard Roe |     Fiction |    3 |      Mateo Jackson |      Inside the Whale |  AnyPublisher
   
   (9 rows)
   ```

Para obtener más información sobre cómo usar `cqlsh COPY` para cargar datos desde archivos csv a una tabla de Amazon Keyspaces, consulte [Tutorial: Carga de datos en Amazon Keyspaces utilizando cqlsh](bulk-upload.md).

# Lectura de los datos de una tabla con la instrucción CQL `SELECT` en Amazon Keyspaces
<a name="getting-started.dml.read"></a>

En la sección [Inserción y carga de datos en una tabla de Amazon Keyspaces](getting-started.dml.create.md), utilizó la instrucción `SELECT` para verificar que ha añadido correctamente los datos a su tabla. En esta sección, usted restringe el uso de `SELECT` para mostrar columnas específicas y solo las filas que cumplan criterios específicos.

La forma general de la instrucción `SELECT` es la siguiente.

```
SELECT column_list FROM table_name [WHERE condition [ALLOW FILTERING]] ;
```

**Topics**
+ [Selección de todos los datos de la tabla](#getting-started.dml.read.all)
+ [Selección de un subconjunto de columnas](#getting-started.dml.read.columns)
+ [Selección de un subconjunto de filas](#getting-started.dml.read.rows)

## Selección de todos los datos de la tabla
<a name="getting-started.dml.read.all"></a>

La forma más sencilla de la instrucción `SELECT` devuelve todos los datos de su tabla.

**importante**  
 En un entorno de producción, no suele ser una práctica recomendada ejecutar este comando, dado que devuelve todos los datos de la tabla. 

**Para seleccionar todos los datos de su tabla**

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región. 

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. Ejecute la siguiente consulta.

   ```
   SELECT * FROM catalog.book_awards ;
   ```

   El uso del carácter comodín (`*`) para `column_list` selecciona todas las columnas. La salida de la instrucción tiene un aspecto semejante al del siguiente ejemplo.

   ```
    year | award            | category    | rank | author             | book_title            | publisher
   ------+------------------+-------------+------+--------------------+-----------------------+---------------
    2020 |             Wolf | Non-Fiction |    1 |        Wang Xiulan |      History of Ideas |  AnyPublisher
    2020 |             Wolf | Non-Fiction |    2 | Ana Carolina Silva |         Science Today | SomePublisher
    2020 |             Wolf | Non-Fiction |    3 |  Shirley Rodriguez | The Future of Sea Ice |  AnyPublisher
    2020 | Kwesi Manu Prize |     Fiction |    1 |         Akua Mansa |     Where did you go? | SomePublisher
    2020 | Kwesi Manu Prize |     Fiction |    2 |        John Stiles |             Yesterday | Example Books
    2020 | Kwesi Manu Prize |     Fiction |    3 |         Nikki Wolf | Moving to the Chateau |  AnyPublisher
    2020 |      Richard Roe |     Fiction |    1 |  Alejandro Rosalez |           Long Summer | SomePublisher
    2020 |      Richard Roe |     Fiction |    2 |        Arnav Desai |               The Key | Example Books
    2020 |      Richard Roe |     Fiction |    3 |      Mateo Jackson |      Inside the Whale |  AnyPublisher
   ```

## Selección de un subconjunto de columnas
<a name="getting-started.dml.read.columns"></a>

**Para consultar un subconjunto de columnas**

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región. 

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. Para recuperar solo las columnas `award`, `category` y `year`, ejecute la siguiente consulta.

   ```
   SELECT award, category, year FROM catalog.book_awards ;
   ```

   La salida contiene solo las columnas especificadas en el orden indicado en la instrucción `SELECT`.

   ```
    award            | category    | year
   ------------------+-------------+------
                Wolf | Non-Fiction | 2020
                Wolf | Non-Fiction | 2020
                Wolf | Non-Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
         Richard Roe |     Fiction | 2020
         Richard Roe |     Fiction | 2020
         Richard Roe |     Fiction | 2020
   ```

## Selección de un subconjunto de filas
<a name="getting-started.dml.read.rows"></a>

Al consultar un gran conjunto de datos, es posible que solo desee registros que cumplan determinados criterios. Para ello, puede añadir una cláusula `WHERE` al final de nuestra instrucción `SELECT`.

**Para consultar un subconjunto de filas**

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región. 

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. Para recuperar solo los registros de los premios de un año determinado, ejecute la siguiente consulta.

   ```
   SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Wolf' ;
   ```

   La instrucción `SELECT` anterior devuelve la siguiente salida.

   ```
    year | award | category    | rank | author             | book_title            | publisher
   ------+-------+-------------+------+--------------------+-----------------------+---------------
    2020 |  Wolf | Non-Fiction |    1 |        Wang Xiulan |      History of Ideas |  AnyPublisher
    2020 |  Wolf | Non-Fiction |    2 | Ana Carolina Silva |         Science Today | SomePublisher
    2020 |  Wolf | Non-Fiction |    3 |  Shirley Rodriguez | The Future of Sea Ice |  AnyPublisher
   ```

### Comprensión de la cláusula `WHERE`
<a name="getting-started.dml.where"></a>

La cláusula `WHERE` se utiliza para filtrar los datos y devolver solo los que cumplan los criterios especificados. Los criterios especificados pueden ser una condición simple o una condición compuesta. 

**Uso de condiciones en una cláusula `WHERE`**
+ Una condición simple: una única columna.

  ```
  WHERE column_name=value
  ```

  Puede utilizar una condición simple en una cláusula `WHERE` si se cumple alguna de las siguientes condiciones:
  + La columna es la única columna de la clave de partición de la tabla.
  + Ha añadido `ALLOW FILTERING` después de la condición en la cláusula `WHERE`.

    Tenga en cuenta que el uso de `ALLOW FILTERING` puede dar lugar a un rendimiento incoherente, sobre todo con tablas de gran tamaño y con varias particiones.
+ Una condición compuesta: múltiples condiciones simples conectadas por `AND`.

  ```
  WHERE column_name1=value1 AND column_name2=value2 AND column_name3=value3...
  ```

  Puede utilizar condiciones compuestas en una cláusula `WHERE` si se cumple alguna de las siguientes condiciones:
  + Las columnas que puede usar en la cláusula `WHERE` deben incluir todas o un subconjunto de las columnas de la clave de partición de la tabla. Si desea utilizar solo un subconjunto de las columnas de la cláusula `WHERE`, debe incluir un conjunto contiguo de columnas de clave de partición de izquierda a derecha, empezando por la primera columna de la clave de partición. Por ejemplo, si las columnas de la clave de partición son `year`, `month` y `award`, puede usar las siguientes columnas en la cláusula `WHERE`: 
    + `year`
    + `year` Y `month`
    + `year` Y `month` Y `award`
  + Añada `ALLOW FILTERING` después de la condición compuesta en la cláusula `WHERE`, como en el siguiente ejemplo.

    ```
    SELECT * FROM my_table WHERE col1=5 AND col2='Bob' ALLOW FILTERING ;
    ```

    Tenga en cuenta que el uso de `ALLOW FILTERING` puede dar lugar a un rendimiento incoherente, sobre todo con tablas de gran tamaño y con varias particiones.

### Pruébelo
<a name="getting-started.dml.try"></a>

Cree sus propias consultas CQL para obtener los siguientes resultados de su tabla `book_awards`:
+ Busque los ganadores de los premios Wolf de 2020 y haga que se muestren los títulos y autores de los libros, ordenados por su puesto en la clasificación.
+ Haga que se muestren los ganadores del primer puesto de todos los premios de 2020 y que aparezcan los títulos de los libros y los nombres de los premios.

# Actualización de datos en una tabla de Amazon Keyspaces con CQL
<a name="getting-started.dml.update"></a>

Para actualizar los datos de su tabla `book_awards`, utilice la instrucción `UPDATE`.

La forma general de la instrucción `UPDATE` es la siguiente.

```
UPDATE table_name SET column_name=new_value WHERE primary_key=value ;
```

**sugerencia**  
Puede actualizar múltiples columnas utilizando una lista separada por comas de `column_names` y valores, como en el siguiente ejemplo.  

  ```
  UPDATE my_table SET col1='new_value_1', col2='new_value2' WHERE col3='1' ;
  ```
Si la clave principal se compone de múltiples columnas, todas las columnas de la clave principal y sus valores deben incluirse en la cláusula `WHERE`.
No puede actualizar ninguna columna de la clave principal porque eso cambiaría la clave principal del registro.

**Para actualizar una única celda**  
Con la tabla `book_awards`, cambie el nombre de una editorial del ganador de los premios Wolf de no ficción en 2020.

```
UPDATE book_awards SET publisher='new Books' WHERE year = 2020 AND award='Wolf' AND category='Non-Fiction' AND rank=1;
```

Compruebe que la editorial sea ahora `new Books`.

```
SELECT * FROM book_awards WHERE year = 2020 AND award='Wolf' AND category='Non-Fiction' AND rank=1;
```

La instrucción debería devolver la siguiente salida.

```
 year | award | category    | rank | author      | book_title       | publisher
------+-------+-------------+------+-------------+------------------+-----------
 2020 |  Wolf | Non-Fiction |    1 | Wang Xiulan | History of Ideas | new Books
```

## Pruébelo
<a name="getting-started.dml.update.try"></a>

**Avanzado:** el ganador del “Premio Kwezi Manu” de ficción de 2020 ha cambiado de nombre. Actualice este registro para cambiar el nombre a `'Akua Mansa-House'`. 

# Eliminación de los datos de una tabla mediante la sentencia CQL `DELETE`
<a name="getting-started.dml.delete"></a>

Para eliminar datos en su tabla `book_awards`, utilice la instrucción `DELETE`.

Puede eliminar datos de una fila o de una partición. Tenga cuidado al eliminar datos, dado que la eliminación es irreversible.

Al eliminar una o todas las filas de una tabla, no elimina la tabla. Por tanto, puede volver a llenarla con datos. Al eliminar una tabla, elimina la tabla y todos los datos que contiene. Para volver a utilizar la tabla, debe volver a crearla y añadirle datos. Al eliminar un espacio de claves, elimina el espacio de claves y todas las tablas que contiene. Para volver a utilizar el espacio de claves y las tablas, debe volver a crearlos y rellenarlos con datos. Puede utilizar la recuperación de Amazon Keyspaces Point-in-time (PITR) para restaurar las tablas eliminadas; para obtener más información, consulte. [Backup y restauración de datos con point-in-time recuperación para Amazon Keyspaces](PointInTimeRecovery.md) Para obtener información sobre cómo restaurar una tabla eliminada con la PITR activada, consulte [Restauración de una tabla eliminada con la PITR de Amazon Keyspaces](restoredeleted.md).

## Eliminación de celdas
<a name="getting-started.dml.delete-cell"></a>

Al eliminar una columna de una fila se eliminan los datos de la celda especificada. Al mostrar esa columna mediante una `SELECT` sentencia, los datos se muestran como*null*, aunque no se almacene un valor nulo en esa ubicación.

La sintaxis general para eliminar una o varias columnas en concreto es la siguiente.

```
DELETE column_name1[, column_name2...] FROM table_name WHERE condition ;
```

En la tabla `book_awards`, puede ver que el título del libro que ganó el primer premio “Richard Roe” de 2020 es “Long Summer”. Imagine que se ha retirado del mercado este título y necesita eliminar los datos de esta celda.

**Para eliminar una celda en concreto**

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región. 

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. Ejecute la siguiente consulta `DELETE`.

   ```
   DELETE book_title FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;
   ```

1. Compruebe que la solicitud de eliminación se haya realizado como se esperaba.

   ```
   SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;
   ```

   La salida de esta instrucción tiene el siguiente aspecto.

   ```
    year | award       | category | rank | author            | book_title | publisher
   ------+-------------+----------+------+-------------------+------------+---------------
    2020 | Richard Roe |  Fiction |    1 | Alejandro Rosalez |       null | SomePublisher
   ```

## Eliminación de filas
<a name="getting-started.dml.delete-row"></a>

Podría darse el caso de que necesite eliminar una fila entera, por ejemplo, para cumplir con una solicitud de eliminación de datos. La sintaxis general para eliminar una fila es la siguiente.

```
DELETE FROM table_name WHERE condition ;
```

**Para eliminar una fila**

1. Abre Amazon Keyspaces AWS CloudShell y conéctate a ellos mediante el siguiente comando. Asegúrese de actualizar *us-east-1* con su propia región. 

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. Ejecute la siguiente consulta `DELETE`.

   ```
   DELETE FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;
   ```

1. Compruebe que la eliminación se haya realizado como se esperaba.

   ```
   SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;
   ```

   El resultado de esta instrucción tiene este aspecto después de eliminar la fila.

   ```
    year | award | category | rank | author | book_title | publisher
   ------+-------+----------+------+--------+------------+-----------
   
   (0 rows)
   ```

Puede eliminar automáticamente los datos caducados de la tabla con el periodo de vida de Amazon Keyspaces. Para obtener más información, consulte [Caducidad de datos con período de vida (TTL) para Amazon Keyspaces (para Apache Cassandra)](TTL.md).