Scaricamento dei dati in Amazon S3 - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scaricamento dei dati in Amazon S3

Amazon Redshift suddivide i risultati di un'istruzione SELECT in un set di file, tra uno o più file per sezione del nodo, per semplificare il ricaricamento parallelo dei dati. In alternativa, puoi specificare che UNLOAD deve scrivere i risultati in modo seriale in uno o più file aggiungendo l'opzione PARALLEL OFF. Puoi limitare le dimensioni dei file in Amazon S3 specificando il parametro MAXFILESIZE. UNLOAD esegue automaticamente la crittografia dei file di dati usando la crittografia lato server di Amazon S3 (SSE-S3).

Nel comando UNLOAD è possibile usare qualsiasi istruzione SELECT supportata da Amazon Redshift, ad eccezione di un'istruzione SELECT che usa la clausola LIMIT nella parte esterna. Puoi ad esempio usare un'istruzione SELECT che include colonne specifiche o che usa una clausola WHERE per unire più tabelle. Se la query contiene virgolette (ad esempio per racchiudere valori letterali), è necessario farle precedere da un carattere di escape (\') nel testo della query. Per ulteriori informazioni, consultare le informazioni di riferimento per il comando SELECT. Per ulteriori informazioni sull'uso di una clausola LIMIT, consultare le Note per l'utilizzo per il comando UNLOAD.

Il comando UNLOAD seguente invia, ad esempio, i contenuti della tabella VENUE al bucket Amazon S3 s3://DOC-EXAMPLE-BUCKET/tickit/unload/.

unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

I nomi dei file creati nell'esempio precedente includono il prefisso "venue_".

venue_0000_part_00 venue_0001_part_00 venue_0002_part_00 venue_0003_part_00

Per impostazione predefinita, UNLOAD scrive i dati in parallelo in più file, in base al numero di sezioni nel cluster. Per scrivere i dati in un singolo file, specifica PARALLEL OFF. UNLOAD scrive i dati in modo seriale, con un ordinamento assoluto in base alla clausola ORDER BY, se viene usata. Le dimensioni massime per un file di dati sono di 6,2 GB. Se le dimensioni dei dati superano il limite massimo, UNLOAD crea file aggiuntivi con dimensioni fino a 6,2 GB ognuno.

L'esempio seguente scrive i contenuti di VENUE in un singolo file. È richiesto un solo file perché le sue dimensioni sono inferiori a 6,2 GB.

unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off;
Nota

Il comando UNLOAD è progettato per usare l'elaborazione parallela. Nella maggior parte dei casi, è consigliabile lasciare abilitata l'opzione PARALLEL, in particolare se i file verranno usati per caricare le tabelle usando un comando COPY.

Presupponendo che le dimensioni totali di VENUE siano di 5 GB, l'esempio seguente scrive i contenuti di VENUE in 50 file, ognuno di dimensioni di 100 MB.

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

Se si include un prefisso nella stringa del percorso Amazon S3, UNLOAD userà tale prefisso per i nomi di file.

unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

Puoi creare un file manifest che elenca i file scaricati specificando l'opzione MANIFEST nel comando UNLOAD. Il manifest è un file di testo in formato JSON che elenca in modo esplicito l'URL di ciascun file scritto in Amazon S3.

L'esempio seguente include l'opzione MANIFEST.

unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;

L'esempio seguente mostra un manifest per quattro file scaricati.

{ "entries": [ {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0000_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0001_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0002_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0003_part_00"} ] }

Il file manifest può essere usato per caricare gli stessi file usando un comando COPY con l'opzione MANIFEST. Per ulteriori informazioni, consultare Utilizzo di un manifest per specificare i fili di dati.

Dopo aver completato un'operazione UNLOAD, verificare che i dati siano stati scaricati correttamente passando al bucket Amazon S3 in cui UNLOAD ha scritto i file. Vedrai uno o più file numerati per sezione, a partire dal numero zero. Se hai specificato l'opzione MANIFEST, sarà presente anche un file che termina con "manifest". Per esempio:

DOC-EXAMPLE-BUCKET/tickit/venue_0000_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0001_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0002_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0003_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_manifest

È possibile ottenere un elenco dei file scritti su Amazon S3 a livello di programmazione chiamando un'operazione di elenco Amazon S3 dopo il completamento di UNLOAD. È inoltre possibile eseguire una query su STL_UNLOAD_LOG.

La query seguente restituisce il percorso per i file creati da un comando UNLOAD. La funzione PG_LAST_QUERY_ID restituisce la query più recente.

select query, substring(path,0,40) as path from stl_unload_log where query=2320 order by path; query | path -------+-------------------------------------- 2320 | s3://DOC-EXAMPLE-BUCKET/venue0000_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0001_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0002_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0003_part_00 (4 rows)

Se la quantità dei dati è molto elevata, Amazon Redshift può suddividere i file in più parti per sezione. Per esempio:

venue_0000_part_00 venue_0000_part_01 venue_0000_part_02 venue_0001_part_00 venue_0001_part_01 venue_0001_part_02 ...

Il comando UNLOAD seguente include una stringa tra virgolette nell'istruzione SELECT, pertanto per le virgolette viene eseguito l'escape (=\'OH\' ').

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

Per impostazione predefinita, UNLOAD ha esito negativo se deve sovrascrivere i file esistenti nel bucket di destinazione. Per sovrascrivere i file esistenti, incluso il file manifest, specifica l'opzione ALLOWOVERWRITE.

unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest allowoverwrite;