

# Operações básicas em tabelas do DynamoDB
<a name="WorkingWithTables.Basics"></a>

De forma semelhante a outros sistemas de banco de dados, o Amazon DynamoDB armazena dados em tabelas. É possível gerenciar suas tabelas usando algumas operações básicas.

**Topics**
+ [Criar uma tabela](#WorkingWithTables.Basics.CreateTable)
+ [Descrever uma tabela](#WorkingWithTables.Basics.DescribeTable)
+ [Atualizar uma tabela](#WorkingWithTables.Basics.UpdateTable)
+ [Excluir uma tabela](#WorkingWithTables.Basics.DeleteTable)
+ [Usar a proteção contra exclusão](#WorkingWithTables.Basics.DeletionProtection)
+ [Nomes de tabela de listagem](#WorkingWithTables.Basics.ListTables)
+ [Descrever cotas de throughput provisionado](#WorkingWithTables.Basics.DescribeLimits)

## Criar uma tabela
<a name="WorkingWithTables.Basics.CreateTable"></a>

Use a operação `CreateTable` para criar uma tabela no Amazon DynamoDB. Para criar a tabela, você deve fornecer as seguintes informações:
+ **O nome da tabela.** O nome deve estar de acordo com as regras de nomenclatura do DynamoDB e deve ser exclusivo na conta e na região atuais da AWS. Por exemplo, você poderia criar uma tabela `People` no Leste dos EUA (Norte da Virgínia) e outra tabela `People` na Europa (Irlanda). No entanto, essas duas tabelas devem ser inteiramente diferente uma da outra. Para obter mais informações, consulte [Tipos de dados compatíveis e regras de nomenclatura no Amazon DynamoDB](HowItWorks.NamingRulesDataTypes.md).
+ **chave primária.** A chave primária pode consistir em um atributo (chave de partição) ou de dois atributos (chave de partição e chave de classificação). Você precisa fornecer os nomes de atributos, os tipos de dados e a função de cada um: `HASH` (para uma chave de partição) e `RANGE` (para uma chave de classificação). Para obter mais informações, consulte [Chave primária](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey).
+ **Configurações de throughput (para tabelas provisionadas).** Se estiver usando o modo provisionado, você deve especificar as configurações de throughput de leitura e gravação inicial da tabela. Você pode modificar essas configurações mais tarde ou habilitar o Auto Scaling do DynamoDB para gerenciar as configurações para você. Para obter mais informações, consulte [Modo de capacidade provisionada do DynamoDB](provisioned-capacity-mode.md) e [Gerenciar a capacidade de throughput automaticamente com o ajuste de escala automático do DynamoDB](AutoScaling.md).

### Exemplo 1: criar uma tabela sob demanda
<a name="create-payperrequest-example"></a>

Para criar a mesma tabela `Music` usando modo sob demanda.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode=PAY_PER_REQUEST
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 0,
            "ReadCapacityUnits": 0
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "BillingModeSummary": {
            "BillingMode": "PAY_PER_REQUEST"
        },
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397468.348
    }
}
```

**Importante**  
 Ao chamar `DescribeTable` em uma tabela sob demanda, as unidades de capacidade de leitura e unidades de capacidade de gravação são definidas como 0. 

### Exemplo 2: criar uma tabela provisionada
<a name="create-provisioned-example"></a>

O exemplo da AWS CLI a seguir mostra como criar uma tabela (`Music`). A chave primária consiste em `Artist` (chave de partição) e `SongTitle` (chave de classificação), cada uma delas tem um tipo de dados de `String`. O throughput máximo da tabela é 10 unidades de capacidade de leitura e 5 unidades de capacidade de gravação.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

O elemento `TableStatus` indica o estado atual da tabela (`CREATING`). Pode demorar um pouco para criar a tabela, dependendo dos valores que você especificar para `ReadCapacityUnits` e `WriteCapacityUnits`. Valores maiores exigem que o DynamoDB aloque mais recursos para a tabela.

### Exemplo 3: criar uma tabela usando a classe de tabela Standard-Infrequent Access do DynamoDB
<a name="create-infrequent-access-example"></a>

Para criar a mesma tabela de `Music` usando a classe de tabela Standard-Infrequent Access (Padrão – Acesso Infrequente) do DynamoDB.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --table-class STANDARD_INFREQUENT_ACCESS
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableClassSummary": {
            "LastUpdateDateTime": 1542397215.37,
            "TableClass": "STANDARD_INFREQUENT_ACCESS"
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

## Descrever uma tabela
<a name="WorkingWithTables.Basics.DescribeTable"></a>

Para visualizar detalhes sobre uma tabela, use a operação `DescribeTable`. Você deve fornecer o nome da tabela. A saída de `DescribeTable` está no mesmo formato de `CreateTable`. Ela inclui o a marca de data e hora em que a tabela foi criada, o esquema de chaves, as configurações de throughput provisionado, o tamanho estimado e os índices secundários que estão presentes.

**Importante**  
 Ao chamar `DescribeTable` em uma tabela sob demanda, as unidades de capacidade de leitura e unidades de capacidade de gravação são definidas como 0. 

**Example**  

```
aws dynamodb describe-table --table-name Music
```

A tabela estará pronta para uso quando `TableStatus` tiver sido alterado de `CREATING` para `ACTIVE`.

**nota**  
Se você emitir uma solicitação `DescribeTable` imediatamente após uma solicitação `CreateTable`, o DynamoDB poderá retornar um erro (`ResourceNotFoundException`). Isso ocorre porque `DescribeTable` usa uma consulta eventualmente consistente e os metadados da sua tabela podem não estar disponíveis nesse momento. Aguarde alguns segundos e, em seguida, tente a solicitação `DescribeTable` novamente.  
Para fins de faturamento, os custos de armazenamento do DynamoDB incluem uma sobrecarga de 100 bytes por item. (Para obter mais informações, acesse a [Preços do DynamoDB](https://aws.amazon.com/dynamodb/pricing/).) Esses 100 bytes extras por item são usados em cálculos da unidade de capacidade ou pela operação `DescribeTable`. 

## Atualizar uma tabela
<a name="WorkingWithTables.Basics.UpdateTable"></a>

A operação `UpdateTable` permite que você execute uma das seguintes ações:
+ Modificar as configurações de throughput provisionad de uma tabela (para tabelas de modo provisionadas).
+ Alterar o modo de capacidade de leitura/gravação de tabela.
+ Manipular índices secundários globais na tabela (consulte [Como usar índices secundários globais no DynamoDB](GSI.md)).
+ Habilite ou desabilite o DynamoDB Streams na tabela (consulte [Capturar dados de alterações para o DynamoDB Streams](Streams.md)).

**Example**  
O exemplo de AWS CLI a seguir mostra como modificar as configurações de throughput provisionado de uma tabela.  

```
aws dynamodb update-table --table-name Music \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
```

**nota**  
Quando você emite uma solicitação `UpdateTable`, o status da tabela muda de `AVAILABLE` para `UPDATING`. A tabela permanecerá totalmente disponível para uso enquanto estiver `UPDATING`. Quando esse processo for concluído, o status da tabela mudará de `UPDATING` para `AVAILABLE`.

**Example**  
O exemplo de AWS CLI a seguir mostra como modificar o modo de capacidade de leitura/gravação de uma tabela para o modo sob demanda.  

```
aws dynamodb update-table --table-name Music \
    --billing-mode PAY_PER_REQUEST
```

## Excluir uma tabela
<a name="WorkingWithTables.Basics.DeleteTable"></a>

Você pode remover uma tabela não utilizada com a operação `DeleteTable`. Excluir uma tabela é uma operação irrecuperável. Para excluir uma tabela usando o Console de gerenciamento da AWS, consulte [Etapa 6: (Opcional) exclua uma tabela do DynamoDB para limpar os recursos](getting-started-step-6.md).

**Example**  
O exemplo de AWS CLI a seguir mostra como excluir uma tabela.  

```
aws dynamodb delete-table --table-name Music
```

Quando você emite uma solicitação `DeleteTable`, o status da tabela muda de `ACTIVE` para `DELETING`. A exclusão da tabela pode demorar um pouco, dependendo dos recursos que ela usa (como os dados armazenados e os streams ou índices da tabela).

Quando a operação `DeleteTable` é concluída, a tabela deixa de existir no DynamoDB.

## Usar a proteção contra exclusão
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

É possível proteger uma tabela contra exclusão acidental com a propriedade de proteção contra exclusão. Habilitar essa propriedade para tabelas ajuda a garantir que elas não sejam excluídas acidentalmente durante as operações regulares de gerenciamento de tabelas pelos administradores. Isso ajudará a evitar interrupções nas operações empresariais normais.

 O proprietário da tabela ou um administrador autorizado controla a propriedade de proteção contra exclusão de cada tabela. A propriedade de proteção contra exclusão de cada tabela está desativada por padrão. Isso inclui réplicas globais e tabelas restauradas com base em backups. Quando a proteção contra exclusão está desabilitada para uma tabela, ela pode ser excluída por qualquer usuário autorizado por uma política do Identity and Access Management (IAM). Quando a proteção contra exclusão está habilitada para uma tabela, ninguém pode excluí-la. 

Para alterar essa configuração, acesse **Configurações adicionais** da tabela, navegue até o painel **Proteção contra exclusão** e selecione **Ativar Proteção contra exclusão**. 

A propriedade de proteção contra exclusão é compatível com o console do DynamoDB, API, CLI/SDK e CloudFormation. A API `CreateTable` é compatível com a propriedade de proteção contra exclusão no momento da criação da tabela, e a API `UpdateTable` é compatível com a alteração da propriedade de proteção contra exclusão para tabelas existentes.

**nota**  
Se uma conta da AWS for excluída, todos os dados dessa conta, incluindo as tabelas, também serão excluídos em 90 dias.
Se o DynamoDB perder o acesso a uma chave gerenciada pelo cliente que foi usada para criptografar uma tabela, ela ainda será arquivada. O arquivamento requer um backup da tabela e a exclusão da original.

## Nomes de tabela de listagem
<a name="WorkingWithTables.Basics.ListTables"></a>

A operação `ListTables` retorna os nomes das tabelas do DynamoDB da conta e da região atuais da AWS.

**Example**  
O exemplo da AWS CLI a seguir mostra como listar os nomes de tabelas do DynamoDB.  

```
aws dynamodb list-tables
```

## Descrever cotas de throughput provisionado
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

A operação `DescribeLimits` retorna as cotas de capacidade de leitura e gravação atuais da conta e da região atuais da AWS.

**Example**  
O exemplo de AWS CLI a seguir mostra como descrever as cotas atuais de throughput provisionado.  

```
aws dynamodb describe-limits
```
A saída mostra as cotas superiores das unidades de capacidade de leitura e gravação da conta e da região atuais da AWS.

Para obter mais informações sobre essas cotas e como solicitar aumentos de cota, consulte [Cotas padrão de throughput](ServiceQuotas.md#default-limits-throughput).