

# Creación de una tabla de Amazon S3
<a name="s3-tables-create"></a>

Una tabla de Amazon S3 es un tipo de recurso secundario de un bucket de tablas. Las tablas se almacenan en el formato Apache Iceberg, lo que le permite trabajar con ellas utilizando motores de consulta y otras aplicaciones compatibles con Apache Iceberg. Amazon S3 optimiza continuamente las tablas para ayudar a reducir los costos de almacenamiento y mejorar el rendimiento de las consultas de análisis.

Cuando crea una tabla, Amazon S3 genera automáticamente una *ubicación de almacén* para dicha tabla. Una ubicación de almacén es una ubicación de S3 única donde puede leer y escribir objetos asociados a la tabla. En el siguiente ejemplo se muestra el formato de una ubicación de almacén:

```
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
```

Las tablas tienen el siguiente formato de nombre de recurso de Amazon (ARN):

```
arn:aws:s3tables:{{region}}:{{owner-account-id}}:bucket/{{bucket-name}}/table/{{table-id}}
```

De forma predeterminada, puede crear hasta 10 000 tablas en un bucket de tablas. Para solicitar un aumento de cuota para los buckets de tablas o las tablas, póngase en contacto con [Soporte](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase).

Puede crear una tabla mediante la consola de Amazon S3, la API de REST de Amazon S3, los SDK de AWS, AWS Command Line Interface (AWS CLI) o los motores de consulta conectados a los buckets de la tabla.

