

# Creación de tablas en Athena
<a name="creating-tables"></a>

Para crear tablas, puede ejecutar instrucciones DDL en la consola de Athena. Utilice el [formulario **Crear tabla**](creating-tables-how-to.md#to-create-a-table-using-the-wizard) de Athena o utilice un controlador JDBC u ODBC. Athena utiliza Apache Hive para definir las tablas y crear bases de datos, que son básicamente un espacio de nombres lógico de tablas. Athena admite una variedad de bibliotecas de serializador-deserializador (SerDe) para crear tablas para formatos de datos específicos. Para obtener una lista de las bibliotecas SerDe compatibles, consulte [Elección de un valor de SerDe para los datos](supported-serdes.md).

Al crear una base de datos y una tabla en Athena, solo describe el esquema y la ubicación donde se encuentran los datos de la tabla en Amazon S3 para efectuar la consulta en el momento de la lectura. Athena no modifica los datos en Amazon S3. Por lo tanto, base de datos y tabla tienen un significado ligeramente distinto al habitual en los sistemas de bases de datos relacionales tradicionales, ya que los datos no se almacenan junto con la definición del esquema de la base de datos y la tabla. 

Athena almacena el esquema en el AWS Glue Data Catalog y lo utiliza para leer los datos cuando se consulta la tabla mediante SQL. Este enfoque de *esquema en lectura*, que proyecta un esquema en los datos cuando se ejecuta una consulta, elimina la necesidad de cargar o transformar los datos.

## Consideraciones y limitaciones
<a name="creating-tables-considerations-and-limitations"></a>

A continuación, se indican algunas limitaciones y consideraciones importantes para las tablas de Athena.

### Consideraciones sobre Amazon S3
<a name="s3-considerations"></a>

Al crear una tabla, debe especificar la ubicación de un bucket de Amazon S3 para los datos subyacentes con la cláusula `LOCATION`. Considere lo siguiente:
+ Athena solo puede consultar la versión más reciente de datos en un bucket de Amazon S3 con control de versiones y no puede consultar versiones anteriores de los datos.
+ Debe disponer de los permisos para trabajar con los datos de la ubicación de Amazon S3. Para obtener más información, consulte [Control del acceso a Amazon S3 desde Athena](s3-permissions.md).
+ Athena permite consultar los objetos almacenados con varias clases de almacenamiento en el mismo bucket especificado por la cláusula `LOCATION`. Por ejemplo, puede consultar los datos en objetos que se almacenan en diferentes clases de almacenamiento (Standard y Standard-IA e Intelligent-Tiering) en Amazon S3.
+ Athena admite los [buckets de pago por solicitante](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html). Para obtener información sobre cómo habilitar pagos por solicitante para buckets con datos de origen que desea consultar en Athena, consulte [Creación de un grupo de trabajo](creating-workgroups.md).
+ Puede utilizar Athena para consultar objetos restaurados de las [clases de almacenamiento de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-glacier) de Amazon Glacier Flexible Retrieval (anteriormente Glacier) y Amazon Glacier Deep Archive, pero debe habilitar esta capacidad de manera individual para cada tabla. Si no habilita la característica en una tabla antes de ejecutar una consulta, Athena omite todos los objetos de Amazon Glacier Flexible Retrieval y Amazon Glacier Deep Archive de la tabla durante la ejecución de la consulta. Para obtener más información, consulte [Consulta de objetos de Amazon Glacier restaurados](querying-glacier.md).

  Para obtener información sobre las clases de almacenamiento, consulte [Clases de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html), [Cambio de la clase de almacenamiento de un objeto en Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/ChgStoClsOfObj.html), [Transición a la clase de almacenamiento GLACIER (archivo de objetos)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#before-deciding-to-archive-objects) y [Buckets de pago por solicitante](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) en la *Guía del usuario de Amazon Simple Storage Service*.
+ Si efectúa consultas de los buckets de S3 con un gran número de objetos y los datos no están divididos en particiones, dichas consultas pueden afectar a los límites de tasa de solicitudes Get en Amazon S3 y dar lugar a excepciones de Amazon S3. Para evitar errores, divida los datos. Plantéese también ajustar las tasas de solicitud de Amazon S3. Para obtener más información, consulte [Velocidad de solicitudes y consideraciones sobre el rendimiento](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html).

Para más información sobre cómo especificar una ubicación para sus datos en Amazon S3, consulte [Especificación de la ubicación de una tabla en Amazon S3](tables-location-format.md).

### Otras consideraciones
<a name="creating-tables-other-considerations"></a>
+ **Transformaciones de datos transaccionales no admitidas**: Athena no admite operaciones basadas en transacciones (como las de Hive o Presto) para los datos de una tabla. Encontrará una lista completa de palabras clave no admitidas en [Unsupported DDL](unsupported-ddl.md).
+ **Las operaciones en las tablas cumplen con las propiedades ACID**: al crear, actualizar o eliminar tablas, se garantiza que tales operaciones cumplen con las propiedades ACID. Por ejemplo, si varios usuarios o clientes intentan crear una tabla o modificar una existente al mismo tiempo, solo uno lo conseguirá.
+ **Las tablas son EXTERNAS**: utilice siempre la palabra clave `EXTERNAL`, excepto al crear tablas de [Iceberg](querying-iceberg-creating-tables.md). Si utiliza `CREATE TABLE` sin la palabra clave `EXTERNAL` para tablas que no son Iceberg, Athena emite un error. Al eliminar una tabla en Athena, solo desaparecen los metadatos de la tabla. Los datos permanecen en Amazon S3.
+ **Longitud máxima de la cadena de consulta**: la longitud máxima de la cadena de consulta es de 256 KB.
+ Si utiliza la operación de la API [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) de AWS Glue o la plantilla [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) de CloudFormation para crear una tabla para su uso en Athena sin especificar la propiedad `TableType`, y luego ejecuta una consulta DDL como `SHOW CREATE TABLE` o `MSCK REPAIR TABLE`, puede recibir el mensaje de error FAILED: NullPointerException Name is null (ERROR: el nombre NullPointerException es nulo). 

  Para resolver el error, especifique un valor para el atributo `TableType` [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) como parte de la llamada a la API `CreateTable` de AWS Glue o la [plantilla CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). Entre los valores posibles para `TableType`, se incluyen `EXTERNAL_TABLE` o `VIRTUAL_VIEW`.

  Este requisito se aplica únicamente cuando se crea una tabla mediante la operación de la API `CreateTable` de AWS Glue o la plantilla `AWS::Glue::Table`. Si crea una tabla para Athena mediante una instrucción DDL o un rastreador de AWS Glue, la propiedad `TableType` se define automáticamente. 

**Topics**
+ [Consideraciones y limitaciones](#creating-tables-considerations-and-limitations)
+ [Creación de tablas mediante AWS Glue o la consola de Athena](creating-tables-how-to.md)
+ [Especificación de la ubicación de una tabla en Amazon S3](tables-location-format.md)
+ [Visualización de la información de la tabla después de crearla](creating-tables-showing-table-information.md)

# Creación de tablas mediante AWS Glue o la consola de Athena
<a name="creating-tables-how-to"></a>

Puede crear tablas en Athena mediante AWS Glue, el formulario para agregar tablas, o ejecutando una instrucción DDL en el editor de consultas de Athena.

## Para crear una tabla con el rastreador de AWS Glue
<a name="to-create-a-table-using-the-aws-glue-data-catalog"></a>

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el editor de consultas, junto a **Tablas y vistas**, elija **Crear** y, a continuación, **Rastreador de AWS Glue**. 

1. Siga los pasos de la página **Add crawler** (Agregar rastreador) de la consola de AWS Glue para agregar un rastreador. 

   Para obtener más información, consulte [Utilice un rastreador para agregar una tabla](schema-crawlers.md).

## Para crear una tabla mediante el formulario para crear tablas de Athena
<a name="to-create-a-table-using-the-wizard"></a>

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el editor de consultas, junto a **Tables and views** (Tablas y vistas), elija **Create** (Crear) y, a continuación, **S3 bucket data** (Datos del bucket de S3).

1. En el formulario **Create Table From S3 bucket data** (Crear tabla a partir de datos de buckets de S3), ingrese la información para crear la tabla y, a continuación, elija **Create table** (Crear tabla). Para obtener más información acerca de los campos del formulario, consulte [Utilice un formulario de la consola de Athena para agregar una tabla de AWS Glue](data-sources-glue-manual-table.md).

## Creación de una tabla mediante una instrucción CREATE TABLE en el editor de consultas de Athena
<a name="to-create-a-table-using-hive-ddl"></a>

1. En el menú **Database (Base de datos)**, elija la base de datos para la que desea crear una tabla. Si no especifica una base de datos en la instrucción `CREATE TABLE`, la tabla se crea en la base de datos seleccionada actualmente en el editor de consultas.

1. En el editor de consultas, introduzca una afirmación como se muestra en el siguiente ejemplo y elija **Run (Ejecutar)**.

   ```
   CREATE EXTERNAL TABLE myopencsvtable (
      firstname string,
      lastname string,
      job string,
      country string
   )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
   WITH SERDEPROPERTIES (
      'separatorChar' = ',',
      'quoteChar' = '"',
      'escapeChar' = '\\'
      )
   STORED AS TEXTFILE
   LOCATION 's3://amzn-s3-demo-bucket/mycsv/';
   ```

# Especificación de la ubicación de una tabla en Amazon S3
<a name="tables-location-format"></a>

Al ejecutar una consulta `CREATE TABLE` en Athena, Athena registra la tabla en el catálogo de datos de AWS Glue, que es donde Athena almacena los metadatos.

Para especificar la ruta a los datos en Amazon S3, utilice la propiedad `LOCATION` en la instrucción `CREATE TABLE`, como se muestra en el ejemplo siguiente:

```
CREATE EXTERNAL TABLE `test_table`(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION s3://amzn-s3-demo-bucket/folder/
```
+ Para obtener información sobre la nomenclatura de buckets, consulte [Restricciones y limitaciones de los buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) en la *Guía del usuario de Amazon Simple Storage Service*.
+ Para obtener información sobre el uso de carpetas en Simple Storage Service (Amazon S3), consulte [Uso de carpetas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html) en la *Guía del usuario de Amazon Simple Storage Service*. 

La `LOCATION` en Amazon S3 especifica *todos* los archivos que representan la tabla. 

**importante**  
Athena lee *todos* los datos almacenados en la carpeta de Amazon S3 que especifique. Si tiene datos que *no* desea que Athena lea, no almacene los datos en la misma carpeta de Amazon S3 que los datos que desea que Athena lea.

Cuando especifique `LOCATION` en la instrucción `CREATE TABLE`, utilice las siguientes directrices:
+ Use una barra diagonal final.
+ Puede utilizar una ruta a una carpeta de Amazon S3 o a un alias de punto de acceso de Amazon S3. Para obtener información acerca de los alias de punto de acceso de Amazon S3, consulte [Uso de un alias de estilo bucket para el punto de acceso](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html) en la *Guía del usuario de Amazon S3*.

 **Uso**:

```
s3://amzn-s3-demo-bucket/folder/
```

```
s3://amzn-s3-demo-bucket-metadata-s3alias/folder/
```

No utilice ninguno de los siguientes elementos para especificar la `LOCATION` de los datos.
+ No utilice nombres de archivos, guiones bajos, comodines o patrones de glob para especificar ubicaciones de archivos.
+ No agregue toda la notación HTTP como, por ejemplo, `s3.amazon.com`, a la ruta del bucket de Amazon S3.
+ No utilice carpetas vacías como `//` en la ruta, de la siguiente manera: `S3://amzn-s3-demo-bucket/folder//folder/`. 
+ No utilice rutas como las que se indican a continuación:

  ```
  s3://amzn-s3-demo-bucket
  s3://amzn-s3-demo-bucket/*
  s3://amzn-s3-demo-bucket/mySpecialFile.dat
  s3://amzn-s3-demo-bucket/prefix/filename.csv
  s3://amzn-s3-demo-bucket.s3.amazon.com
  S3://amzn-s3-demo-bucket/prefix//prefix/
  arn:aws:s3:::amzn-s3-demo-bucket/prefix
  s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname>
  https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com
  ```

# Visualización de la información de la tabla después de crearla
<a name="creating-tables-showing-table-information"></a>

Después de crear una tabla en Athena, su nombre se muestra en la lista **Tablas** de la izquierda en la consola de Athena. Para mostrar información acerca de la tabla y administrarla, haga clic en los tres puntos verticales junto al nombre de la tabla en la consola de Athena. 
+ **Preview table** (Previsualizar la tabla): muestra las primeras 10 filas de todas las columnas mediante la ejecución de la instrucción `SELECT * FROM "database_name"."table_name" LIMIT 10` en el editor de consultas de Athena.
+ **Generate table DDL** (Generar tabla DDL): genera una instrucción DDL que puede utilizar para volver a crear la tabla mediante la ejecución de la instrucción de `SHOW CREATE TABLE` *table\$1name* en el editor de consultas de Athena.
+ **Load partitions** (Cargar particiones): ejecuta la instrucción `MSCK REPAIR TABLE table_name` en el editor de consultas de Athena. Esta opción solo está disponible si la tabla tiene particiones. 
+ **Insert into editor** (Insertar en el editor): inserta el nombre de la tabla en la ubicación de edición actual del editor de consultas.
+ **Eliminar tabla**: muestra un cuadro de diálogo de confirmación en el que se le pregunta si desea eliminar la tabla. Si acepta, ejecuta la instrucción `DROP TABLE table_name` en el editor de consultas de Athena.
+ **Propiedades de tabla**: muestra el nombre de la tabla, el nombre de la base de datos, la hora de creación y si la tabla tiene datos cifrados.