Exécution de la commande COPY à partir de l'hôte distant (SSH) - Amazon Redshift

Exécution de la commande COPY à partir de l'hôte distant (SSH)

Vous pouvez utiliser la commande COPY pour charger les données en parallèle à partir d'un ou de plusieurs hôtes distants, comme les instances Amazon Elastic Compute Cloud (Amazon EC2) ou d'autres ordinateurs. La commande COPY se connecte aux hôtes distants à l'aide de SSH (Secure Shell) et exécute les commandes sur les hôtes distants pour générer la sortie de texte. L'hôte distant peut être une instance Linux EC2 ou un autre ordinateur Unix ou Linux configuré pour accepter les connexions SSH. Amazon Redshift peut se connecter à plusieurs hôtes et ouvrir plusieurs connexions SSH à chaque hôte. Amazon Redshift envoie une commande unique lors de chaque connexion pour générer la sortie de texte sur la sortie standard de l'hôte, qu'Amazon Redshift lit alors comme un fichier texte.

Utilisez la clause FROM pour spécifier la clé d'objet Amazon S3 pour le fichier manifeste qui fournit les informations que la commande COPY utilise pour ouvrir des connexions SSH et exécuter les commandes à distance.

Important

Si le compartiment S3 contenant le fichier manifeste ne réside pas dans la même région AWS que votre cluster, vous devez utiliser le paramètre REGION pour spécifier la région dans laquelle le compartiment se trouve.

Syntaxe

FROM 's3://'ssh_manifest_file' } authorization SSH | optional-parameters

Exemples

L'exemple suivant utilise un fichier manifeste pour charger les données à partir d'un hôte distant à l'aide de SSH.

copy sales from 's3://mybucket/ssh_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' ssh;

Paramètres

FROM

Source des données à charger.

's3://copy_from_ssh_manifest_file'

La commande COPY peut se connecter à plusieurs hôtes à l'aide de SSH et créer plusieurs connexions SSH à chaque hôte. COPY exécute une commande via chaque connexion hôte, puis charge la sortie à partir des commandes en parallèle de la table. L'argument s3://copy_from_ssh_manifest_file spécifie la clé d'objet Amazon S3 du fichier manifeste qui fournit les informations que la commande COPY utilise pour ouvrir les connexions SSH et exécuter les commandes à distance.

L'argument s3://copy_from_ssh_manifest_file doit explicitement faire référence à un seul fichier ; il ne peut pas être un préfixe de clé. Voici un exemple:

's3://mybucket/ssh_manifest.txt'

Le fichier manifeste est un fichier texte au format JSON qu'Amazon Redshift utilise pour se connecter à l'hôte. Le fichier manifeste spécifie les points de terminaison hôte SSH et les commandes qui seront exécutées sur les hôtes pour renvoyer les données à Amazon Redshift. Le cas échéant, vous pouvez inclure la clé publique de l'hôte, le nom d'utilisateur de connexion et un indicateur obligatoire pour chaque entrée. L'exemple suivant montre un fichier manifeste qui crée deux connexions SSH :

{ "entries": [ {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"}, {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"} ] }

Le fichier manifeste contient une construction "entries" pour chaque connexion SSH. Vous pouvez avoir plusieurs connexions à un seul hôte ou plusieurs connexions à plusieurs hôtes. Les guillemets doubles sont obligatoires comme illustré, aussi bien pour les noms de champ que pour les valeurs. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes. La seule valeur qui n'a pas besoin de guillemets doubles est la valeur booléenne true ou false pour le champ "mandatory".

La liste suivante décrit les champs dans le fichier manifeste.

point de terminaison

L'adresse URL ou l'adresse IP de l'hôte, par exemple, "ec2-111-222-333.compute-1.amazonaws.com" ou "198.51.100.0".

command

