

# Operaciones básicas en tablas de DynamoDB
<a name="WorkingWithTables.Basics"></a>

Al igual que otros sistemas de base de datos, Amazon DynamoDB almacena datos en tablas. Puede administrar las tablas con una pocas operaciones básicas.

**Topics**
+ [Creación de una tabla](#WorkingWithTables.Basics.CreateTable)
+ [Descripción de una tabla](#WorkingWithTables.Basics.DescribeTable)
+ [Actualización de una tabla](#WorkingWithTables.Basics.UpdateTable)
+ [Eliminación de una tabla](#WorkingWithTables.Basics.DeleteTable)
+ [Uso de la protección contra eliminación](#WorkingWithTables.Basics.DeletionProtection)
+ [Enumeración de nombres de tablas](#WorkingWithTables.Basics.ListTables)
+ [Descripción de las cuotas de rendimiento aprovisionado](#WorkingWithTables.Basics.DescribeLimits)

## Creación de una tabla
<a name="WorkingWithTables.Basics.CreateTable"></a>

Use la operación `CreateTable` para crear una tabla en Amazon DynamoDB. Para crear la tabla, debe proporcionar la siguiente información:
+ **Nombre de la tabla.** El nombre debe cumplir las reglas de nomenclatura de DynamoDB y debe ser único para la región y cuenta de AWS actuales. Por ejemplo, puede crear una tabla `People` en EE. UU. Este (Norte de Virginia) y otra tabla `People` en Europa (Irlanda). Sin embargo, estas dos tablas serían totalmente distintas entre sí. Para obtener más información, consulte [Tipos de datos y reglas de nomenclatura admitidos en Amazon DynamoDB](HowItWorks.NamingRulesDataTypes.md).
+ **Primary key (Clave principal.** La clave principal puede constar de un atributo (clave de partición) o dos (clave de partición y clave de ordenación). Debe proporcionar el nombre, el tipo de datos y el rol de cada atributo: `HASH` (para una clave de partición) y `RANGE` (para una clave de ordenación). Para obtener más información, consulte [Clave principal](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey).
+ **Ajustes de rendimiento (de las tablas aprovisionadas).** Si utiliza el modo aprovisionado, debe especificar los ajustes iniciales de rendimiento de lectura y escritura de la tabla. Puede modificar esta configuración en otro momento o habilitar la función Auto Scaling de DynamoDB para administrarlos automáticamente. Para obtener más información, consulte [Modo de capacidad aprovisionada de DynamoDB](provisioned-capacity-mode.md) y [Administración automática de la capacidad de rendimiento con la función Auto Scaling de DynamoDB](AutoScaling.md).

### Ejemplo 1: creación de una tabla bajo demanda
<a name="create-payperrequest-example"></a>

Para crear la misma tabla `Music` utilizando el modo bajo 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
```

La operación `CreateTable` devuelve metadatos de la tabla, como se muestra a continuación:

```
{
    "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**  
 Al llamar a `DescribeTable` en una tabla bajo demanda, las unidades de capacidad de lectura y de escritura se establecen en 0. 

### Ejemplo 2: creación de una tabla aprovisionada
<a name="create-provisioned-example"></a>

En el ejemplo siguiente de la AWS CLI se muestra cómo crear una tabla (`Music`). La clave principal consta de `Artist` (clave de partición) y `SongTitle` (clave de ordenación), ambas de tipo `String`. El desempeño máximo de esta tabla es de 10 unidades de capacidad de lectura y 5 unidades de capacidad de escritura.

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

La operación `CreateTable` devuelve metadatos de la tabla, como se muestra a continuación:

```
{
    "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
    }
}
```

El componente `TableStatus` indica el estado actual de la tabla (`CREATING`). Puede que la tabla tarde un tiempo en crearse, según los valores especificados para `ReadCapacityUnits` y `WriteCapacityUnits`. Cuanto mayores sean estos valores, más recursos tendrá que asignar DynamoDB a la tabla.

### Ejemplo 3: creación de una tabla mediante la clase de tabla de acceso poco frecuente estándar de DynamoDB
<a name="create-infrequent-access-example"></a>

Para crear lo misma tabla `Music` utilizando la clase de tabla de acceso DynamoDB Estándar - Acceso poco frecuente.

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

La operación `CreateTable` devuelve metadatos de la tabla, como se muestra a continuación:

```
{
    "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
    }
}
```

## Descripción de una tabla
<a name="WorkingWithTables.Basics.DescribeTable"></a>

Para ver información detallada sobre una tabla, utilice la operación `DescribeTable`. Debe proporcionar el nombre de la tabla. El resultado de `DescribeTable` tiene el mismo formato que el de `CreateTable`; Incluye la marca temporal del momento de creación de la tabla, su esquema de claves, su configuración de rendimiento aprovisionado, su tamaño aproximado y los índices secundarios (si los hay).

**importante**  
 Al llamar a `DescribeTable` en una tabla bajo demanda, las unidades de capacidad de lectura y de escritura se establecen en 0. 

**Example**  

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

La tabla está lista para usarla cuando el valor de `TableStatus` cambia de `CREATING` a `ACTIVE`.

**nota**  
Si emite una solicitud `DescribeTable` inmediatamente después de una solicitud `CreateTable`, DynamoDB podría devolver un error (`ResourceNotFoundException`). El motivo es que `DescribeTable` usa una consulta con consistencia final, aunque los metadatos de la tabla podrían no estar disponibles todavía. Espere unos segundos y repita la solicitud `DescribeTable`.  
A efectos de facturación, los costes de almacenamiento de DynamoDB incluyen un importe por elemento de 100 bytes en concepto de gastos generales. (Para obtener más información, consulte los [precios de DynamoDB](https://aws.amazon.com/dynamodb/pricing/)). Este importe adicional de 100 bytes por elemento no se utiliza al calcular las unidades de capacidad ni en la operación `DescribeTable`. 

## Actualización de una tabla
<a name="WorkingWithTables.Basics.UpdateTable"></a>

La operación `UpdateTable` permite realizar una de las acciones siguientes:
+ Modificar los ajustes de rendimiento aprovisionado de una tabla (para las tablas en modo aprovisionado).
+ Cambiar el modo de capacidad de lectura/escritura de la tabla.
+ Manipular los índices secundarios globales de la tabla (consulte [Uso de índices secundarios globales en DynamoDB](GSI.md)).
+ Habilite o desactive los DynamoDB Streams en la tabla (consulte [Captura de datos de cambios para DynamoDB Streams](Streams.md)).

**Example**  
En el siguiente ejemplo de la AWS CLI se muestra cómo modificar los ajustes de desempeño provisionado de una tabla:  

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

**nota**  
Cuando se emite una solicitud `UpdateTable`, el estado de la tabla cambia de `AVAILABLE` a `UPDATING`. La tabla permanece plenamente disponible para su uso mientras se encuentra en el estado `UPDATING`. Cuando este proceso finaliza, el estado de la tabla cambia de `UPDATING` a `AVAILABLE`.

**Example**  
En el siguiente ejemplo de la AWS CLI se muestra cómo modificar el modo de capacidad de lectura/escritura de una tabla al modo bajo demanda:  

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

## Eliminación de una tabla
<a name="WorkingWithTables.Basics.DeleteTable"></a>

Puede eliminar las tablas que no utilice con la operación `DeleteTable`. La eliminación de una tabla es una operación irrecuperable. Para eliminar una tabla con la Consola de administración de AWS, consulte [Paso 6: (opcional) Eliminar la tabla de DynamoDB para limpiar los recursos](getting-started-step-6.md).

**Example**  
En el ejemplo siguiente de AWS CLI, se muestra cómo se elimina una tabla.  

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

Cuando se emite una solicitud `DeleteTable`, el estado de la tabla cambia de `ACTIVE` a `DELETING`. Puede que la tabla tarde un tiempo en eliminarse, según los recursos que utilice; por ejemplo, los datos almacenados en la tabla y las secuencias o índices que contenga.

Cuando la operación `DeleteTable` concluya, la tabla ya no existirá en DynamoDB.

## Uso de la protección contra eliminación
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

Puede proteger una tabla contra la eliminación accidental con la propiedad de protección contra la eliminación. Activar esta propiedad para las tablas contribuye a garantizar que las tablas no se eliminen accidentalmente durante las operaciones habituales de administración de tablas por parte de sus administradores. De este modo evitará que se interrumpan las operaciones de negocio normales.

 El propietario de la tabla o un administrador autorizado controla la propiedad de protección contra la eliminación de cada tabla. La propiedad de protección contra eliminación para cada tabla está desactivada de forma predeterminada. Se incluyen las réplicas globales y las tablas restauradas a partir de copias de seguridad. Cuando la protección contra el borrado está desactivada para una tabla, ésta puede ser eliminada por cualquier usuario autorizado por una política de Identity and Access Management (IAM). Cuando la protección contra la eliminación está activada para una tabla, nadie puede eliminarla. 

Para cambiar esta configuración, vaya a la **configuración adicional** de la tabla, navegue al panel **Protección contra eliminación** y seleccione **Habilitar protección contra eliminaciones**. 

La propiedad de protección contra eliminación se admite en la consola de DynamoDB, API, CLI/SDK y CloudFormation. La API `CreateTable` admite la propiedad de protección contra eliminación en el momento de creación de la tabla y la API `UpdateTable` admite el cambio de la propiedad de protección contra eliminación para las tablas existentes.

**nota**  
Si se elimina una cuenta de AWS, todos los datos de esa cuenta, incluidas las tablas, se eliminan igualmente en un plazo de 90 días.
Si DynamoDB pierde el acceso a una clave administrada por el cliente que se utilizó para cifrar una tabla, seguirá archivando la tabla. Archivar implica hacer una copia de seguridad de la tabla y eliminar el original.

## Enumeración de nombres de tablas
<a name="WorkingWithTables.Basics.ListTables"></a>

La operación `ListTables` devuelve los nombres de las tablas de DynamoDB de la región y cuenta de AWS actuales.

**Example**  
En el siguiente ejemplo de la AWS CLI se muestra cómo enumerar los nombres de las tablas de DynamoDB.  

```
aws dynamodb list-tables
```

## Descripción de las cuotas de rendimiento aprovisionado
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

La operación `DescribeLimits` devuelve las cuotas vigentes de capacidad de lectura y escritura de la región y cuenta de AWS actuales.

**Example**  
En el siguiente ejemplo de la AWS CLI se muestra cómo describir las cuotas de rendimiento aprovisionado actuales.  

```
aws dynamodb describe-limits
```
El resultado muestra las cuotas superiores de unidades de capacidad de lectura y escritura de la región y cuenta de AWS actuales.

Para obtener más información acerca de estas cuotas y cómo solicitar un aumento de cuotas, consulte [Cuotas de rendimiento predeterminadas](ServiceQuotas.md#default-limits-throughput).