Skip to content

Commit

Permalink
Merge pull request #57 from ThiagoPanini/develop
Browse files Browse the repository at this point in the history
pr(main): develop -> main
  • Loading branch information
ThiagoPanini authored Feb 4, 2023
2 parents 50725d5 + 5d9a482 commit fd474fc
Show file tree
Hide file tree
Showing 57 changed files with 338 additions and 219 deletions.
188 changes: 111 additions & 77 deletions README.md

Large diffs are not rendered by default.

Binary file added docs/imgs/app/01-header-app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/imgs/docker-tests/01-header-tests.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
Binary file added docs/imgs/examples/01-header-examples.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/imgs/infra/01-header-infra.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
Binary file added docs/imgs/readme/01-header-readme.png
File renamed without changes
File renamed without changes
Binary file removed docs/imgs/terraglue-diagram-resources.png
Diff not rendered.
Binary file removed docs/imgs/terraglue-diagram-user-view.png
Diff not rendered.
32 changes: 13 additions & 19 deletions APP.md → docs/markdown/APP.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
*Apresentando uma proposta de padronização de aplicações Spark para jobs do Glue*
<div align="center">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/app/01-header-app.png?raw=true" alt="terraglue-logo">
</div>


## Table of Contents
- [Table of Contents](#table-of-contents)
- [Antes de começar](#antes-de-começar)
- [Desafios de desenvolvimento de um job Glue](#desafios-de-desenvolvimento-de-um-job-glue)
- [Uma proposta de padronização de jobs do Glue](#uma-proposta-de-padronização-de-jobs-do-glue)
- [Módulos e scripts entregues ao usuário](#módulos-e-scripts-entregues-ao-usuário)
Expand All @@ -13,17 +15,9 @@
- [O script main.py](#o-script-mainpy)
- [A classe GlueTransformationManager](#a-classe-gluetransformationmanager)
- [Adaptando a aplicação para finalidades próprias](#adaptando-a-aplicação-para-finalidades-próprias)
- [Continue navegando nas documentações](#continue-navegando-nas-documentações)

## Antes de começar

> Antes de navegarmos pelo detalhamento da aplicação Spark previamente codificada para o usuário, é importante garantir que todas as etapas de preparação e instalação foram cumpridas. Para maiores detalhes, o arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/develop/GETTINGSTARTED.md) contempla todo o processo necessário de iniciação. Adicionalmente, o arquivo [INFRA.md](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) contém todas as explicações sobre os recursos de infraestrutura provisionados ao usuário.
- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md)
- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md)
- 👉 [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) *Você está aqui!*
- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md)
- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md)
___

## Desafios de desenvolvimento de um job Glue

Expand Down Expand Up @@ -98,7 +92,8 @@ Dessa forma, entre os métodos atualmente disponíveis nessa classe, é possíve
| :-- | :-- |
| `generate_dynamic_frames_dict()` | Proporciona uma forma fácil e eficiente de realizar a leitura de múltiplas fontes de dados referenciadas em um dicionário Python de modo a entregar objetos do tipo `DynamicFrame` para cada uma delas |
| `generate_dataframes_frames_dict()` | Possui a mesma dinâmica do método anterior, porém o resultado final é entregue ao usuário como um dicionário contendo múltiplos objetos do tipo `DataFrame` |
| `date_attributes_extraction()` | Permite extrair uma série de atributos temporais de campos de data (ou strings que representam datas), como ano, quadrimestre, mês, dia, dia da semana, semana do ano ou tudo o que pode ser extraído através de funções Spark |
| `extract_date_attributes()` | Permite extrair uma série de atributos temporais de campos de data (ou strings que representam datas), como ano, quadrimestre, mês, dia, dia da semana, semana do ano ou tudo o que pode ser extraído através de funções Spark |
| `extract_aggregate_statistics()` | Permite extrair uma série de estatísticas agregadas de um DataFrame com base em uma coluna numérica e uma lista de atributos a serem agrupados. Com este método, o usuário pode extrair a média, mediana, contagem, contagem distinta, variância, desvio padrão e toda e qualquer função estatística presente no Spark com uma única chamada |
| `drop_partition()` | Recebe uma referência de nome e valor de partição para executar o processo de `purge` de dados no s3, permitindo assim que fluxos de trabalho evitem um *append* indesejado em caso de execuções simultâneas ou repetidas |
| `add_partition()` | Permite, através de um nome de partição e um valor fornecidos pelo usuário, realizar a inclusão de uma nova coluna em um objeto DataFrame via execução do método `.withColumn()` do Spark |
| `repartition_dataframe()` | Consolida regras para a correta aplicação do processo de reparticionamento de um DataFrame Spark visando a otimização do armazenamento dos dados físicos no S3 |
Expand Down Expand Up @@ -165,11 +160,10 @@ Todas as demais operações já estão inclusas nos métodos internos das classe
___

Continue sua jornada no **terraglue** através das documentações!
## Continue navegando nas documentações

- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md)
- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md)
- 👉 [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) *Você está aqui!*
- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md)
- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md)
- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md)
- 👉 [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md) *Você está aqui!*
- [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md)
- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md)
File renamed without changes.
58 changes: 22 additions & 36 deletions EXAMPLES.md → docs/markdown/EXAMPLES.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
*Fornecendo exemplos práticos de cenários de utilização do projeto*
<div align="center">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/01-header-examples.png?raw=true" alt="terraglue-logo">
</div>


