

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Descarga de datos en Amazon Redshift
<a name="c_unloading_data"></a>

Para descargar datos de las tablas de una base de datos en un conjunto de archivos de un bucket de Amazon S3, puede utilizar el comando [UNLOAD](r_UNLOAD.md) con una instrucción SELECT. Puede descargar datos de texto en formato delimitado o formato de ancho fijo, independientemente del formato de datos que se utilizó para cargarlos. También puede especificar si desea crear archivos GZIP comprimidos.

Puede utilizar credenciales de seguridad temporales para limitar el acceso que tienen los usuarios al bucket de Amazon S3.

**Topics**
+ [Descarga de datos en Amazon S3](t_Unloading_tables.md)
+ [Descarga de archivos de datos cifrados](t_unloading_encrypted_files.md)
+ [Descarga de datos en formato de ancho fijo o delimitado](t_unloading_fixed_width_data.md)
+ [Volver a cargar datos descargados](t_Reloading_unload_files.md)

# Descarga de datos en Amazon S3
<a name="t_Unloading_tables"></a>

Amazon Redshift divide los resultados de una instrucción de selección en un conjunto de archivos, uno o más archivos por sector de nodo, para simplificar la recarga paralela de los datos. De manera alternativa, puede especificar que [UNLOAD](r_UNLOAD.md) debe escribir los resultados en serie en uno o más archivos al añadir la opción PARALLEL OFF. Puede especificar el parámetro MAXFILESIZE para limitar el tamaño de los archivos en Amazon S3. El comando UNLOAD cifra automáticamente los archivos de datos mediante el cifrado del lado del servidor de Amazon S3 (SSE-S3). 

