Doc Datalake Format Explorer
Descrição
O projeto consiste em coletar dados de uma API do Spotify, transformar os dados em diferentes formatos e armazenar em um bucket na AWS.
O objetivo final é fazer uma análise sobre os 3 tipos de arquivo gerado, CSV, Parquet e JSON, e verificar qual o melhor formato para armazenar os dados.
A análise final é salva em um arquivo do tipo LOG localmente
Fluxo
flowchart LR
subgraph pipeline[Pipeline]
A[Manager Spotify: Coleta de Dados] -->|Configura API Spotify| B(Handler HTTPX: Realizada Chamada async)
B[Handler HTTPX: Realizada Chamada async] -->|Extrai dados| C(Manager Pandas: Converte Formatos)
F[Pipeline: Analise] --> |Gera um analise.LOG| D2[Local]
C -->|Converte p/ CSV| D[Load: Salva no Bucket]
C -->|Converte p/ Parquet| D[Manager AWS: Salva no Bucket]
C -->|Converte p/ JSON| D[Manager AWS: Salva no Bucket]
D -->|Salva como CSV| E1[Bucket AWS]
D -->|Salva como Parquet| E1[Bucket AWS]
D -->|Salva como JSON| E1[Bucket AWS]
end
Módulo Handler HTTP
Esse módulo foi criado depois para "desempacotar" o httpx/requests da aplicação, assim, caso seja necessário trocar a biblioteca de requisições, basta alterar o módulo.
Classe HTTPRequest
Bases: BaseModel
É uma classe que representa uma solicitação HTTP genérica.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
url |
str
|
A URL da solicitação. |
required |
method |
str
|
O método HTTP a ser usado (padrão é "GET"). |
required |
headers |
dict
|
Um dicionário de cabeçalhos HTTP personalizados. |
required |
params |
dict
|
Um dicionário de parâmetros de consulta. |
required |
data |
dict
|
Um dicionário de dados a serem enviados na solicitação. |
required |
Source code in app/ETL/handler_http.py
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
Faz uma solicitação HTTP genérica.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
http_request |
HTTPRequest
|
Um objeto HTTPRequest contendo os detalhes da solicitação. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
dict |
dict
|
A resposta JSON da solicitação HTTP. |
Source code in app/ETL/handler_http.py
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |
Módulos do manager_spotify
Esse módulo foi criado para encapsular as chamadas a API do Spotify, assim, caso seja necessário trocar o dominio, basta alterar o módulo.
Obtém o access token do Spotify.
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Access token. |
Source code in app/ETL/manager_spotify.py
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
Procura por um artista no Spotify e retorna o ID do primeiro resultado.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name |
str
|
Nome do artista. |
required |
token |
str
|
Access token. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
ID do artista. |
Source code in app/ETL/manager_spotify.py
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |
Retorna um objeto do tipo ArtistDetails
Bases: BaseModel
Modelo para os detalhes de um artista.
Source code in app/models/spotify_models.py
34 35 36 37 38 39 40 41 | |
Obtém os álbuns de um artista.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
artist_id |
str
|
ID do artista. |
required |
token |
str
|
Access token. |
required |
Returns:
| Type | Description |
|---|---|
List[AlbumDetails]
|
List[AlbumDetails]: Lista de objetos AlbumDetails. |
Source code in app/ETL/manager_spotify.py
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | |
Retorna um objeto do tipo TrackDetails
Bases: BaseModel
Modelo para os detalhes de uma faixa.
Source code in app/models/spotify_models.py
10 11 12 13 14 15 16 17 18 19 | |
Obtém as músicas de um álbum.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
album_id |
str
|
ID do álbum. |
required |
token |
str
|
Access token. |
required |
Returns:
| Type | Description |
|---|---|
List[TrackDetails]
|
List[TrackDetails]: Lista de objetos TrackDetails. |
Source code in app/ETL/manager_spotify.py
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | |
Retorna um objeto do tipo AlbumDetails
Bases: BaseModel
Modelo para os detalhes de um álbum.
Source code in app/models/spotify_models.py
22 23 24 25 26 27 28 29 30 31 | |
Obtém todos os detalhes de um artista.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
artist_name |
str
|
Nome do artista. |
required |
Returns:
| Type | Description |
|---|---|
List[CompleteArtistDetails]
|
List[CompleteArtistDetails]: Lista de objetos CompleteArtistDetails. |
Source code in app/ETL/manager_spotify.py
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | |
Retorna um objeto do tipo CompleteArtistDetails
Bases: BaseModel
Modelo para os detalhes completos de um artista.
Source code in app/models/spotify_models.py
44 45 46 47 48 49 50 51 52 53 54 55 | |
Módulos do manager_polars
Esse módulo foi criado para encapsular as chamadas a API do Pandas e Polars, assim, caso seja necessário trocar a biblioteca de manipulação de dados, basta alterar o módulo.
Salva os dados em diferentes formatos.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data |
List[CompleteArtistDetails]
|
Lista de objetos CompleteArtistDetails. |
required |
artist_name |
str
|
Nome do artista. |
required |
Source code in app/ETL/manager_polars.py
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
Módulos do manager_aws
Esse módulo foi criado para encapsular as chamadas a API do AWS, assim, caso seja necessário trocar o provedor de armazenamento, basta alterar o módulo.
Cria um bucket no S3.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bucket_name |
str
|
Nome do bucket. |
required |
Source code in app/ETL/manager_aws.py
11 12 13 14 15 16 17 18 19 20 21 22 | |
Faz upload de um arquivo para o S3.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_name |
str
|
Nome do arquivo. |
required |
bucket_name |
str
|
Nome do bucket. |
required |
Source code in app/ETL/manager_aws.py
25 26 27 28 29 30 31 32 33 34 35 36 37 | |
Módulos de análise
Esse módulo foi criado para fazer a análise final dos tipos de arquivo
Analisa e compara o tamanho dos arquivos gerados em diferentes formatos. Recomenda o formato com o menor volume total.
Source code in app/pipeline.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |