

# Consideraciones y limitaciones de las consultas CTAS
<a name="ctas-considerations-limitations"></a>

En las siguientes secciones se detallan las consideraciones y limitaciones que se deben tener en cuenta cuando se utilicen consultas `CREATE TABLE AS SELECT` (CTAS) en Athena.

## Información sobre la sintaxis de las consultas de CTAS
<a name="ctas-considerations-limitations-query-syntax"></a>

La sintaxis de las consultas CTAS es diferente de la sintaxis de `CREATE [EXTERNAL] TABLE` utilizada para la creación de tablas. Consulte [CREATE TABLE AS](create-table-as.md).

## La diferencia entre las vistas y las consultas de CTAS
<a name="ctas-considerations-limitations-queries-vs-views"></a>

Las consultas de CTAS escriben nuevos datos en una ubicación especificada en Amazon S3. Las vistas no escriben ningún dato. 

## Especificación de una ubicación para los resultados de las consultas de CTAS
<a name="ctas-considerations-limitations-location-of-query-results"></a>

Si el grupo de trabajo [anula la configuración del lado del cliente](workgroups-settings-override.md) para la ubicación de resultados de consulta, Athena crea la tabla en la ubicación `s3://amzn-s3-demo-bucket/tables/<query-id>/`. Para ver la ubicación de los resultados de la consulta especificada para el grupo de trabajo, [consulte los detalles del grupo de trabajo](viewing-details-workgroups.md).

Si el grupo de trabajo no reemplaza la ubicación de los resultados de la consulta, puede utilizar la sintaxis `WITH (external_location ='s3://amzn-s3-demo-bucket/')` de la consulta CTAS para especificar dónde se almacenan los resultados de la consulta CTAS. 

**nota**  
La propiedad `external_location` debe especificar una ubicación vacía. Una consulta CTAS comprueba que la ubicación de ruta (prefijo) del bucket esté vacía y nunca sobrescribe los datos si la ubicación ya contiene datos. Para volver a utilizar la misma ubicación, elimine los datos de la ubicación del prefijo de clave en el bucket.

Si omite la sintaxis `external_location` y no utiliza la configuración del grupo de trabajo, Athena utiliza la [configuración del lado del cliente](query-results-specify-location-console.md) para la ubicación de resultados de la consulta y crea la tabla en la ubicación `s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/`. 

## Ubicación de archivos huérfanos
<a name="ctas-considerations-limitations-locating-orphaned-files"></a>

Si una instrucción `CTAS` o `INSERT INTO` produce un error, es posible que queden archivos de datos huérfanos en la ubicación de datos de destino de consultas fallidas o canceladas. Debido a que en algunos casos Athena no elimina datos del bucket de desino de su consulta, es posible que se puedan incluir esos datos parciales en consultas posteriores. 

