

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criar um pipeline de serviços de ETL para carregar dados incrementalmente do Amazon S3 ao Amazon Redshift usando o AWS Glue
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue"></a>

*Rohan Jamadagni e Arunabha Datta, Amazon Web Services*

## Resumo
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-summary"></a>

Esse padrão fornece orientação sobre como configurar o Amazon Simple Storage Service (Amazon S3) para obter o desempenho ideal do data lake e, em seguida, carregar alterações incrementais de dados do Amazon S3 para o Amazon Redshift usando o AWS Glue, executando operações de extração, transformação e carregamento (ETL). 

Os arquivos de origem no Amazon S3 podem ter formatos diferentes, incluindo valores separados por vírgula (CSV), XML e arquivos JSON. Esse padrão descreve como você pode usar o AWS Glue para converter os arquivos de origem em um formato com custo otimizado e desempenho, como o Apache Parquet. Você pode consultar arquivos do Parquet diretamente do Amazon Athena e do Amazon Redshift Spectrum. Você também pode carregar arquivos do Parquet no Amazon Redshift, agregá-los e compartilhar os dados agregados com os consumidores, ou visualizar os dados usando o Amazon Quick Sight.

## Pré-requisitos e limitações
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um bucket de origem do S3 que tem os privilégios certos e contém arquivos CSV, XML ou JSON.

**Suposições**
+ Os arquivos de origem CSV, XML ou JSON já estão carregados no Amazon S3 e podem ser acessados na conta em que o AWS Glue e o Amazon Redshift estão configurados.
+ As melhores práticas para carregar os arquivos, dividir os arquivos, compactar e usar um manifesto são seguidas, conforme discutido na [documentação do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html).
+ A estrutura do arquivo de origem permanece inalterada.
+ O sistema de origem é capaz de ingerir dados no Amazon S3 seguindo a estrutura de pastas definida no Amazon S3.
+ O cluster do Amazon Redshift abrange uma única zona de disponibilidade. (Essa arquitetura é apropriada porque o AWS Lambda, o AWS Glue e o Amazon Athena têm tecnologia sem servidor.) Para alta disponibilidade, os instantâneos do cluster são tirados com frequência regular.

**Limitações**
+ Os formatos de arquivo são limitados aos que [atualmente são compatíveis com o AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html).
+ Não há suporte para relatórios downstream em tempo real.

## Arquitetura
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-architecture"></a>

**Pilha de tecnologia de origem**
+ Bucket S3 com arquivos CSV, XML ou JSON

**Pilha de tecnologias de destino**
+ Data lake S3 (com armazenamento de arquivos Parquet particionado)
+ banco de dados de origem

**Arquitetura de destino**

![Arquitetura para o carregamento de alterações incrementais do Amazon S3 para o Amazon Redshift usando o AWS Glue.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/105b58ec-56c1-464a-8e69-f625360caa14/images/626aa365-e6e6-4874-a873-1c71adbe5306.png)


 

**Fluxo de dados**

![Fluxo de dados para o carregamento de alterações incrementais do Amazon S3 para o Amazon Redshift usando o AWS Glue.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/105b58ec-56c1-464a-8e69-f625360caa14/images/29569e48-9f2d-4f48-bc59-1f33949d01ca.png)


