

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Crie, leia, atualize e exclua dados (CRUD) usando CQL no Amazon Keyspaces
<a name="getting-started.dml"></a>

Nesta etapa do tutorial, você aprenderá a inserir, ler, atualizar e excluir dados em uma tabela do Amazon Keyspaces usando instruções da linguagem de manipulação de dados (DML) CQL. No Amazon Keyspaces, você só pode criar declarações DML na linguagem CQL. Neste tutorial, você praticará a execução de instruções DML usando `cqlsh-expansion` com [AWS CloudShell](using-aws-with-cloudshell.md) em Console de gerenciamento da AWS.
+ **Inserção de dados**: esta seção aborda a inserção de registros únicos e múltiplos em uma tabela usando a instrução de `INSERT`. Você aprenderá a fazer upload de dados de um arquivo CSV e verificar inserções bem-sucedidas usando consultas de `SELECT`. 
+ **Leitura de dados**: aqui, você explorará diferentes variações da instrução de `SELECT` para recuperar dados de uma tabela. Os tópicos incluem selecionar todos os dados, selecionar colunas específicas, filtrar linhas com base nas condições usando a cláusula de `WHERE` e entender condições simples e compostas. 
+ **Atualização de dados**: nesta seção, você aprenderá a modificar os dados existentes em uma tabela usando a instrução de `UPDATE`. Você praticará a atualização de uma e várias colunas e, ao mesmo tempo, entenderá as restrições relacionadas à atualização de colunas de chave primária. 
+ **Exclusão de dados**: a seção final aborda a exclusão de dados de uma tabela usando a instrução de `DELETE`. Você aprenderá como excluir células específicas, linhas inteiras e as implicações da exclusão de dados versus a exclusão de toda a tabela ou do espaço chave. 

Ao longo do tutorial, você encontrará exemplos, dicas e oportunidades para praticar a criação de suas próprias consultas CQL para vários cenários.

**Topics**
+ [Inserção e carregamento de dados em uma tabela do Amazon Keyspaces](getting-started.dml.create.md)
+ [Leia dados de uma tabela usando a instrução `SELECT` em CQL no Amazon Keyspaces](getting-started.dml.read.md)
+ [Atualize dados em uma tabela do Amazon Keyspaces usando CQL](getting-started.dml.update.md)
+ [Excluir dados de uma tabela usando a instrução `DELETE` em CQL](getting-started.dml.delete.md)

# Inserção e carregamento de dados em uma tabela do Amazon Keyspaces
<a name="getting-started.dml.create"></a>

Para criar dados em sua tabela `book_awards`, use a instrução `INSERT` para adicionar uma única linha. 

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região.

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

   A saída do comando deve ser algo parecido com isso.

   ```
   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. Antes de poder gravar dados em sua tabela do Amazon Keyspaces usando cqlsh, você deve definir a consistência de gravação da sessão atual de cqlsh como `LOCAL_QUORUM`. Para obter mais informações sobre os níveis de consistência compatíveis, consulte [Níveis de consistência de gravação](consistency.md#WriteConsistency). Observe que essa etapa não é necessária se você estiver usando o editor CQL no Console de gerenciamento da AWS.

   ```
   CONSISTENCY LOCAL_QUORUM;
   ```

1. Para inserir um único registro, execute o comando a seguir no 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 se os dados foram adicionados corretamente à tabela executando o comando a seguir.

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

   A saída da instrução deve ter a aparência a seguir.

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

**Para inserir vários registros de um arquivo usando cqlsh**

1. Baixe o arquivo CSV de amostra (`keyspaces_sample_table.csv`) contido no arquivo [samplemigration.zip](samples/samplemigration.zip). Descompacte o arquivo e anote o caminho até `keyspaces_sample_table.csv`.  
![\[Captura de tela de um arquivo CSV mostrando a saída da tabela após a importação do arquivo csv.\]](http://docs.aws.amazon.com/pt_br/keyspaces/latest/devguide/images/keyspaces-awards.png)

1. Abra AWS CloudShell Console de gerenciamento da AWS e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região.

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

1. No prompt de `cqlsh` (`cqlsh>`), especifique um espaço de chave.

   ```
   USE catalog ;
   ```

1. Defina a consistência de gravação como `LOCAL_QUORUM`. Para obter mais informações sobre os níveis de consistência compatíveis, consulte [Níveis de consistência de gravação](consistency.md#WriteConsistency).

   ```
   CONSISTENCY LOCAL_QUORUM;
   ```

1. Em **Ações**, no canto superior direito da tela, escolha **Carregar arquivo** para carregar o arquivo csv baixado anteriormente. AWS CloudShell Anote o caminho para o arquivo.

1. No prompt do espaço de chave (`cqlsh:catalog>`), execute a instrução a seguir.

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

   A saída da instrução deve ser semelhante 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 se os dados foram adicionados corretamente à tabela executando a consulta a seguir.

   ```
   SELECT * FROM book_awards ;
   ```

   Você verá a saída a seguir.

   ```
    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 saber mais sobre como usar `cqlsh COPY` para fazer upload de dados de arquivos csv para uma tabela do Amazon Keyspaces, consulte. [Tutorial: Como carregar dados no Amazon Keyspaces usando cqlsh](bulk-upload.md)