Para localizar archivos huérfanos para su inspección o eliminación, puede utilizar el archivo de manifiesto de datos que Athena proporciona para realizar un seguimiento de la lista de archivos que se van a escribir. En algunos casos excepcionales en los que una consulta de Athena falló abruptamente, es posible que el archivo de manifiesto no esté presente. Puede inspeccionar manualmente la ubicación de S3 de destino para encontrar los archivos huérfanos. Para obtener más información, consulte [Identificar los archivos de salida de consultas](querying-finding-output-files.md#querying-identifying-output-files) y [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation). 

Recomendamos encarecidamente utilizar Apache Iceberg para lograr transacciones atómicas de tablas. Para obtener más información, consulte [Consulta de tablas de Apache Iceberg](querying-iceberg.md).

## Recordatorio sobre que las cláusulas ORDER BY se ignoran
<a name="ctas-considerations-limitations-order-by-ignored"></a>

En una consulta CTAS, Athena ignora las cláusulas `ORDER BY` en la parte `SELECT` de la consulta.

Según la especificación SQL (ISO 9075, parte 2), el orden de las filas de una tabla especificada por una expresión de consulta solo está garantizado para la expresión de consulta que contenga inmediatamente la cláusula `ORDER BY`. En cualquier caso, las tablas de SQL están intrínsecamente desordenadas y, si se implementa `ORDER BY` en las cláusulas de subconsulta, la consulta tiene un rendimiento deficiente y no se obtiene un resultado ordenado. Por lo tanto, en las consultas CTAS de Athena, no hay garantía de que el orden especificado en la cláusula `ORDER BY` se conserve cuando se escriban los datos.

## Elección de un formato para almacenar los resultados de la consulta
<a name="ctas-considerations-limitations-formats-for-query-results"></a>

Puede almacenar los resultados de las consultas CTAS en `PARQUET`, `ORC`, `AVRO`, `JSON` y `TEXTFILE`. Los delimitadores de múltiples caracteres no son compatibles con el formato `TEXTFILE` CTAS. Si no especifica un formato de almacenamiento de datos, los resultados de las consultas de CTAS se almacenan en Parquet de manera predeterminada. 

Las consultas CTAS no requieren que se especifique un SerDe para interpretar las trasformaciones de datos. Consulte [Example: Writing query results to a different format](ctas-examples.md#ctas-example-format).

## Consideración de los formatos de compresión
<a name="ctas-considerations-limitations-compression-formats"></a>

`GZIP`La compresión se utiliza para los resultados de las consultas CTAS en los formatos JSON y TEXTFILE. Para Parquet, puede utilizar `GZIP` o `SNAPPY`; el valor predeterminado es `GZIP`. Para Parquet, puede utilizar `LZ4`, `SNAPPY`, `ZLIB` o `ZSTD`; el valor predeterminado es `ZLIB`. Para obtener ejemplos de CTAS que especifican compresión, consulte [Example: Specifying data storage and compression formats](ctas-examples.md#ctas-example-compression). Para obtener más información sobre la compresión en Athena, consulte [Uso de la compresión en Athena](compression-formats.md).

## Partición y agrupación en buckets de los resultados
<a name="ctas-considerations-limitations-partition-and-bucket-limits"></a>

Puede particionar y guardar en buckets los datos de los resultados de una consulta CTAS. Para especificar las propiedades de la tabla de destino, incluya los predicados de particiones y buckets al final de la cláusula `WITH`. Para obtener más información, consulte [Uso de particiones y asignación de buckets](ctas-partitioning-and-bucketing.md) y [Example: Creating bucketed and partitioned tables](ctas-examples.md#ctas-example-bucketed).

Al utilizar CTAS para crear una tabla particionada, Athena tiene un límite de escritura de 100 particiones. Para obtener información sobre cómo evitar la limitación de 100 particiones, consulte [Uso de CTAS e INSERT INTO para evitar el límite de 100 particiones](ctas-insert-into.md).

## Cifrado de los resultados
<a name="ctas-considerations-limitations-encryption"></a>

Puede cifrar los resultados de las consultas CTAS en Amazon S3, del mismo modo que cifra los resultados de otras consultas en Athena. Para obtener más información, consulte [Cifrado de los resultados de las consultas de Athena en Amazon S3](encrypting-query-results-stored-in-s3.md).

## La configuración de propietario del bucket esperada no se aplica a CTAS
<a name="ctas-considerations-limitations-expected-bucket-owner"></a>

Para las instrucciones CTAS, la configuración del propietario del bucket esperado no se aplica a la ubicación de la tabla de destino en Amazon S3. La configuración del propietario esperado del bucket se aplica solo a la ubicación de salida de Amazon S3 especificada para los resultados de las consultas de Athena. Para obtener más información, consulte [Especificación de una ubicación de resultados de consulta mediante la consola de Athena](query-results-specify-location-console.md).

## Los tipos de datos de columna se conservan
<a name="ctas-considerations-limitations-data-types"></a>

Los tipos de datos de columna de una consulta CTAS son los mismos que los que se especifican para la consulta original.