## Ferramentas
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-tools"></a>
+ [Amazon S3](https://aws.amazon.com/s3/): o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos altamente escalável. O Amazon S3 pode ser usado para uma ampla variedade de soluções de armazenamento, incluindo sites, aplicativos móveis, backups e data lakes.
+ [AWS Lambda](https://aws.amazon.com/lambda/): o AWS Lambda permite executar código sem provisionar ou gerenciar servidores. O AWS Lambda é um serviço orientado por eventos; você pode configurar seu código para iniciar automaticamente a partir de outros serviços da AWS.
+ [Amazon Redshift](https://aws.amazon.com/redshift/): o Amazon Redshift é um serviço de data warehouse em escala de petabytes totalmente gerenciado. Com o Amazon Redshift, você pode consultar petabytes de dados estruturados e semiestruturados em seu data warehouse e em seu data lake usando SQL padrão.
+ [AWS Glue](https://aws.amazon.com/glue/): o AWS Glue é um serviço de ETL totalmente gerenciado que facilita a preparação e o carregamento de dados para análise. O AWS Glue descobre seus dados e armazena os metadados associados (por exemplo, definições de tabela e esquema) no Catálogo de dados do AWS Glue. Depois de catalogados, os dados se tornarão imediatamente pesquisáveis, consultáveis e disponíveis para ETL.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/): o AWS Secrets Manager facilita a proteção e o gerenciamento centralizado dos segredos necessários para o acesso a aplicativos ou serviços. O serviço armazena credenciais de banco de dados, chaves de API e outros segredos, além de eliminar a necessidade de codificar informações confidenciais em formato de texto sem formatação. O Secrets Manager também oferece rotação de chaves para atender às necessidades de segurança e conformidade. Ele tem integração integrada com o Amazon Redshift, Amazon Relational Database Service (Amazon RDS) e Amazon DocumentDB. Você pode armazenar e gerenciar centralmente segredos usando o console do Secrets Manager, a interface de linha de comando (CLI) ou a API Secrets Manager e. SDKs
+ [Amazon Athena](https://aws.amazon.com/athena/): o Amazon Athena é um serviço de consultas interativas que facilita a análise de dados armazenada no Amazon S3. O Athena tem tecnologia sem servidor e está integrado ao AWS Glue, portanto, pode consultar diretamente os dados que são catalogados usando o AWS Glue. O Athena é dimensionado de forma elástica para oferecer desempenho de consultas interativas.

## Épicos
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-epics"></a>

### Crie os buckets e a estrutura de pastas do S3
<a name="create-the-s3-buckets-and-folder-structure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Analise os sistemas de origem quanto à estrutura e aos atributos dos dados. | Execute essa tarefa para cada fonte de dados que contribui para o data lake do Amazon S3. | Engenheiro de dados | 
| Defina a estratégia de partição e acesso. | Essa estratégia deve ser baseada na frequência das capturas de dados, no processamento delta e nas necessidades de consumo. Certifique-se de que os buckets do S3 não estejam abertos ao público e que o acesso seja controlado somente por políticas específicas baseadas em perfis de serviço. Para mais informações, consulte a [documentação do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html). | Engenheiro de dados | 
| Crie buckets S3 separados para cada tipo de fonte de dados e um bucket S3 separado por fonte para os dados processados (Parquet). | Crie um bucket separado para cada fonte e, em seguida, crie uma estrutura de pastas com base na frequência de ingestão de dados do sistema de origem; por exemplo, `s3://source-system-name/date/hour`. Para os arquivos processados (convertidos para o formato Parquet), crie uma estrutura semelhante; por exemplo, `s3://source-processed-bucket/date/hour`. Para obter mais informações sobre como ciar buckets do S3, consulte a [Documentação do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html). | Engenheiro de dados | 

### Criar um data warehouse no Amazon Redshift
<a name="create-a-data-warehouse-in-amazon-redshift"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicie o cluster do Amazon Redshift com os grupos de parâmetros e a estratégia de manutenção e backup apropriados. | Use o segredo do banco de dados do Secrets Manager para credenciais de usuário administrador ao criar o cluster Amazon Redshift. Para obter informações sobre como criar e dimensionar um cluster do Amazon Redshift, consulte a [documentação do Amazon Redshift](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/event-publishing-redshift-cluster.html) e o whitepaper [Dimensionamento de Data Warehouses na nuvem](https://d1.awsstatic.com/whitepapers/Size-Cloud-Data-Warehouse-on-AWS.pdf). | Engenheiro de dados | 
| criar e associar o perfil de serviço do IAM ao cluster do Amazon Redshift. | O perfil de serviço AWS Identity and Access Management (IAM) garante acesso ao Secrets Manager e aos buckets de origem do S3. Para obter mais informações, consulte a documentação da AWS sobre [autorização](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) e [adição de uma função](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-add-role.html). | Engenheiro de dados | 
| Crie o esquema do banco de dados. | Siga as práticas recomendadas do Amazon Redshift para design de tabelas. Com base no caso de uso, escolha as chaves de classificação e distribuição apropriadas e a melhor codificação de compactação possível. Para obter as melhores práticas, consulte a [documentação da AWS](https://docs.aws.amazon.com/redshift/latest/dg/c_designing-tables-best-practices.html). | Engenheiro de dados | 
| Configure o gerenciamento do workload. | Configure filas de workload (WLM - workload management), aceleração de consultas curtas (SQA - short query acceleration) ou escalabilidade de simultaneidade, dependendo de suas necessidades. Para obter mais informações, consulte [Implementar o gerenciamento de workload](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-implementing-workload-management.html) na documentação do Amazon Redshift. | Engenheiro de dados | 

### Crie um segredo no Secrets Manager
<a name="create-a-secret-in-secrets-manager"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um novo segredo para armazenar as credenciais de login do Amazon Redshift no Secrets Manager. | Esse segredo armazena as credenciais do usuário administrador, bem como dos usuários individuais do serviço de banco de dados. Para obter instruções, consulte a [documentação do Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html). Escolha o **Amazon Redshift Cluster** como o tipo de segredo. Além disso, na página de **rotação secreta**, ative a rotação. Isso criará o usuário apropriado no cluster do Amazon Redshift e alternará os segredos da chave em intervalos definidos. | Engenheiro de dados | 
| Crie uma política do IAM para restringir o acesso ao Secrets Manager. | Restrinja o acesso ao Secrets Manager somente aos administradores do Amazon Redshift e ao AWS Glue. | Engenheiro de dados | 

### Configurar o AWS Glue
<a name="configure-aws-glue"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| No Catálogo de Dados do AWS Glue, adicione uma conexão para o Amazon Redshift. | Para obter instruções, consulte a [documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html). | Engenheiro de dados | 
| Crie e anexe um perfil de serviço do IAM para o AWS Glue acessar os buckets do Secrets Manager, do Amazon Redshift e do S3. | Para obter mais informações, consulte a [documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/create-service-policy.html). | Engenheiro de dados | 
| Defina o Catálogo de dados do AWS Glue para a fonte. | Essa etapa envolve a criação de um banco de dados e das tabelas necessárias no Catálogo de Dados do AWS Glue. Você pode usar um crawler para catalogar as tabelas no banco de dados AWS Glue ou defini-las como tabelas externas do Amazon Athena. Você também pode acessar as tabelas externas definidas no Athena por meio do Catálogo de Dados do AWS Glue. Consulte a documentação da AWS para obter mais informações sobre como [definir o catálogo de dados](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) e [criar uma tabela externa](https://docs.aws.amazon.com/athena/latest/ug/creating-tables.html) no Athena. | Engenheiro de dados | 
| Crie um trabalho do AWS Glue para processar dados de origem. | O trabalho do AWS Glue pode ser um shell Python ou PySpark padronizar, desduplicar e limpar os arquivos de dados de origem. Para otimizar o desempenho e evitar a necessidade de consultar todo o bucket de origem do S3, particione o bucket do S3 por data, dividido por ano, mês, dia e hora como uma redução de predicado para o trabalho do AWS Glue. Para obter mais informações, consulte a [documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html). Carregue os dados processados e transformados nas partições de bucket do S3 processadas no formato Parquet. Você pode consultar os arquivos do Parquet do Athena. | Engenheiro de dados | 
| Crie um trabalho do AWS Glue para carregar dados no Amazon Redshift. | O trabalho do AWS Glue pode ser um shell Python ou PySpark carregar os dados atualizando os dados, seguido por uma atualização completa. Para obter detalhes, consulte a [documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job.html) e a seção *Informações adicionais*. | Engenheiro de dados | 
| (Opcional) Programe trabalhos do AWS Glue usando gatilhos conforme necessário. | A carga incremental de dados é impulsionada principalmente por um evento do Amazon S3 que faz com que uma função do Lambda da AWS chame a tarefa do AWS Glue. Use o agendamento baseado em gatilho do AWS Glue para qualquer carga de dados que exija agendamento baseado em tempo em vez de agendamento baseado em eventos. | Engenheiro de dados | 

### Criar uma função do Lambda
<a name="create-a-lambda-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie e anexe uma função vinculada ao serviço do IAM para que o AWS Lambda acesse buckets do S3 e o trabalho do AWS Glue. | Crie uma função vinculada ao serviço do IAM para o AWS Lambda com uma política para ler objetos e buckets do Amazon S3 e uma política para acessar a API do AWS Glue para iniciar um trabalho do AWS Glue. Para obter mais informações, consulte o [Centro de Conhecimentos](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-execution-role-s3-bucket/). | Engenheiro de dados | 
| Crie uma função do Lambda para executar o trabalho do AWS Glue com base no evento definido do Amazon S3. | A função do Lambda deve ser iniciada pela criação do arquivo de manifesto do Amazon S3. A função Lambda deve passar a localização da pasta Amazon S3 (por exemplo, bucket/year/month/date/hour source\_) para o trabalho do AWS Glue como parâmetro. O trabalho do AWS Glue usará esse parâmetro como uma redução de predicado para otimizar o acesso a arquivos e o desempenho do processamento de trabalhos. Para obter mais informações, consulte a [documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html). | Engenheiro de dados | 
| Crie um evento de objeto PUT do Amazon S3 para detectar a criação de objetos e chame a respectiva função do Lambda. | O evento de objeto PUT do Amazon S3 deve ser iniciado somente pela criação do arquivo de manifesto. O arquivo de manifesto controla a função do Lambda e a simultaneidade de trabalhos do AWS Glue e processa a carga como um lote, em vez de processar arquivos individuais que chegam em uma partição específica do bucket de origem do S3. Para obter mais informações, consulte a[ documentação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html). | Engenheiro de dados | 

## Recursos relacionados
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-resources"></a>
+ [Documentação do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html)
+ [Documentação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Documentação do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [AWS Lambda](https://aws.amazon.com/lambda/)
+ [Amazon Athena](https://aws.amazon.com/athena/)
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)

## Mais informações
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-additional"></a>

**Abordagem detalhada para atualização inicial e completa**

**Upsert**: para conjuntos de dados que exigem agregação histórica, dependendo do caso de uso comercial. Siga uma das abordagens descritas em [Atualização e inserção de novos dados](https://docs.aws.amazon.com/redshift/latest/dg/t_updating-inserting-using-staging-tables-.html) (documentação do Amazon Redshift) com base nas necessidades da sua empresa.

**Atualização completa**: para pequenos conjuntos de dados que não precisam de agregações históricas. Siga uma dessas abordagens:

1. Leve a tabela do Amazon Redshift.

1. Carregue a partição atual da área de armazenamento

ou:

1. Crie uma tabela temporária com dados de partição atuais.

1. Spçte a tabela de destino no Amazon Redshift.

1. Renomeie a tabela temporária para tabela de destino.