2. Data Lake
Conforme definido pela AWS, um Data Lake (Lago de Dados) é um repositório centralizado que permite armazenar todos os seus dados estruturados e não estruturados em qualquer escala. A ideia de um Data Lake é poder armazenar os dados como estão, sem precisar primeiro estruturá-los e executar diferentes tipos de análise, desde painéis e visualizações até processamento de big data, análise em tempo real e machine learning para orientar melhores decisões.
2.1 Tipos de Dados
Os dados podem ser classificados em três tipos:
-
Não estruturados: são dados que não possuem uma estrutura bem definida e nem um padrão pré-estabelecido, conforme descrito por TreinaWeb. São dados que não podem ser representados em formato de tabela. Alguns exemplos deste tipo de dado são: arquivos de texto, imagem, vídeo, etc.
-
Semiestruturados: são dados que possuem algumas características definidas, sendo parcialmente estruturados, mas não se limitam a uma estrutura rígida, conforme definido por TreinaWeb. Nesses dados, existe uma definição das colunas, porém elas podem aparecer ou não. Alguns exemplos deste tipo de dado são: arquivos JSON, XML, etc.
-
Estruturados: são dados em que o schema é pré-estabelecido, ou seja, as colunas são bem definidas e estão sempre presentes. Alguns exemplos deste tipo de dado são: arquivos CSV, banco de dados, etc.
2.2 Data Lake vs Data Warehouse
Diferentemente de um Data Warehouse, que é um banco de dados otimizado para analisar dados relacionais provenientes de sistemas transacionais, com um Data Lake é possível armazenar os três tipos de dados: não estruturados, semiestruturados e estruturados. A ideia de um Data Lake é primeiro armazenar os dados, sem antes pensar em como os dados serão processados. Já em um Data Warehouse, é necessário ter o schema dos dados definidos antes de poder armazená-los. A tabela abaixo, extraída da AWS, realiza o comparativo entre Data Lake e Data Warehouse para seis características.
Características | Data warehouse | Data lake |
---|---|---|
Dados | Relacionais de sistemas transacionais, bancos de dados operacionais e aplicações de linha de negócios | Não relacionais e relacionais de dispositivos de IoT, sites, aplicações móveis, mídia social e aplicações corporativas |
Esquema | Definido antes da implementação do DW (esquema na gravação) | Gravado no momento da análise (esquema na leitura) |
Preço/performance | Resultados de consulta mais rápidos, usando armazenamento de maior custo | Resultados de consulta ficando mais rápidos, usando armazenamento de menor custo |
Qualidade dos dados |
Dados altamente selecionados, que representam a versão central da verdade | Quaisquer dados, selecionados ou não (ou seja, dados brutos) |
Usuários | Analistas de negócios | Cientistas de dados, desenvolvedores de dados e analistas de negócios (usando dados selecionados) |
Análises | Geração de relatórios em lote, BI e visualizações | Machine learning, análises preditivas, descoberta de dados e criação de perfis |
2.3 Camadas e Subcamadas
Um Data Lake possui uma ou mais camadas, onde cada camada indica o estado dos dados. Apesar de variar de empresa para empresa, uma abordagem muito utilizada é criar três camadas, onde a primeira camada armazena os dados brutos, a segunda camada armazena os dados tratados e a terceira camada armazena os dados para consumo. Essas camadas são criadas como objetos de serviços de armazenamento em nuvem. Os serviços de armazenamento mais utilizados para um Data Lake são: AWS Simple Storage Service (S3), Microsoft Azure Blob Storage e Google Cloud Storage.
No Planfy, é utilizado o AWS S3 para o armazenamento do Data Lake. No AWS S3, as camadas são chamadas de buckets. A seguir, detalha-se as três camadas do Data Lake do Planfy e suas respectivas regras de utilização:
2.3.1 planfy-datalake-raw
Camada (ou bucket) onde são armazenados os dados brutos vindos dos serviços de ingestão. Para mais informações em como ingerir dados na camada raw, veja a Seção 2.4.
Organização
- 1º nível: Schema ou Database (fonte dos dados).
- 2º nível: Tabela.
- 3º nível: Partição pela data de extração.
- 4º nível: Arquivos (os dados propriamente ditos).
Regras de utilização
- Os dados devem ser mantidos e preservados em seu formato original (JSON, CSV, etc.).
- Se o schema dos dados for conhecido, pode-se salvar em formato otimizado (ex: Parquet).
- Os dados devem ser particionados por data de extração preferencialmente (ex:
extracted_at=2023-07-07
). - Nunca sobrescrever os dados, apenas anexar.
Quem utiliza
- Engenheiros de Dados
- Jobs Spark
Exemplo
2.3.2 planfy-datalake-stage
Camada (ou bucket) onde são armazenados os dados resultantes de transformação dos dados brutos da camada planfy-datalake-raw
.
Organização
- 1º nível: Schema ou Database (fonte dos dados).
- 2º nível: Tabela.
- 3º nível: Partição pela coluna relevante.
- 4º nível: Arquivos (os dados propriamente ditos).
Regras de utilização
- Os dados devem ser essencialmente os mesmos dos dados brutos.
- Podem conter algumas informações a mais, como o timestamp do processamento.
- Os dados devem ser salvos em formato otimizado, como Parquet, ORC ou Avro, sendo preferível o formato Parquet, quando possível.
- No caso do Databricks, os dados devem ser salvos em formato Delta.
- Os dados devem ser particionados por uma coluna comumente utilizada em agrupamentos ou filtros, ou seja, uma coluna relevante.
- Uma coluna comumente utilizada é a data em que o registro foi criado.
Quem utiliza
- Cientistas de Dados
- Jobs Spark
- DBT
- AWS Athena
- etc.
Exemplo
2.3.3 planfy-datalake-analytics
Camada (ou bucket) onde são armazenados os dados que foram transformados e organizados, a partir dos dados da camada planfy-datalake-stage
, para usos específicos. São os dados acessados pelos stakeholders.
Organização
- 1º nível: Schema ou Database (caso de uso).
- 2º nível: Tabela.
- 3º nível: Partição pela coluna relevante.
- 4º nível: Arquivos (os dados propriamente ditos).
Regras de utilização
- Os dados devem ser salvos em formato otimizado, como Parquet, ORC ou Avro, sendo preferível o formato Parquet, quando possível.
- No caso do Databricks, os dados devem ser salvos em formato Delta.
- Os dados devem ser particionados por casos de uso específicos.
Quem utiliza
- Analistas de Dados
- Cientistas de Dados
- Data Warehouse
- Ferramentas de BI
- etc.
Exemplo
2.4 Ingestão de Dados
Em Fontes de Dados, viu-se que existem diversas fontes de dados da empresa em diversos lugares. Entretanto, se estes dados estiverem apenas na fonte, não há utilidade neles. Além disso, corre-se o risco de, em algum momento, esses dados não estarem mais disponíveis na fonte. Por isso, é necessário ter um sistema de ingestão desses dados brutos direto no Data Lake, mais especificamente na camada planfy-datalake-raw
, mesmo sem saber como estes dados serão utilizados.
Existem diversas ferramentas que são capazes de realizar a ingestão de dados em um Data Lake. A escolha da melhor ferramenta irá depender de cada caso, onde devem ser levados em conta alguns aspectos, como a fonte de dados, o destino dos dados, custos, complexidade, etc. Segue abaixo apenas algumas das várias ferramentas disponíveis para realizar a ingestão de dados:
- AWS Kinesis (ex: ingerir dados de streaming)
- AWS Lambda (ex: ingerir dados de uma API)
- AWS DMS (ex: ingerir dados de um banco de dados)
- AWS Glue
- Apache Ni-Fi
- Apache Airflow
- Apache Kafka
- Python
- ...
Pode-se ingerir os dados direto no Lakehouse também, porém não são todas as tecnologias atualmente que são capazes de inserir dados no formato do Lakehouse. Segue abaixo algumas que são capazes:
A seguir, podem ser vistos todos os sistemas de ingestão já desenvolvidos.
2.4.1 Migração do db-asset
para o Data Lake via AWS DMS
A ser feito.