# Leia dados de uma tabela usando a instrução `SELECT` em CQL no Amazon Keyspaces
<a name="getting-started.dml.read"></a>

Na seção [Inserção e carregamento de dados em uma tabela do Amazon Keyspaces](getting-started.dml.create.md), você usou a instrução `SELECT` para verificar se os dados foram adicionados com sucesso à sua tabela. Nesta seção, você refina o uso de `SELECT` para exibir colunas específicas e somente linhas que atendam a critérios específicos.

A forma geral da instrução `SELECT` é a seguinte.

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

**Topics**
+ [Selecione todos os dados da tabela](#getting-started.dml.read.all)
+ [Selecione um subconjunto de colunas](#getting-started.dml.read.columns)
+ [Selecione um subconjunto de linhas](#getting-started.dml.read.rows)

## Selecione todos os dados da tabela
<a name="getting-started.dml.read.all"></a>

A forma mais simples da instrução `SELECT` retorna todos os dados da tabela.

**Importante**  
 Em um ambiente de produção, normalmente não é uma prática recomendada executar esse comando, que retorna todos os dados da tabela. 

**Para selecionar todos os dados da tabela**

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região. 

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

1. Execute a seguinte consulta .

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

   Usar o caractere curinga (`*`) para o `column_list` selecionar todas as colunas. A saída da instrução deve ser semelhante ao seguinte exemplo.

   ```
    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
   ```

## Selecione um subconjunto de colunas
<a name="getting-started.dml.read.columns"></a>

**Para consultar um subconjunto de colunas**

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região. 

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

1. Para recuperar apenas as colunas `award`, `category` e `year`, execute a seguinte consulta.

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

   A saída contém somente as colunas especificadas na ordem listada na instrução `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
   ```

## Selecione um subconjunto de linhas
<a name="getting-started.dml.read.rows"></a>

Ao consultar um grande conjunto de dados, escolha apenas registros que atendam a determinados critérios. Para fazer isso, você pode acrescentar uma cláusula `WHERE` ao final da instrução `SELECT`.

**Para consultar um subconjunto de linhas**

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região. 

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

1. Para recuperar somente os registros dos prêmios de um determinado ano, execute a consulta a seguir.

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

   A instrução `SELECT` anterior retorna o seguinte resultado.

   ```
    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
   ```

### Entendendo a cláusula `WHERE`
<a name="getting-started.dml.where"></a>

A cláusula `WHERE` é usada para filtrar os dados e retornar somente os dados que atendem aos critérios especificados. Os critérios especificados podem ser uma condição simples ou uma condição composta. 

**Como usar as condições em uma cláusula `WHERE`**
+ Uma condição simples, uma única coluna.

  ```
  WHERE column_name=value
  ```

  Você poderá usar uma condição simples em uma cláusula `WHERE` se uma das seguintes condições for atendida:
  + A coluna é a única coluna de chave de partição da tabela.
  + Você adiciona `ALLOW FILTERING` após a condição na cláusula `WHERE`.

    Esteja ciente de que usar `ALLOW FILTERING` pode resultar em desempenho inconsistente, especialmente em tabelas grandes e multiparticionadas.
+ Uma condição composta, várias condições simples conectadas por `AND`.

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

  É possível usar condições compostas em uma cláusula `WHERE` se uma das condições a seguir for atendida:
  + As colunas que você pode usar na cláusula de `WHERE` precisam incluir todas ou um subconjunto das colunas na chave de partição da tabela. Se quiser usar somente um subconjunto das colunas na cláusula de`WHERE`, você deve incluir um conjunto contíguo de colunas de chave de partição da esquerda para a direita, começando com a coluna principal da chave de partição. Por exemplo, se as colunas da chave de partição forem `year`, `month` e `award`, você poderá usar as seguintes colunas na cláusula de`WHERE`: 
    + `year`
    + `year` E `month`
    + `year` E `month` E `award`
  + Você adiciona `ALLOW FILTERING` após a condição composta na cláusula `WHERE`, como no exemplo a seguir.

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

    Esteja ciente de que usar `ALLOW FILTERING` pode resultar em desempenho inconsistente, especialmente em tabelas grandes e multiparticionadas.

### Experimente
<a name="getting-started.dml.try"></a>

Crie suas próprias consultas em CQL para encontrar o seguinte em sua tabela `book_awards`:
+ Encontre os vencedores dos prêmios Wolf 2020 e exiba os títulos e autores dos livros, ordenados por classificação.
+ Mostre os vencedores do primeiro prêmio de todos os prêmios em 2020 e exiba os títulos dos livros e os nomes dos prêmios.

# Atualize dados em uma tabela do Amazon Keyspaces usando CQL
<a name="getting-started.dml.update"></a>

Para atualizar os dados em sua tabela `book_awards`, use a instrução `UPDATE`.

A forma geral da instrução `UPDATE` é a seguinte.

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

**dica**  
É possível atualizar várias colunas usando uma lista separada por vírgula de `column_names` e valores, como no seguinte exemplo.  

  ```
  UPDATE my_table SET col1='new_value_1', col2='new_value2' WHERE col3='1' ;
  ```
Se a chave primária for composta por várias colunas, todas as colunas da chave primária e seus valores deverão ser incluídos na cláusula `WHERE`.
Você não pode atualizar nenhuma coluna na chave primária porque isso alteraria a chave primária do registro.

**Para atualizar uma única célula**  
Usando sua tabela de `book_awards`, altere o nome de uma editora para vencedora do prêmio Wolf de não ficção em 2020.

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

Verifique se a editora está agora `new Books`.

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

A instrução deve retornar a seguinte saída.

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

## Experimente
<a name="getting-started.dml.update.try"></a>

**Avançado:** O vencedor do “Prêmio Kwezi Manu” de ficção de 2020 mudou de nome. Atualize esse registro para alterar o nome para `'Akua Mansa-House'`. 

# Excluir dados de uma tabela usando a instrução `DELETE` em CQL
<a name="getting-started.dml.delete"></a>

Para excluir dados na tabela `book_awards`, use a instrução `DELETE`.

Você pode excluir dados de uma linha ou de uma partição. Tenha cuidado ao excluir dados, pois as exclusões são irreversíveis.

Excluir uma ou todas as linhas de uma tabela não exclui a tabela. Assim, você pode preenchê-la novamente com dados. A exclusão de uma tabela exclui a tabela e todos os dados nela contidos. Para usar a tabela novamente, você deverá recriá-la e adicionar dados a ela. A exclusão de um espaço de chave exclui o espaço de chave e todas as tabelas dentro dele. Para usar o espaço de chave e as tabelas, você deve recriá-los e, em seguida, preenchê-los com dados. Você pode usar a recuperação do Amazon Keyspaces Point-in-time (PITR) para ajudar a restaurar tabelas excluídas. Para saber mais, consulte. [Faça backup e restaure dados com point-in-time recuperação para Amazon Keyspaces](PointInTimeRecovery.md) Para saber como restaurar uma tabela excluída com o PITR ativado, consulte [Restaurar uma tabela excluída usando a PITR do Amazon Keyspaces](restoredeleted.md).

## Exclua as células
<a name="getting-started.dml.delete-cell"></a>

A exclusão de uma coluna de uma linha remove os dados da célula especificada. Quando você exibe essa coluna usando uma `SELECT` instrução, os dados são exibidos como*null*, embora um valor nulo não esteja armazenado nesse local.

A sintaxe geral para excluir uma ou mais colunas específicas é a seguinte.

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

Na sua tabela de `book_awards`, você pode ver que o título do livro que ganhou o primeiro preço do prêmio “Richard Roe” de 2020 é “Long Summer”. Imagine que esse título tenha sido recuperado e você precise excluir os dados dessa célula.

**Como excluir uma célula específica**

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região. 

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

1. Execute a seguinte consulta `DELETE`.

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

1. Verifique se a solicitação de exclusão foi feita conforme o esperado.

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

   A saída desta instrução tem a aparência a seguir.

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

## Excluir linhas
<a name="getting-started.dml.delete-row"></a>

Pode haver um momento em que você precise excluir uma linha inteira, por exemplo, para atender a uma solicitação de exclusão de dados. A sintaxe geral para excluir uma linha é a seguinte.

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

**Para excluir uma linha**

1. Abra AWS CloudShell e conecte-se ao Amazon Keyspaces usando o comando a seguir. Certifique-se de atualizar *us-east-1* com sua própria região. 

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

1. Execute a seguinte consulta `DELETE`.

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

1. Verifique se a exclusão foi feita conforme o esperado.

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

   A saída dessa instrução fica assim depois que a linha foi excluída.

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

Você pode excluir dados expirados automaticamente da sua tabela usando o Amazon Keyspaces Time to Live. Para obter mais informações, consulte [Dados expirados com vida útil (TTL) para Amazon Keyspaces (para Apache Cassandra)](TTL.md).