Puede utilizar cualquier instrucción de selección en el comando UNLOAD que sea compatible con Amazon Redshift, excepto una selección que utilice una cláusula LIMIT en la selección externa. Por ejemplo, puede utilizar una instrucción de selección que incluya columnas específicas o que use una cláusula WHERE para combinar varias tablas. Si la consulta contiene comillas (para delimitar valores literales, por ejemplo), debe aplicarle escape en el texto de la consulta (\$1'). Para obtener más información, consulte la referencia de comandos [SELECT](r_SELECT_synopsis.md). Para obtener más información acerca del uso de una cláusula LIMIT, consulte [Notas de uso](r_UNLOAD.md#unload-usage-notes) para el comando UNLOAD.

Por ejemplo, el siguiente comando UNLOAD envía el contenido de la tabla VENUE al bucket de Amazon S3 `s3://amzn-s3-demo-bucket/tickit/unload/`.

```
unload ('select * from venue')   
to 's3://amzn-s3-demo-bucket/tickit/unload/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Los nombres de los archivos creados por el ejemplo anterior incluyen el prefijo "". '`venue_`'.

```
venue_0000_part_00
venue_0001_part_00
venue_0002_part_00
venue_0003_part_00
```

Por defecto, el comando UNLOAD escribe datos simultáneamente en varios archivos, según la cantidad de sectores que haya en el clúster. Para escribir datos en un único archivo, especifique PARALLEL OFF. El comando UNLOAD escribe los datos en serie, ordenados absolutamente en función de la cláusula ORDER BY, si se utiliza una. El tamaño máximo de un archivo de datos es de 6,2 GB. Si el tamaño de los datos es superior al máximo, UNLOAD crea archivos adicionales de hasta 6,2 GB cada uno. 

En el siguiente ejemplo se escribe el contenido de VENUE en un único archivo. Solo se requiere un archivo debido a que el tamaño del archivo es menor a 6,2 GB.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/unload/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

**nota**  
El comando UNLOAD está diseñado para utilizar procesamiento en paralelo. Le recomendamos dejar PARALLEL habilitado para la mayoría de casos, especialmente si los archivos se utilizarán para cargar tablas mediante un comando COPY.

Suponiendo que el tamaño total de los datos de VENUE es 5 GB, en el siguiente ejemplo se escribe el contenido de VENUE en 50 archivos, cada uno de 100 MB.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/unload/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off
maxfilesize 100 mb;
```

Si incluye un prefijo en la cadena de ruta de Amazon S3, el comando UNLOAD utilizará ese prefijo para los nombres de los archivos. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/unload/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Puede crear un archivo de manifiesto que enumere los archivos de descarga al especificar la opción MANIFEST en el comando UNLOAD. El manifiesto es un archivo de texto en formato JSON que enumera explícitamente la dirección URL de cada archivo escrito en Amazon S3. 

En el siguiente ejemplo se incluye la opción de manifiesto. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

En el siguiente ejemplo se muestra un manifiesto para cuatro archivos de descarga.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

El archivo de manifiesto puede utilizarse para cargar los mismos archivos a través del comando COPY con la opción MANIFEST. Para obtener más información, consulte [Uso de un manifiesto para especificar archivos de datos](loading-data-files-using-manifest.md).

Después de completar una operación UNLOAD, confirme que los datos se descargaron de manera correcta al navegar hacia el bucket de Amazon S3 donde UNLOAD escribió los archivos. Verá uno o más archivos numerados por sector, comenzando con el número cero. Si especificó la opción MANIFEST, también verá un archivo que finaliza con "". '`manifest`'. Por ejemplo:

```
amzn-s3-demo-bucket/tickit/venue_0000_part_00 
amzn-s3-demo-bucket/tickit/venue_0001_part_00 
amzn-s3-demo-bucket/tickit/venue_0002_part_00 
amzn-s3-demo-bucket/tickit/venue_0003_part_00
amzn-s3-demo-bucket/tickit/venue_manifest
```

Puede obtener mediante programación una lista de los archivos que se escribieron en Amazon S3 llamando a una operación de lista de Amazon S3 una vez que se complete el comando UNLOAD. También puede consultar STL\$1UNLOAD\$1LOG.

La siguiente consulta devuelve el nombre de ruta para los archivos que se crearon a través de un comando UNLOAD. La función [PG\$1LAST\$1QUERY\$1ID](PG_LAST_QUERY_ID.md) devuelve la consulta más reciente. 

```
select query, substring(path,0,40) as path
from stl_unload_log
where query=2320
order by path;

query |             path
-------+--------------------------------------
  2320 | s3://amzn-s3-demo-bucket/venue0000_part_00
  2320 | s3://amzn-s3-demo-bucket/venue0001_part_00
  2320 | s3://amzn-s3-demo-bucket/venue0002_part_00
  2320 | s3://amzn-s3-demo-bucket/venue0003_part_00
(4 rows)
```

Si la cantidad de datos es muy grande, Amazon Redshift podría dividir los archivos en varias partes por sector. Por ejemplo:

```
venue_0000_part_00
venue_0000_part_01
venue_0000_part_02
venue_0001_part_00
venue_0001_part_01
venue_0001_part_02
...
```

El siguiente comando UNLOAD incluye una cadena entre comillas en la instrucción de selección, por lo que las comillas tienen aplicado un carácter de escape (`=\'OH\' '`).

```
unload ('select venuename, venuecity from venue where venuestate=\'OH\' ')
to 's3://amzn-s3-demo-bucket/tickit/venue/ ' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Por defecto, UNLOAD producirá un error en lugar de sobrescribir los archivos existentes en el bucket de destino. Para sobrescribir los archivos existentes, incluido el archivo de manifiesto, especifique la opción ALLOWOVERWRITE.

```
unload ('select * from venue') 
to 's3://amzn-s3-demo-bucket/venue_pipe_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest 
allowoverwrite;
```

# Descarga de archivos de datos cifrados
<a name="t_unloading_encrypted_files"></a>

El comando UNLOAD crea archivos automáticamente mediante el cifrado del servidor de Amazon S3 con claves de cifrado administradas por AWS (SSE-S3). También puede especificar cifrado del lado del servidor con una clave de AWS Key Management Service (SSE-KMS) o cifrado del lado del cliente con una clave administrada por el cliente. El comando UNLOAD no admite el cifrado de servidor de Amazon S3 utilizando una clave proporcionada por el cliente. Para obtener más información, consulte [Protección de los datos con el cifrado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html). 

Para descargar datos en Amazon S3 mediante el cifrado del lado del servidor con una clave de AWS KMS, utilice el parámetro KMS\$1KEY\$1ID para proporcionar el ID de la clave, tal como se muestra en el siguiente ejemplo.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
KMS_KEY_ID '1234abcd-12ab-34cd-56ef-1234567890ab'
encrypted;
```

Si desea proporcionar su propia clave de cifrado, puede crear archivos de datos cifrados del lado del cliente en Amazon S3 mediante el comando UNLOAD con la opción ENCRYPTED. El comando UNLOAD utiliza el mismo proceso de cifrado de sobre que usa el cifrado del lado del cliente de Amazon S3. Puede utilizar el comando COPY con la opción ENCRYPTED para cargar los archivos cifrados.

El proceso ocurre de la siguiente manera:

1. Cree una clave de cifrado AES de 256 bits con codificación base64 que utilizará como clave de cifrado privada o *clave simétrica principal*. 

1. Emita un comando UNLOAD que incluya la clave simétrica principal y la opción ENCRYPTED. 

1. El comando UNLOAD genera una clave simétrica de un solo uso (denominada *clave simétrica de sobre*) y un vector de inicialización (IV), que se utiliza para cifrar los datos. 

1. El comando UNLOAD cifra la clave simétrica de sobre a través de la clave simétrica principal. 

1. El comando UNLOAD luego almacena los archivos de datos cifrados en Amazon S3 y almacena la clave de sobre cifrada y el IV como metadatos de los objetos en cada archivo. La clave de sobre cifrada se almacena como metadatos de los objetos `x-amz-meta-x-amz-key` y el IV se almacena como metadatos de los objetos `x-amz-meta-x-amz-iv`. 

Para obtener más información acerca del proceso de cifrado de sobre, consulte [Cifrado de datos del lado del cliente con el AWS SDK para Java y Amazon S3](https://aws.amazon.com/articles/2850096021478074). 

Para descargar archivos de datos cifrados, agregue el valor de la clave principal a la cadena de credenciales e incluya la opción ENCRYPTED. Si utiliza la opción MANIFEST, también se cifra el archivo de manifiesto.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
manifest
encrypted;
```

Para descargar archivos de datos cifrados que están comprimidos en GZIP, incluya la opción GZIP junto con el valor de la clave principal y la opción ENCRYPTED.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
encrypted gzip;
```

Para cargar archivos de datos cifrados, agregue el parámetro MASTER\$1SYMMETRIC\$1KEY con el mismo valor de clave principal e incluya la opción ENCRYPTED. 

```
copy venue from 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
encrypted;
```

# Descarga de datos en formato de ancho fijo o delimitado
<a name="t_unloading_fixed_width_data"></a>

Puede descargar datos en formato delimitado o formato de ancho fijo. El resultado predeterminado está delimitado por una barra vertical (con el carácter "\$1").

En el siguiente ejemplo se especifica una coma como delimitador: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/venue/comma' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',';
```

Los archivos de salida resultantes tendrán este aspecto: 

```
20,Air Canada Centre,Toronto,ON,0
60,Rexall Place,Edmonton,AB,0
100,U.S. Cellular Field,Chicago,IL,40615
200,Al Hirschfeld Theatre,New York City,NY,0
240,San Jose Repertory Theatre,San Jose,CA,0
300,Kennedy Center Opera House,Washington,DC,0
...
```

Para descargar el mismo conjunto de resultados a un archivo delimitado por tabulaciones, emita el siguiente comando: 

```
unload ('select * from venue') 
to 's3://amzn-s3-demo-bucket/tickit/venue/tab' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

O bien, puede usar una especificación FIXEDWIDTH. Esta especificación consta de un identificador para cada columna de la tabla y el ancho de la columna (cantidad de caracteres). El comando UNLOAD producirá un error en lugar de truncar los datos, por lo que debe especificar un ancho que tenga al menos la misma longitud que la entrada más larga de esa columna. Descargar datos de ancho fijo funciona de manera similar a descargar datos delimitados, excepto que la salida resultante no contiene caracteres que delimitan. Por ejemplo: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/venue/fw' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth '0:3,1:100,2:30,3:2,4:6';
```

La salida de ancho fijo tendrá este aspecto: 

```
20 Air Canada Centre         Toronto      ON0
60 Rexall Place              Edmonton     AB0
100U.S. Cellular Field       Chicago      IL40615
200Al Hirschfeld Theatre     New York CityNY0
240San Jose Repertory TheatreSan Jose     CA0
300Kennedy Center Opera HouseWashington   DC0
```

Para obtener más información acerca de las especificaciones FIXEDWIDTH, consulte el comando [UNLOAD](r_UNLOAD.md).

# Volver a cargar datos descargados
<a name="t_Reloading_unload_files"></a>

Para volver a cargar los resultados de una operación de descarga, puede usar el comando COPY.

En el siguiente ejemplo se muestra un caso simple en el que la tabla VENUE se descarga con un archivo de manifiesto, se trunca y se vuelve a cargar. 

```
unload  ('select * from venue order by venueid')
to 's3://amzn-s3-demo-bucket/tickit/venue/reload_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
manifest 
delimiter '|';

truncate venue;

copy venue 
from 's3://amzn-s3-demo-bucket/tickit/venue/reload_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest 
delimiter '|';
```

Después de volver a cargarla, la tabla VENUE tendrá este aspecto: 

```
select * from venue order by venueid limit 5;

 venueid |         venuename         |  venuecity  | venuestate | venueseats
---------+---------------------------+-------------+------------+-----------
       1 | Toyota Park               | Bridgeview  | IL         |          0
       2 | Columbus Crew Stadium     | Columbus    | OH         |          0
       3 | RFK Stadium               | Washington  | DC         |          0
       4 | CommunityAmerica Ballpark | Kansas City | KS         |          0
       5 | Gillette Stadium          | Foxborough  | MA         |      68756
(5 rows)
```