## Table of Contents
- [Table of Contents](#table-of-contents)
- [Antes de começar](#antes-de-começar)
- [Cenário 1: implementando seu próprio conjunto de dados](#cenário-1-implementando-seu-próprio-conjunto-de-dados)
- [Sobre os dados de exemplo (Brazilian E-Commerce)](#sobre-os-dados-de-exemplo-brazilian-e-commerce)
- [Utilizando dados próprios](#utilizando-dados-próprios)
Expand All @@ -14,26 +16,7 @@
- [Codificando novos métodos de transformação](#codificando-novos-métodos-de-transformação)
- [Sequenciando passos no método run()](#sequenciando-passos-no-método-run)
- [Visualizando resultados](#visualizando-resultados)
___

## Antes de começar

> Antes de navegarmos por exemplos práticos d euso da solução, é importante garantir que todas as etapas de preparação e instalação foram cumpridas. Para maiores detalhes, o arquivo [GETTINGSTARTED.md](https://github.com/ThiagoPanini/terraglue/blob/develop/GETTINGSTARTED.md) contempla todo o processo necessário de iniciação. Adicionalmente, o arquivo [INFRA.md](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md) contém todas as explicações sobre os recursos de infraestrutura provisionados ao usuário. Por fim, o arquivo [APP.md](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md) traz detalhes sobre os módulos e scripts pré codificados e entregues aos usuários.
- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md)
- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md)
- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md)
- 👉 [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) *Você está aqui!*
- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md)


Adicionalmente, é válido citar que esta documentação será separada em diferentes **cenários**, cada um trazendo à tona uma possível seara de aplicação do **terraglue** de acordo com um propósito específico. É importante destacar que os cenários contemplam desafios próprios e particulares, sendo direcionados para públicos específicos que podem se beneficiar das funcionalidades deste projeto. Encontre aquele que mais faça sentido dentro de sua jornada de aprendizado e mergulhe fundo!

| 🎬 **Cenário** | **🎯 Público alvo** |
| :-- | :-- |
| [#1 Implementando seu próprio conjunto de dados](#cenário-1-implementando-seu-próprio-conjunto-de-dados) | Usuários com conhecimentos básicos |
| [#2 Implementando seu próprio job do Glue](#cenário-2-implementando-seu-próprio-job-do-glue) | Usuários com conhecimentos intermediários |
- [Continue navegando nas documentações](#continue-navegando-nas-documentações)

___

Expand All @@ -59,7 +42,7 @@ Originalmente disponível na plataforma [Kaggle](https://www.kaggle.com/), o ref
<details>
<summary>🎲 Clique para visualizar o schema original dos dados</summary>
<div align="left">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/develop/docs/imgs/examples-cenario03-schema-br-ecommerce.png?raw=true" alt="br-ecommerce-schema">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/examples-cenario03-schema-br-ecommerce.png?raw=true" alt="br-ecommerce-schema">
</div>
</details>

Expand All @@ -71,6 +54,10 @@ Visando proporcionar uma maior simplicidade no exemplo de geração de SoT, apen
| `customers.csv` | Contempla dados cadastrais dos clientes que realizaram os pedidos online |
| `payments.csv` | Contempla dados dos pagamentos utilizados para quitação dos pedidos realizados |
| `reviews.csv` | Contempla dados das revisões, nota e comentários deixados por clientes para os pedidos realizados |
| `geolocation.csv` | Contempla dados demográficos de pedidos realizados online |
| `order_items.csv` | Traz uma visão de cada item presente em cada um dos pedidos |
| `products.csv` | Contempla uma visão categórica dos produtos/itens presentes nos pedidos |
| `sellers.csv` | Traz uma visão categóricas dos vendedores |

Assim, os conjuntos citados então são disponibilizados localmente em uma estrutura hierárquica de pastas que simula uma organização de dados em um ambiente Data Lake no formato `db/tbl/file`, sendo esta uma dinâmica **mandatória** para o sucesso de implantação de conjuntos próprios de dados.

Expand Down Expand Up @@ -118,7 +105,7 @@ Uma vez obtido e organizado o(s) novo(s) conjunto(s) de dado(s) a serem inserido
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/develop/docs/imgs/examples-cenario03-titanic-data-on-s3.PNG?raw=true" alt="titanic-data-on-s3">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/examples-cenario03-titanic-data-on-s3.PNG?raw=true" alt="titanic-data-on-s3">
</div>
</details>

Expand All @@ -127,7 +114,7 @@ Além disso, é possível também acessar o serviço Glue e, dentro do menu Data
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/develop/docs/imgs/examples-cenario03-titanic-data-on-data-catalog.PNG?raw=true" alt="titanic-data-on-data-catalog">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/examples-cenario03-titanic-data-on-data-catalog.PNG?raw=true" alt="titanic-data-on-data-catalog">
</div>
</details>

Expand All @@ -136,7 +123,7 @@ Ao selecionar a tabela no catálogo, será ainda possível perceber que todo o p
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/develop/docs/imgs/examples-cenario03-titanic-schema-on-catalog.PNG?raw=true" alt="titanic-schema-on-data-catalog">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/examples-cenario03-titanic-schema-on-catalog.PNG?raw=true" alt="titanic-schema-on-data-catalog">
</div>
</details>

Expand All @@ -145,7 +132,7 @@ Por fim, a validação final realizada envolve o acesso ao serviço Athena para
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/develop/docs/imgs/examples-cenario03-titanic-data-on-athena.PNG?raw=true" alt="titanic-data-on-athena">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/examples-cenario03-titanic-data-on-athena.PNG?raw=true" alt="titanic-data-on-athena">
</div>
</details>

Expand Down Expand Up @@ -263,7 +250,7 @@ Agora que o dicionário de mapeamento de leitura de dados está devidamente conf
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://raw.githubusercontent.com/ThiagoPanini/terraglue/develop/docs/imgs/terraglue-examples-titanic-data.png" alt="titanic-data-athena">
<br><img src="https://raw.githubusercontent.com/ThiagoPanini/terraglue/develop/docs/imgs/examples/terraglue-examples-titanic-data.png" alt="titanic-data-athena">
</div>
</details>

Expand Down Expand Up @@ -631,7 +618,7 @@ Considerando a demonstração fornecida, seria possível acessar o serviço Athe
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://raw.githubusercontent.com/ThiagoPanini/terraglue/develop/docs/imgs/terraglue-examples-titanic-sot-athena.png" alt="titanic-data-athena-sot">
<br><img src="https://raw.githubusercontent.com/ThiagoPanini/terraglue/develop/docs/imgs/examples/terraglue-examples-titanic-sot-athena.png" alt="titanic-data-athena-sot">
</div>
</details>

Expand All @@ -653,19 +640,18 @@ FROM tt3.tbsot_titanic LIMIT 5;
<details>
<summary>📷 Clique para visualizar a imagem</summary>
<div align="left">
<br><img src="https://raw.githubusercontent.com/ThiagoPanini/terraglue/develop/docs/imgs/terraglue-examples-titanic-sot-athena-query.png" alt="titanic-data-athena-sot-query">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/main/docs/imgs/examples/terraglue-examples-titanic-sot-athena-query.png?raw=true" alt="titanic-data-athena-sot-query">
</div>
</details>

E assim completamos o cenário de adaptação do script `main.py` para finalidades específicas de acordo com novos dados inseridos no processo!

___

Continue sua jornada no **terraglue** através das documentações!
## Continue navegando nas documentações

- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md)
- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md)
- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md)
- 👉 [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md) *Você está aqui!*
- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md)
- [2. Implantando e conhecendo a infraestrutura](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/INFRA.md)
- [3. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/APP.md)
- 👉 [4. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/EXAMPLES.md) *Você está aqui!*
- [5. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/docs/markdown/TESTS.md)
35 changes: 8 additions & 27 deletions GETTINGSTARTED.md → docs/markdown/GETTINGSTARTED.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,20 @@
*Este é um tutorial básico sobre como utilizar as funcionalidades do terraglue*
<div align="center">
<br><img src="https://github.com/ThiagoPanini/terraglue/blob/docs/visual-and-docs-refactor/docs/imgs/gettingstarted/01-header-gettingstarted.png?raw=true" alt="terraglue-logo">

<i>Este é um tutorial básico sobre como utilizar as funcionalidades do terraglue</i>
</div>


## Table of Contents
- [Table of Contents](#table-of-contents)
- [Antes de começar](#antes-de-começar)
- [Pré requisitos](#pré-requisitos)
- [Passo a passo resumido](#passo-a-passo-resumido)
- [Passo a passo detalhado](#passo-a-passo-detalhado)
- [Configurando credenciais AWS](#configurando-credenciais-aws)
- [Clonando o repositório](#clonando-o-repositório)
- [Instalação dos módulos Terraform](#instalação-dos-módulos-terraform)
- [Visualizando plano de implantação](#visualizando-plano-de-implantação)
- [Implantando recursos no ambiente AWS](#implantando-recursos-no-ambiente-aws)

## Antes de começar

> Antes de navegarmos pelos passos de instalação e uso do terraglue, sugerimos a leitura da documentação oficial na raíz do repositório através do arquivo [README.md](https://github.com/ThiagoPanini/terraglue). Para facilitar a localização e navegação, os links abaixo podem ajudar!
- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- 👉 [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) *Você está aqui!*
- [3. Infraestrutura provisionada](https://github.com/ThiagoPanini/terraglue/blob/main/INFRA.md)
- [4. Uma proposta de padronização de jobs Glue](https://github.com/ThiagoPanini/terraglue/blob/main/APP.md)
- [5. Exemplos práticos de utilização da solução](https://github.com/ThiagoPanini/terraglue/blob/main/EXAMPLES.md)
- [6. Testes unitários em jobs do Glue na AWS](https://github.com/ThiagoPanini/terraglue/blob/main/TESTS.md)

___

## Pré requisitos

Como informado no [README.md](https://github.com/ThiagoPanini/terraglue/tree/develop#pr%C3%A9-requisitos) do projeto, os pré requisitos de utilização do **terraglue** incluem:

- ☁️ [Conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) disponível para uso
- 🔑 [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html) à conta através das chaves `access_key_id` e `secret_access_key`
-[Terraform](https://www.terraform.io/) instalado (versão >=1.0)

Se a lista de requisitos acima foi cumprida, siga adiante para as próximas etapas de instalação e uso do projeto em seu ambiente de trabalho.
- [Continue navegando nas documentações](#continue-navegando-nas-documentações)

___

Expand Down Expand Up @@ -173,7 +154,7 @@ Após um determinado período, espera-se que uma mensagem de sucesso seja entreg

___

Continue sua jornada no **terraglue** através das documentações!
## Continue navegando nas documentações

- [1. Documentação principal do projeto](https://github.com/ThiagoPanini/terraglue/tree/main)
- 👉 [2. Instalação e primeiros passos](https://github.com/ThiagoPanini/terraglue/blob/main/GETTINGSTARTED.md) *Você está aqui!*
Expand Down
Loading

0 comments on commit fd474fc

Please sign in to comment.