Descarga de datos en Amazon S3 - Amazon Redshift

Descarga de datos en Amazon S3

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 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 (\'). Para obtener más información, consulte la referencia de comandos SELECT. Para obtener más información acerca del uso de una cláusula LIMIT, consulte Notas de uso para el comando UNLOAD.

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

unload ('select * from venue') to 's3://mybucket/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://mybucket/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://mybucket/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://mybucket/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://mybucket/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://mybucket/tickit/venue_0000_part_00"}, {"url":"s3://mybucket/tickit/venue_0001_part_00"}, {"url":"s3://mybucket/tickit/venue_0002_part_00"}, {"url":"s3://mybucket/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.

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:

mybucket/tickit/venue_0000_part_00 mybucket/tickit/venue_0001_part_00 mybucket/tickit/venue_0002_part_00 mybucket/tickit/venue_0003_part_00 mybucket/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_UNLOAD_LOG.

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_LAST_QUERY_ID 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://my-bucket/venue0000_part_00 2320 | s3://my-bucket/venue0001_part_00 2320 | s3://my-bucket/venue0002_part_00 2320 | s3://my-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://mybucket/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://mybucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest allowoverwrite;