

# UNLOAD
<a name="unload"></a>

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
<a name="unload-considerations-and-limitations"></a>

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 consulta `SELECT` en la instrucción `UNLOAD` 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](querying-finding-output-files.md#querying-identifying-output-files).
+ **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 resultado `UNLOAD`, puede utilizar la [API EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html).
+ **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](querying-with-prepared-statements.md).
+ **Service quotas**: `UNLOAD` utiliza cuotas de consultas DML. Para obtener información sobre las cuotas, consulte [Service Quotas](service-limits.md).
+ **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](query-results-specify-location-console.md).

## Sintaxis
<a name="unload-syntax"></a>

La instrucción `UNLOAD` utiliza la siguiente sintaxis.

```
UNLOAD (SELECT col_name[, ...] FROM old_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.

### Parameters
<a name="unload-parameters"></a>

Los valores posibles para *property\$1name* son los siguientes.

** format = '*file\$1format*' **  
Obligatorio. Especifica el formato de archivo de la salida. Los valores posibles para *file\$1format* son `ORC`, `PARQUET`, `AVRO`, `JSON` o `TEXTFILE`.

** compression = '*compression\$1format*' **  
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 es `gzip`. Para obtener información sobre los formatos de compresión compatibles, consulte [Compatibilidad con la compresión de Athena](https://docs.aws.amazon.com/athena/latest/ug/compression-formats.html).   
Esta opción no se aplica al formato `AVRO`. Athena utiliza `gzip` para los formatos `JSON` y `TEXTFILE`.

**compression\$1level = *compression\$1level* **  
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](compression-support-zstd-levels.md).

** field\$1delimiter = '*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\$1by = ARRAY[ *col\$1name*[,...] ] **  
Opcional. Una matriz de columnas por las que se particiona la salida.  
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
<a name="unload-examples"></a>

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
<a name="unload-additional-resources"></a>
+ [Simplificar las canalizaciones de ETL y ML con la característica UNLOAD de Amazon Athena](https://aws.amazon.com/blogs/big-data/simplify-your-etl-and-ml-pipelines-using-the-amazon-athena-unload-feature/) en el *Blog de macrodatos de AWS*. 