UNLOAD
Escribe los resultados de la consulta desde una instrucción SELECT
al formato de datos especificado. Los formatos admitidos para UNLOAD
incluyen Apache Parquet, ORC, Apache Avro y JSON. CSV es el único formato de salida compatible con el comando SELECT
de Athena; no obstante, pero puede usar el comando UNLOAD
, que admite una variedad de formatos de salida, para incluir la consulta SELECT
y reescribir su salida en uno de los formatos compatibles con UNLOAD
.
Si bien puede utilizar la instrucción CREATE TABLE AS
(CTAS) para generar datos en formatos distintos a CSV, esas instrucciones también requieren la creación de una tabla en Athena. La instrucción UNLOAD
es útil cuando se desea generar los resultados de una consulta SELECT
en un formato que no sea CSV, pero no se requiere la tabla asociada. Por ejemplo, una aplicación descendente puede requerir que los resultados de una consulta SELECT
estén en formato JSON, y Parquet u ORC podrían proporcionar una ventaja de rendimiento sobre CSV si tiene la intención de utilizar los resultados de la consulta SELECT
para un análisis adicional.
Consideraciones y limitaciones
Cuando utiliza la instrucción UNLOAD
en Athena, tenga en cuenta los siguientes puntos:
-
Sin orden global de archivos: los resultados de
UNLOAD
se escriben en varios archivos en paralelo. Si la consultaSELECT
en la instrucciónUNLOAD
especifica un orden de clasificación, el contenido de cada archivo está en orden de clasificación, pero los archivos no están ordenados entre sí. -
Datos huérfanos no eliminados: en caso de error, Athena no intenta eliminar datos huérfanos. Este comportamiento es el mismo que en instrucciones CTAS y
INSERT INTO
. -
Particiones máximas: el número máximo de particiones que se pueden utilizar con
UNLOAD
es 100. -
Archivos de manifiesto y metadatos: Athena genera un archivo de metadatos y un archivo de manifiesto de datos para cada consulta
UNLOAD
. El manifiesto realiza un seguimiento de los archivos que escribió la consulta. Ambos archivos se guardan en la ubicación de resultados de consulta de Athena en Amazon S3. Para obtener más información, consulte Identificación de archivos de salida de consultas. -
Cifrado: Los archivos de salida
UNLOAD
se cifran de acuerdo con la configuración de cifrado utilizada para Amazon S3. Para configurar la configuración de cifrado para cifrar el resultadoUNLOAD
, puede utilizar la API EncryptionConfiguration. -
Instrucciones preparadas:
UNLOAD
se puede utilizar con instrucciones preparadas. Para obtener información acerca de las instrucciones preparadas en Athena, consulte Uso de consultas parametrizadas. -
Service quotas:
UNLOAD
utiliza cuotas de consultas DML. Para obtener información sobre las cuotas, consulte Service Quotas. -
Propietario esperado del bucket: la configuración del propietario esperado del bucket no se aplica a la ubicación de Amazon S3 de destino especificada en la consulta
UNLOAD
. 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.
Sintaxis
La instrucción UNLOAD
utiliza la siguiente sintaxis.
UNLOAD (SELECT
col_name
[, ...] FROMold_table
) TO 's3://amzn-s3-demo-bucket/my_folder
/' WITH (property_name
= 'expression
' [, ...] )
Excepto cuando se escribe en particiones, el destino de TO
debe especificar una ubicación en Amazon S3 que no tenga datos. Antes de que la consulta UNLOAD
escriba en la ubicación especificada, verifica que la ubicación del bucket está vacía. Como UNLOAD
no escribe datos en la ubicación especificada si la ubicación ya tiene datos en ella, UNLOAD
no sobrescribe los datos existentes. Para reutilizar una ubicación de bucket como destino para UNLOAD
, elimine los datos de la ubicación del bucket y, a continuación, vuelva a ejecutar la consulta.
Tenga en cuenta que cuando UNLOAD
escribe en particiones, este comportamiento es diferente. Si ejecuta la misma consulta UNLOAD
varias veces con la misma instrucción SELECT
, la misma ubicación TO
y las mismas particiones, cada consulta UNLOAD
descargará los datos en Amazon S3 en la ubicación y las particiones especificadas.
Parámetros
Los valores posibles para property_name
son los siguientes.
- format = '
file_format
' -
Obligatorio. Especifica el formato de archivo de la salida. Los valores posibles para
file_format
sonORC
,PARQUET
,AVRO
,JSON
oTEXTFILE
. - compression = '
compression_format
' -
Opcional. Esta opción es específica de los formatos ORC y Parquet. Para ORC, el valor predeterminado es
zlib
, y para Parquet, el valor predeterminado esgzip
. Para obtener información sobre los formatos de compresión compatibles, consulte Compatibilidad con la compresión de Athena.nota
Esta opción no se aplica al formato
AVRO
. Athena utilizagzip
para los formatosJSON
yTEXTFILE
. - compression_level =
compression_level
-
Opcional. El nivel de compresión que se debe utilizar para la compresión ZSTD. Esta propiedad solo se aplica a la compresión ZSTD. Para obtener más información, consulte Uso de niveles de compresión de ZSTD.
- field_delimiter = '
delimiter
' -
Opcional. Especifica un delimitador de campo de un solo carácter para archivos con formato CSV, TSV y otros formatos de texto. En el ejemplo siguiente se especifica un delimitador de coma.
WITH (field_delimiter = ',')
Actualmente, no se admiten delimitadores de campos de caracteres múltiples. Si no especifica un delimitador de campo, se utiliza el carácter octal
\001
(^A). - partitioned_by = ARRAY[
col_name
[,...] ] -
Opcional. Una matriz de columnas por las que se particiona la salida.
nota
Asegúrese de que en su instrucción
SELECT
, los nombres de las columnas particionadas aparezcan en último lugar en la lista de columnas.
Ejemplos
En el siguiente ejemplo se escribe el resultado de una consulta SELECT
en la ubicación s3://amzn-s3-demo-bucket/unload_test_1/
de Amazon S3 utilizando el formato JSON.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/unload_test_1/' WITH (format = 'JSON')
En el siguiente ejemplo se escribe el resultado de una consulta SELECT
en formato Parquet mediante compresión Snappy.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET',compression = 'SNAPPY')
En el siguiente ejemplo se escriben cuatro columnas en formato de texto, con la salida particionada por la última columna.
UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) TO 's3://amzn-s3-demo-bucket/ partitioned/' WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1'])
En el siguiente ejemplo se descargan los resultados de la consulta en la ubicación especificada mediante el formato de archivo Parquet, compresión ZSTD y el nivel 4 de compresión ZSTD.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
Recursos adicionales de
-
Simplificar las canalizaciones de ETL y ML con la característica UNLOAD de Amazon Athena
en el Blog de macrodatos de AWS.