Al crear una tabla, puede especificar la configuración de cifrado para esa tabla, a menos que vaya a crear la tabla con Athena. Si no especifica la configuración de cifrado, la tabla se cifra con la configuración predeterminada para el bucket de la tabla. Para obtener más información, consulte [Especificación del cifrado para tablas](s3-tables-kms-specify.md#specify-kms-table).

**Requisitos previos para la creación de tablas**

Para crear una tabla, primero debe hacer lo siguiente: 
+ [Creación de un bucket de tablas](s3-tables-buckets-create.md).
+ [Creación de un espacio de nombres de ](s3-tables-namespace-create.md) en el bucket de tablas.
+ Asegúrese de que dispone de permisos de AWS Identity and Access Management (IAM) para `s3tables:CreateTable` y `s3tables:PutTableData`.
+ 
**nota**  
Si utiliza el cifrado SSE-KMS para la tabla, necesitará permisos para `s3tables:PutTableEncryption`, y permiso `DescribeKey` en la clave de AWS KMS elegida. Además, la clave de AWS KMS que utilice debe conceder permiso a tablas de S3 para realizar el mantenimiento automático de la tabla. Para obtener más información, consulte [Requisitos de permiso para el cifrado SSE-KMS de tablas de S3](s3-tables-kms-permissions.md)

Para obtener más información acerca de los nombres de tabla válidos, consulte [Reglas de nomenclatura para tablas y espacios de nombres](s3-tables-buckets-naming.md#naming-rules-table).

**importante**  
Cuando cree tablas, asegúrese de utilizar todas las letras minúsculas en los nombres y las definiciones de las tablas. Por ejemplo, asegúrese de que los nombres de columna estén todos en minúsculas. Si el nombre o la definición de la tabla contiene letras mayúsculas, significa que la tabla no es compatible con AWS Lake Formation ni AWS Glue Data Catalog. En este caso, la tabla no será visible para servicios de análisis de AWS como Amazon Athena, aunque los buckets de tablas estén integrados con servicios de análisis de AWS.   
Si la definición de la tabla contiene mayúsculas, recibirá el siguiente mensaje de error al ejecutar una consulta de `SELECT` en Athena: “GENERIC\_INTERNAL\_ERROR: Error al obtener la solicitud de tabla: com.amazonaws.services.glue.model.ValidationException: Recurso de federación no compatible: nombres de tabla o columna no válidos”.

## Uso de la consola de S3 y Amazon Athena
<a name="create-table-console"></a>

El siguiente procedimiento utiliza la consola de Amazon S3 para crear una tabla con Amazon Athena. Si aún no ha creado un espacio de nombres en el bucket de tablas, puede hacerlo como parte de este proceso. Antes de realizar los pasos siguientes, asegúrese de haber integrado los buckets de tablas con los servicios de análisis de AWS de esta región. Para obtener más información, consulte [Integración de tablas de Amazon S3 con servicios de análisis de AWS](s3-tables-integrating-aws.md).

**nota**  
Cuando crea una tabla con Athena, esa tabla hereda la configuración de cifrado predeterminada del bucket de la tabla. Si desea utilizar un tipo de cifrado diferente, deberá crear la tabla con otro método.

**Para crear una tabla**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de tablas**.

1. En la página **Buckets de tablas**, elija el bucket en el que desea crear una tabla.

1. En la página de detalles del bucket, seleccione **Crear tabla con Athena**. 

1. En el cuadro de diálogo **Crear tabla con Athena**, realice una de las siguientes acciones:
   + Cree un nuevo espacio de nombres. Seleccione **Crear un espacio de nombres** y, a continuación, introduzca un nombre en el campo **Nombre del espacio de nombres**. Los nombres de los espacios de nombres deben tener entre 1 y 255 caracteres y ser únicos dentro del bucket de tablas. Los caracteres válidos son a-z, 0-9 y guion bajo (`_`). No se permite el uso de guiones bajos al principio de los nombres de espacios de nombres. 
   + Elija **Crear espacio de nombres**.
   + Especifique un espacio de nombres existente. Elija **Especificar un espacio de nombres existente dentro de este bucket de tablas**. A continuación, elija **Elegir entre los espacios de nombres existentes** o **Introducir un nombre de espacio de nombres existente**. Si tiene más de 1000 espacios de nombres en el bucket, debe introducir el nombre del espacio de nombres si este no aparece en la lista. 

1. Elija **Crear tabla con Athena**.

1. Se abre la consola de Amazon Athena y aparece el editor de consultas de Athena. El campo **Catálogo** debe rellenarse con **s3tablescatalog/** seguido del nombre del bucket de tablas; por ejemplo, **s3tablescatalog/{{amzn-s3-demo-bucket}}**. El campo **Base de datos** debe rellenarse con el espacio de nombres que se creó o seleccionó anteriormente. 
**nota**  
Si no ve estos valores en los campos **Catálogo** y **Base de datos**, asegúrese de haber integrado los buckets de tablas con los servicios de análisis de AWS en esta región. Para obtener más información, consulte [Integración de tablas de Amazon S3 con servicios de análisis de AWS](s3-tables-integrating-aws.md). 

1. El editor de consultas se rellena con una consulta de ejemplo que puede usar para crear una tabla. Modifique la consulta para especificar el nombre de la tabla y las columnas que desea que esta contenga. 

1. Cuando haya terminado de modificar la consulta, elija **Ejecutar** para crear la tabla. 
**nota**  
Si recibe el error “Insufficient permissions to execute the query. Principal does not have any privilege on specified resource” cuando intenta ejecutar una consulta en Athena, se le deberán conceder los permisos necesarios de Lake Formation para la tabla. Para obtener más información, consulte [Concesión del permiso de Lake Formation sobre una tabla o base de datos](grant-permissions-tables.md#grant-lf-table). 
Si recibe el error “Iceberg cannot access the requested resource” al intentar ejecutar una consulta en Athena, vaya a la consola de AWS Lake Formation y asegúrese de haberse concedido permisos para el espacio de nombres de base de datos y catálogo de buckets de tablas que creó. No especifique una tabla al conceder estos permisos. Para obtener más información, consulte [Concesión del permiso de Lake Formation sobre una tabla o base de datos](grant-permissions-tables.md#grant-lf-table). 
Si recibe el siguiente mensaje de error al ejecutar una consulta `SELECT` en Athena, este mensaje se debe a que hay mayúsculas en el nombre de la tabla o en los nombres de las columnas en la definición de la tabla: “GENERIC\_INTERNAL\_ERROR: Error al obtener la solicitud de tabla: com.amazonaws.services.glue.model.ValidationException: recurso de federación no compatible; nombres de tabla o columna no válidos”. Asegúrese de que los nombres de tabla y columna están todos en minúsculas. 

Si la tabla se ha creado correctamente, el nombre de la nueva tabla aparecerá en la lista de tablas en Athena. Cuando vuelva a la consola de Amazon S3, la nueva tabla aparecerá en la lista **Tablas** de la página de detalles del bucket de tablas tras actualizar la lista. 

## Uso de AWS CLI
<a name="create-table-CLI"></a>

En este ejemplo se muestra cómo crear una tabla con un esquema mediante la AWS CLI y la especificación de los metadatos de tabla con JSON. Para utilizar este ejemplo, sustituya `{{user input placeholders}}` por su propia información.

```
aws s3tables create-table --cli-input-json file://{{mytabledefinition.json}}
```

Para el archivo `mytabledefinition.json`, utilice la siguiente definición de tabla de ejemplo. Para utilizar este ejemplo, sustituya `{{user input placeholders}}` por su propia información. 

```
{
    "tableBucketARN": "arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}}",
    "namespace": "{{your_namespace}}",
    "name": "{{example_table}}",
    "format": "ICEBERG",
    "metadata": {
        "iceberg": {
            "schema": {
                "fields": [
                     {"name": "{{id}}", "type": "{{int}}",{{"required": true}}},
                     {"name": "{{name}}", "type": "{{string}}"},
                     {"name": "{{value}}", "type": "{{int}}"}
                ]
            }
        }
    }
}
```

## Uso de un motor de consultas
<a name="create-table-engine"></a>

Puede crear una tabla en un motor de consulta compatible conectado a los buckets de tablas como, por ejemplo, en una sesión de Apache Spark en Amazon EMR.

En el ejemplo siguiente se muestra cómo crear una tabla con Spark mediante instrucciones `CREATE`, y cómo agregar datos a la tabla con instrucciones `INSERT` o mediante la lectura de datos de un archivo existente. Para utilizar este ejemplo, sustituya `{{user input placeholders}}` por su propia información.

```
spark.sql( 
" CREATE TABLE IF NOT EXISTS s3tablesbucket.{{example_namespace}}.`{{example_table}}` ( 
    id INT, 
    name STRING, 
    value INT 
) 
USING iceberg "
)
```

Después de crear la tabla, puede cargar datos en ella. Elija entre los siguientes métodos:
+ Añada datos a la tabla mediante la instrucción `INSERT`.

  ```
  spark.sql(
  """
      INSERT INTO s3tablesbucket.{{my_namespace}}.{{my_table}} 
      VALUES 
          (1, 'ABC', 100), 
          (2, 'XYZ', 200)
  """)
  ```
+ Cargue un archivo de datos existente.

  1. Lea los datos en Spark:

     ```
     val data_file_location = "{{Path such as S3 URI to data file}}"
     val data_file = spark.read.parquet({{data_file_location}})
     ```

  1. Escriba los datos en una tabla de Iceberg:

     ```
     data_file.writeTo("s3tablesbucket.{{my_namespace}}.{{my_table}}").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
     ```