La commande doit être exécutée par l'hôte pour générer la sortie de texte ou la sortie binaire au format gzip, lzop, bzip2 ou zstd. La commande peut être n'importe quelle commande que l'utilisateur « host_user_name » est autorisé à exécuter. La commande peut être aussi simple que l'impression d'un fichier, ou elle bien peut interroger une base de données ou lancer un script. Les sorties (fichier texte, fichier binaire gzip, fichier binaire lzop ou fichier binaire bzip2) doivent être sous une forme que la commande COPY Amazon Redshift peut intégrer. Pour plus d'informations, consultez Préparation de vos données d'entrée.

publickey

(Facultatif) La clé publique de l'hôte. Si la clé est fournie, Amazon Redshift l'utilise pour identifier l'hôte. Si la clé publique n'est pas fournie, Amazon Redshift n'essaie pas d'identifier l'hôte. Par exemple, si la clé publique l'hôte distant est ssh-rsa AbcCbaxxx…Example root@amazon.com, tapez le texte suivant dans le champ de clé publique : "AbcCbaxxx…Example"

mandatory

(Facultatif) Clause qui indique si la commande COPY doit échouer en cas d'échec de la tentative de connexion. La valeur par défaut est false. Si Amazon Redshift n'établit pas au moins une connexion, la commande COPY échoue.

username

(Facultatif) Nom d'utilisateur qui sera utilisé pour vous connecter au système hôte et exécuter la commande à distance. Le nom de connexion d'utilisateur doit être le même que la connexion qui a été utilisée pour ajouter la clé publique du cluster Amazon Redshift au fichier de clés autorisé de l'hôte. Le nom d'utilisateur par défaut est redshift.

Pour plus d'informations sur la création d'un fichier manifeste, consultez Processus de chargement de données.

Pour exécuter la commande COPY d'un hôte distant, le paramètre SSH doit être spécifié avec la commande COPY. Si le paramètre SSH n'est pas spécifié, la commande COPY suppose que le fichier spécifié avec FROM est un fichier de données et échoue.

Si vous utilisez la compression automatique, la commande COPY effectue deux opérations de lecture des données, ce qui signifie qu'elle va exécuter la commande à distance à deux reprises. La première opération de lecture vise à fournir un échantillon de données pour l'analyse de la compression, et la deuxième opération de lecture charge réellement les données. Si l'exécution de la commande à distance à deux reprises est susceptible d'entraîner un problème, vous devez désactiver la compression automatique. Pour désactiver la compression automatique, exécutez la commande COPY avec le paramètre COMPUPDATE défini sur OFF. Pour plus d'informations, consultez Chargement des tables avec compression automatique.

Pour connaître les procédures détaillées de l'utilisation de la commande COPY dans SSH, consultez Chargement des données à partir des hôtes distants.

authorization

La commande COPY a besoin de l'autorisation pour accéder aux données dans une autre ressource AWS, y compris Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en faisant référence à un rôle AWS Identity and Access Management (IAM) qui est attaché à votre cluster (contrôle d'accès basé sur les rôles) ou en fournissant les informations d'identification d'accès d'un utilisateur IAM (contrôle d'accès basé sur la clé). Pour plus de sécurité et de flexibilité, nous recommandons d'utiliser contrôle d'accès basé sur les rôles IAM. Pour plus d'informations, consultez Paramètres d'autorisation.

SSH

Clause qui spécifie que les données doivent être chargées à partir d'un hôte distant à l'aide du protocole SSH. Si vous spécifiez SSH, vous devez également fournir un fichier manifeste à l'aide de l'argument s3://copy_from_ssh_manifest_file.

Note

Si vous utilisez SSH pour effectuer une copie à partir d'un hôte à l'aide d'une adresse IP privée dans un VPC distant, le routage VPC amélioré doit être activé pour le VPC. Pour plus d'informations sur le routage VPC amélioré, consultez Routage VPC amélioré Amazon Redshift.

Paramètres facultatifs

Vous pouvez éventuellement spécifier les paramètres suivants avec la commande COPY à partir de SSH :

Paramètres non pris en charge

Vous ne pouvez pas utiliser les paramètres suivants avec la commande COPY à partir de SSH :

  • ENCRYPTED

  • MANIFEST

  • READRATIO