Etapa 5: Criar um arquivo manifesto - Amazon Redshift

Etapa 5: Criar um arquivo manifesto

O comando COPY pode conectar-se a vários hosts usando SSH e criar várias conexões SSH para cada host. O COPY executa um comando em cada conexão do host e carrega a saída dos comandos para a tabela em paralelo. O arquivo manifesto é um arquivo de texto no formato JSON que o Amazon Redshift usa para se conectar ao host. O arquivo manifesto especifica os endpoints do host SSH e os comandos que serão executados nos hosts para retornar dados ao Amazon Redshift. Você também pode incluir a chave pública do host, o nome de usuário de login e um sinalizador obrigatório para cada entrada.

Crie o arquivo manifesto no computador local. Em uma etapa posterior, você carrega o arquivo no Amazon S3.

O arquivo manifesto está no seguinte formato:

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

O arquivo manifesto contém um construto "entradas" para cada conexão SSH. Cada entrada representa uma única conexão SSH. Você pode ter várias conexões para um único host ou várias conexões para vários hosts. As aspas duplas são obrigatórias conforme mostrado, tanto para os nomes dos campos quanto para os valores. O único valor que não precisa de aspas duplas é o valor booleano true ou false para o campo obrigatório.

Veja a seguir as descrições dos campos no arquivo manifesto.

endpoint

O endereço URL ou endereço IP do host. Por exemplo, "ec2-111-222-333.compute-1.amazonaws.com" ou "22.33.44.56"

command

O comando que será executado pelo host para gerar a saída de texto ou a saída binária (gzip, lzop ou bzip2). O comando pode ser qualquer um que o usuário "host_user_name" tenha permissão para executar. O comando pode ser tão simples quanto imprimir um arquivo ou pode ser consultar um banco de dados ou iniciar um script. A saída (arquivo de texto, arquivo binário gzip, arquivo binário lzop ou arquivo bzip2) deve estar em um formato que o comando COPY do Amazon Redshift possa ingerir. Para ter mais informações, consulte Preparação de dados de entrada.

publickey

(Opcional) A chave pública do host. Se fornecida, o Amazon Redshift usará a chave pública para identificar o host. Se a chave pública não for fornecida, o Amazon Redshift não tentará a identificação do host. Por exemplo, se a chave pública do host remoto for: ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com, insira o seguinte texto no campo de chave pública: AbcCbaxxx…xxxDHKJ.

mandatory

(Opcional) Indica se o comando COPY deve falhar se a conexão falhar. O padrão é false. Se o Amazon Redshift não fizer com sucesso pelo menos uma conexão, o comando COPY falhará.

username

(Opcional) O nome de usuário que será utilizado para fazer logon no sistema do host e executar o comando remoto. O nome de login do usuário deve ser o mesmo do login que foi usado para adicionar a chave pública ao arquivo de chaves autorizadas do host na etapa 2. O nome de usuário padrão é "redshift".

O exemplo a seguir mostra um manifesto concluído para abrir quatro conexões ao mesmo host e executar um comando diferente em cada conexão:

{ "entries": [ {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata1.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata2.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata3.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata4.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"} ] }