CREATE TABLE AS - Amazon Athena

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

CREATE TABLE AS

Crea una nueva tabla rellena con los resultados de una consulta SELECT. Para crear una tabla vacía, utilice CREATE TABLE. CREATE TABLE AS combina una instrucción DDL CREATE TABLE con una instrucción DML SELECT y, por lo tanto, técnicamente contiene tanto DDL como DML. Tenga en cuenta que, aunque CREATE TABLE AS se agrupa aquí con otras instrucciones DDL, las consultas CTAS en Athena se tratan como DML a efectos de Service Quotas. Para obtener información acerca de Service Quotas de Athena, consulte Service Quotas.

nota

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.

Para obtener información adicional sobre CREATE TABLE AS más allá del alcance de este tema de referencia, consulte Creación de una tabla a partir de los resultados de una consulta (CTAS).

Sinopsis

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

Donde:

WITH ( property_name = expression [, ...] )

Una lista de propiedades de tabla CTAS opcionales, algunas de las cuales son específicas del formato de almacenamiento de datos. Consulte Propiedades de la tabla CTAS.

query

Una consulta SELECT que se utiliza para crear una tabla nueva.

importante

Si tiene previsto crear una consulta con particiones, especifique los nombres de columnas particionadas en último lugar en la lista de columnas en la instrucción SELECT.

[ WITH [ NO ] DATA ]

Si se utiliza WITH NO DATA, se crea una nueva tabla vacía con el mismo esquema que la tabla original.

nota

Para incluir encabezados de columna en el resultado de la consulta, puede utilizar una consulta SELECT simple en lugar de una consulta CTAS. Puede recuperar los resultados de la ubicación de los resultados de la consulta o descargar los resultados directamente por medio de la consola de Athena. Para obtener más información, consulte Trabajo con resultados de las consultas, consultas recientes y archivos de salida.

Propiedades de la tabla CTAS

Cada tabla CTAS de Athena tiene una lista de propiedades de tabla CTAS opcionales que se especifican mediante WITH (property_name = expression [, ...] ). Para obtener información sobre cómo usar estos parámetros, consulte Ejemplos de consultas CTAS.

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

Opcional. El valor predeterminado es HIVE. Especifica el tipo de tabla de la tabla resultante.

Ejemplo:

WITH (table_type ='ICEBERG')
external_location = [location]
nota

Como las tablas de Iceberg no son externas, esta propiedad no se aplica a ellas. Para definir la ubicación raíz de una tabla de Iceberg en una instrucción CTAS, use la propiedad location que se describe más adelante en esta sección.

Opcional. La ubicación en la que Athena guarda la consulta CTAS en Amazon S3.

Ejemplo:

WITH (external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/')

Athena no usa la misma ruta para los resultados de la consulta dos veces. Si especifica la ubicación de forma manual, asegúrese de que la ubicación de Amazon S3 que especifica no tenga datos. Athena nunca intenta eliminar los datos. Si desea utilizar la misma ubicación de nuevo, borre manualmente los datos; de lo contrario, su consulta CTAS producirá un error.

Si ejecuta una consulta CTAS que especifica un external_location en un grupo de trabajo que aplica una ubicación de resultados de consulta, la consulta devuelve un mensaje de error. 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 anula la configuración del lado cliente para la ubicación de los resultados de la consulta, Athena crea la tabla en la siguiente ubicación:

s3://workgroup-query-results-location/tables/query-id/

Si no utiliza la propiedad external_location para especificar una ubicación y el grupo de trabajo no anula la configuración del lado del cliente, Athena utiliza la configuración del lado del cliente para la ubicación de resultados de consulta para crear la tabla en la siguiente ubicación:

s3://query-results-location-setting/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

Opcional. Indica si la tabla es externa. El valor predeterminado es true. Para las tablas de Iceberg, se debe establecer en false.

Ejemplo:

WITH (is_external = false)
location = [location]

Obligatoria para las tablas de Iceberg. Especifica la ubicación raíz de la tabla de Iceberg que se va a crear a partir de los resultados de la consulta.

Ejemplo:

WITH (location ='s3://DOC-EXAMPLE-BUCKET/tables/iceberg_table/')
field_delimiter = [delimiter]

Opcional y específico de los formatos de almacenamiento de datos basados en texto. El delimitador de campo de un solo carácter para los archivos en CSV, TSV y archivos de texto. Por ejemplo, WITH (field_delimiter = ','). Actualmente, no se admiten delimitadores de campos de caracteres múltiples para las consultas CTAS. Si no especifica un delimitador de campo, se utiliza \001 de forma predeterminada.

format = [storage_format]

El formato de almacenamiento de los resultados de las consultas CTAS, como ORC, PARQUET, AVRO, JSON, ION o TEXTFILE. Los formatos permitidos para las tablas de Iceberg son ORC, PARQUET y AVRO. Si se omite, se utiliza PARQUET de forma predeterminada. El nombre de este parámetro format, debe incluirse en minúsculas o la consulta CTAS producirá un error.

Ejemplo:

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
nota

Esta propiedad no se aplica a las tablas de Iceberg. Para las tablas de Iceberg, use el particionamiento con transformación de buckets.

Una matriz de buckets de datos. Si se omite, Athena no crea un bucket con sus datos en esta consulta.

bucket_count = [int]
nota

Esta propiedad no se aplica a las tablas de Iceberg. Para las tablas de Iceberg, use el particionamiento con transformación de buckets.

El número de buckets de sus datos. Si se omite, Athena no crea un bucket con sus datos. Ejemplo:

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
nota

Esta propiedad no se aplica a las tablas de Iceberg. Para usar las transformaciones de partición en las tablas de Iceberg, use la propiedad partitioning que se describe más adelante en esta sección.

Opcional. Una matriz de columnas por las que se particiona la tabla CTAS. Compruebe que los nombres de las columnas particionadas aparecen en último lugar en la lista de columnas en la instrucción SELECT.

partitioning = ARRAY[partition_transform, ...]

Opcional. Especifica el particionamiento de la tabla de Iceberg que se va a crear. Iceberg admite una amplia variedad de transformaciones y evoluciones de partición. Las transformaciones de partición se resumen en la siguiente tabla.

Transform Descripción
year(ts) Crea una partición para cada año. El valor de la partición es la diferencia de años, expresada con números enteros, entre ts y el 1 de enero de 1970.
month(ts) Crea una partición para cada mes de cada año. El valor de la partición es la diferencia de meses, expresada con números enteros, entre ts y el 1 de enero de 1970.
day(ts) Crea una partición para cada día de cada año. El valor de la partición es la diferencia de días, expresada con números enteros, entre ts y el 1 de enero de 1970.
hour(ts) Crea una partición para cada hora de cada día. El valor de la partición es una marca de tiempo con los minutos y segundos establecidos en cero.
bucket(x, nbuckets) Coloca los datos en el número especificado de buckets. El valor de la partición es un valor de hash entero de x, comprendido entre 0 y nbuckets - 1, ambos inclusive.
truncate(s, nchars) Hace que el valor de la partición sea los nchars primeros caracteres de s.

Ejemplo:

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

Opcional. Configuración específica de optimización de datos. Los archivos más pequeños que el valor especificado se incluyen para la optimización. El valor predeterminado es 0,75 veces el valor de write_target_data_file_size_bytes. Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte Optimización de las tablas de Iceberg.

Ejemplo:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

Opcional. Configuración específica de optimización de datos. Los archivos más grandes que el valor especificado se incluyen para la optimización. El valor predeterminado es 1,8 veces el valor de write_target_data_file_size_bytes. Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte Optimización de las tablas de Iceberg.

Ejemplo:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

Opcional. Configuración específica de optimización de datos. Si los archivos de datos que requieren optimización son menores que el límite determinado, los archivos no se reescriben. Esto permite acumular más archivos de datos para producir archivos más cercanos al tamaño objetivo y omitir cálculos innecesarios para ahorrar costos. El valor predeterminado es 5. Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte Optimización de las tablas de Iceberg.

Ejemplo:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

Opcional. Configuración específica de optimización de datos. Si los archivos de eliminación asociados a un archivo de datos son menores que el límite, el archivo de datos no se reescribe. Esto permite acumular más archivos de eliminación para cada archivo de datos para ahorrar costos. El valor predeterminado es 2. Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte Optimización de las tablas de Iceberg.

Ejemplo:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

Opcional. Configuración específica de Vacuum. El número mínimo de instantáneas más recientes que se deben retener. El valor predeterminado es 1. Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte VACUUM.

nota

La propiedad vacuum_min_snapshots_to_keep requiere la versión 3 del motor Athena.

Ejemplo:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

Opcional. Configuración específica de Vacuum. Un periodo en segundos que representa la antigüedad de las instantáneas que se van a retener. El valor predeterminado es 432 000 (5 días). Esta propiedad se aplica solo a las tablas de Iceberg. Para obtener más información, consulte VACUUM.

nota

La propiedad vacuum_max_snapshot_age_seconds requiere la versión 3 del motor Athena.

Ejemplo:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

Tipo de compresión que se va a utilizar para cualquier formato de almacenamiento que permita especificar la compresión. El valor compression_format especifica la compresión que se utilizará cuando los datos se escriben en la tabla. Puede especificar la compresión para los formatos de archivo TEXTFILE, JSON, PARQUET y ORC.

Por ejemplo, si la propiedad format especifica PARQUET como formato de almacenamiento, el valor de write_compression especifica el formato de compresión para Parquet. En este caso, especificar un valor para write_compression equivale a especificar un valor para parquet_compression.

De igual modo, si la propiedad format especifica ORC como formato de almacenamiento, el valor de write_compression especifica el formato de compresión para ORC. En este caso, especificar un valor para write_compression equivale a especificar un valor para orc_compression.

No se pueden especificar varias propiedades de tabla de formato de compresión en la misma consulta CTAS. Por ejemplo, no puede especificar write_compression y parquet_compression en la misma consulta. Lo mismo se aplica para write_compression y orc_compression. Para obtener información sobre los tipos de compresión admitidos para cada formato de archivo, consulte Compatibilidad con la compresión de Athena.

orc_compression = [compression_format]

Tipo de compresión que se utiliza para el formato de archivo ORC cuando se escriben los datos de ORC en la tabla. Por ejemplo, WITH (orc_compression = 'ZLIB'). Los fragmentos del archivo ORC (excepto el ORC Postscript) se comprimen con la compresión que especifique. Si se omite, se utiliza la compresión ZLIB de forma predeterminada para ORC.

nota

Por motivos de coherencia, le recomendamos que utilice la propiedad write_compression en lugar de orc_compression. Utilice la propiedad format para especificar el formato de almacenamiento como ORC y, a continuación, utilice la propiedad write_compression para especificar el formato de compresión que utilizará ORC.

parquet_compression = [compression_format]

Tipo de compresión que se utiliza para el formato de archivo Parquet cuando se escriben los datos de Parquet en la tabla. Por ejemplo, WITH (parquet_compression = 'SNAPPY'). Esta compresión se aplica a los fragmentos de columna de los archivos Parquet. Si se omite, se utiliza la compresión GZIP de forma predeterminada para Parquet.

nota

Por motivos de coherencia, le recomendamos que utilice la propiedad write_compression en lugar de parquet_compression. Utilice la propiedad format para especificar el formato de almacenamiento como PARQUET y, a continuación, utilice la propiedad write_compression para especificar el formato de compresión que utilizará PARQUET.

compression_level = [compression_level]

Nivel de compresión que se debe utilizar. Esta propiedad solo se aplica a la compresión ZSTD. Los valores posibles están comprendidos entre 1 y 22. El valor predeterminado es 3. Para obtener más información, consulte Uso de los niveles de compresión ZSTD en Athena.

Ejemplos

Para obtener ejemplos de consultas CTAS, consulte los siguientes recursos.