Déchargement de données vers Amazon S3 - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déchargement de données vers Amazon S3

Amazon Redshift scinde les résultats d'une instruction SELECT sur un ensemble de fichiers, un ou plusieurs fichiers par tranche de nœud, afin de simplifier le rechargement parallèle des données. Sinon, vous pouvez spécifier que UNLOAD doit écrire les résultats en série sur un ou plusieurs fichiers en ajoutant l'option PARALLEL OFF. Vous pouvez limiter la taille des fichiers dans Amazon S3 en spécifiant le paramètre MAXFILESIZE. UNLOAD chiffre automatiquement les fichiers de données à l'aide du chiffrement côté serveur Amazon S3 (SSE-S3).

Vous pouvez utiliser dans la commande n'importe quelle instruction SELECT qu'Amazon Redshift prend en charge, à l'exception d'une instruction utilisant une clause LIMIT dans la sélection externe. Par exemple, vous pouvez utiliser une instruction SELECT qui inclut des colonnes spécifiques ou qui utilise une clause WHERE pour joindre plusieurs tables. Si votre requête contient des guillemets (encadrant les valeurs littérales, par exemple), vous devez les faire précéder d'une séquence d'échappement dans le texte de la requête (\'). Pour plus d'informations, consultez la référence de la commande SELECT. Pour plus d'informations sur l'utilisation d'une LIMIT, consultez Notes d’utilisation pour la commande UNLOAD.

Par exemple, la commande UNLOAD suivante envoie le contenu de la table VENUE au compartiment s3://DOC-EXAMPLE-BUCKET/tickit/unload/ Amazon S3.

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

Les noms de fichiers créés par l'exemple précédent incluent le préfixe « venue_ ».

venue_0000_part_00 venue_0001_part_00 venue_0002_part_00 venue_0003_part_00

Par défaut, UNLOAD écrit les données en parallèle dans plusieurs fichiers, selon le nombre de tranches du cluster. Pour écrire les données sur un seul fichier, spécifiez PARALLEL OFF. UNLOAD écrit les données en série, entièrement triées selon la clause ORDER BY, si elle est utilisée. La taille maximale d’un fichier de données est de 6,2 Go. Si la taille des données est supérieure à la valeur maximale, UNLOAD crée des fichiers supplémentaires, jusqu'à 6,2 Go chacun.

L'exemple suivant écrit le contenu de la table VENUE sur un seul fichier. Un seul fichier est obligatoire, car la taille du fichier est inférieure à 6,2 Go.

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

La commande UNLOAD est conçue pour utiliser le traitement parallèle. Nous vous recommandons de laisser PARALLEL activé dans la plupart des cas, surtout si les fichiers sont utilisés pour charger les tables à l'aide d'une commande COPY.

En supposant que la taille totale des données de VENUE est de 5 Go, l'exemple suivant écrit le contenu de VENUE dans 50 fichiers de 100 Mo chacun.

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;

Si vous incluez un préfixe dans la chaîne du chemin Amazon S3, UNLOAD utilise ce préfixe pour les noms de fichier.

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

Vous pouvez créer un fichier manifeste qui répertorie les fichiers de déchargement en spécifiant l'option MANIFEST dans la commande UNLOAD. Le manifeste est un fichier texte au format JSON qui répertorie explicitement l'URL de chaque fichier écrit sur Amazon S3.

L'exemple suivant inclut l'option MANIFEST.

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

L'exemple suivant illustre un manifeste pour quatre fichiers de déchargement.

{ "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"} ] }

Le fichier manifeste peut être utilisé pour charger les mêmes fichiers en utilisant une commande COPY avec l'option MANIFEST. Pour plus d’informations, consultez Utilisation d’un manifeste pour spécifier les fichiers de données.

Une fois que vous avez terminé une opération UNLOAD, confirmez que les données ont été déchargées correctement en accédant au compartiment Amazon S3 sur lequel UNLOAD a écrit les fichiers. Vous verrez un ou plusieurs fichiers numérotés par tranche, en commençant par le numéro zéro. Si vous avez spécifié l'option MANIFEST, vous verrez également un fichier se terminant par « manifest ». Par exemple :

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

Vous pouvez obtenir par programmation une liste des fichiers qui ont été écrits dans Amazon S3 en appelant une opération de liste Amazon S3 une fois le DÉCHARGEMENT terminé. Vous pouvez également interroger STL_UNLO_LOG.

La requête suivante retourne le chemin d'accès des fichiers qui ont été créées par une opération UNLOAD. La fonction PG_LAST_QUERY_ID retourne la requête la plus récente.

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)

Si la quantité de données est très importante, Amazon Redshift peut scinder les fichiers en plusieurs parties par tranche. Par exemple :

venue_0000_part_00 venue_0000_part_01 venue_0000_part_02 venue_0001_part_00 venue_0001_part_01 venue_0001_part_02 ...

Comme la commande UNLOAD suivante comprend une chaîne entre guillemets dans l'instruction SELECT, les guillemets sont précédés d'une séquence d'échappement (=\'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';

Par défaut, UNLOAD échoue plutôt que de remplacer les fichiers existants dans le compartiment de destination. Pour remplacer les fichiers existants, y compris le fichier manifeste, spécifiez l’option ALLOWOVERWRITE.

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