Consideraciones y limitaciones de las consultas CTAS - Amazon Athena

Consideraciones y limitaciones de las consultas CTAS

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

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.

La diferencia entre las vistas y las consultas de CTAS

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

Si el grupo de trabajo anula la configuración del lado del cliente 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.

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

Si una instrucción INSERT INTO o CTAS produce un error, es posible que queden datos huérfanos en la ubicación de datos. Debido a que en algunos casos Athena no elimina datos o datos parciales del bucket, es posible que se puedan leer 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. Para obtener más información, consulte Identificación de archivos de salida de consultas y DataManifestLocation.

Recordatorio sobre que las cláusulas ORDER BY se ignoran

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

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.

Consideración de los formatos de compresión

La compresión GZIP 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. Para obtener más información sobre la compresión en Athena, consulte Uso de la compresión en Athena.

Partición y agrupación en buckets de los resultados

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 y Example: Creating bucketed and partitioned tables.

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.

Cifrado de los resultados

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.

La configuración de propietario del bucket esperada no se aplica a CTAS

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.

Los tipos de datos de columna se conservan

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