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.

Sintaxis de las consultas 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.

Consultas CTAS y vistas

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

Ubicación de los resultados de las consultas 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://<workgroup-query-results-location>/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://location/') 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://<client-query-results-location>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/.

Localizació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.

Cláusulas ORDER BY ignoradas

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.

Formatos para almacenar los resultados de las consultas

Los resultados de las consultas CTAS se almacenan en Parquet de forma predeterminada, si no especifica un formato de almacenamiento de datos. 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. 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.

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 Compatibilidad con la compresión de Athena.

Límites de partición y bucket

Puede particionar y guardar en buckets los datos de los resultados de una consulta CTAS. Para obtener más información, consulte Creación de particiones y asignación de buckets en Athena. Al crear una tabla particionada mediante CTAS, Athena tiene un límite de escritura de 100 particiones.

Incluir predicados de particiones y buckets al final de la cláusula WITH que especifica las propiedades de la tabla de destino. Para obtener más información, consulte Example: Creating bucketed and partitioned tables y Creación de particiones y asignación de buckets en Athena.

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

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.

Propietario del bucket esperado

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.

Tipos de datos

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