Catalogação e Descoberta de Dados com Amundsen

Organizar, controlar e democratizar o acesso aos dados dentro de uma organização é um dos desafios do Big Data. O Google dos Dados, mais conhecido como Amundsen é uma ferramenta open source que pode apoiar na resolução desses problemas.

Cícero Moura
Data Hackers
10 min readFeb 3, 2022

--

No projeto deste artigo foi utilizado o Amundsen, Terraform, AWS e Airflow, o código fonte pode ser acessado clicando aqui.

O principal propósito de um Data Lake é ter um repositório central de dados dentro de uma organização, assim o negócio extrair o maior valor e tomar decisões orientadas a dados (Data Driven). Porém, à medida que o ambiente de dados cresce outros problemas começam aparecer e um deles é a falta de governança dos dados.

Mas o que é Governança?

Segundo o DMBOK é o:

exercício de autoridade, controle, planejamento, monitoramento, disponibilidade, segurança e execução dos ativos de dados e seu respectivo consumo.

A governança de dados é um conceito para gerenciamento, onde é possível definir medidas e métricas sobre o controle de uma organização em relação aos seus dados. É uma área que engloba pessoas, processos e ferramentas que são necessárias para criar um tratamento consistente e adequado dos dados de uma empresa.

A área de governança dentro de TI por si só já é bastante ampla e no mundo dos dados temos áreas e profissionais especializados buscando a organização quanto a estrutura que coordena, orienta e define regras para criação, reuso e consumo dos dados.

Áreas da Governança de Dados

Ainda segundo o DMBOK, a governança de dados é composta por diversas sub áreas, conforme a imagem abaixo:

Todas essas áreas são importantes para definir a maturidade de uma organização quanto aos seus processos de dados. Além disso, cada uma dessas áreas possuem tecnologias e ferramentas com funcionalidades específicas que auxiliam na manutenção desse ambiente de governança dos dados.

Para este artigo iremos nos concentrar na área de metadados, que envolve a catalogação e descoberta de dados. Pensando nesses tópicos uma ferramenta bastante útil é o Amundsen.

Amundsen: Catalogação e Descoberta

O Amundsen é uma ferramenta para catalogação e descoberta de dados que possui uma interface de usuário limpa e intuitiva, tendo como foco principal uma caixa de busca para pesquisas e explorações de metadados.

Conforme o site oficial o Amundsen é:

um mecanismo de descoberta de dados e metadados para melhorar a produtividade de analistas de dados, cientistas de dados e engenheiros ao interagir com dados. Ele faz isso hoje indexando recursos de dados (tabelas, painéis, fluxos, etc.). Pense nisso como uma pesquisa de dados no Google. O projeto tem o nome do explorador norueguês Roald Amundsen, a primeira pessoa a descobrir o Pólo Sul.

O Amundsen é open source, escrito nas linguagens Python e JavaScript. Possui uma interface gráfica intuitiva e seus serviços são divididos em módulos, onde os principais são:

  • amundsenfrontendlibrary: serviço de front-end do Amundsen, o módulo é escrito em Flask para a API e a UI (User Interface) em ReactJS.
  • amundsensearchlibrary: serviço de pesquisa dos metadados, se utiliza do ElasticSearch como back-end, assim é usado para potencializar as pesquisas de metadados feitas no front-end.
  • amundsenmetadatalibrary: serviço de metadados, que utiliza o banco em grafo Neo4j ou Apache Atlas como camada de persistência dos dados, armazena os metadados que são extraídos da origem.
  • amundsendatabuilder: biblioteca para ingestão de dados dentro do Amundsen, realiza a construção dos grafos de metadados (Neo4j ou Atlas) e índices de pesquisa (ElasticSearch). Os usuários podem carregar os dados por um script Python ou utilizando uma DAG no Airflow.

O principal objetivo do Amundsen é reunir metadados de diversas fontes e centralizar em sua aplicação, podendo assim utilizar toda a sua estrutura de indexação e pesquisa para facilitar a descoberta dos dados existentes dentro do ambiente de Big Data.

Um grande benefício é que ele possui várias bibliotecas prontas para extração dos metadados (extractors) e em seu repositório possui diversos exemplos práticos para diversas origens de dados, como o PostgreSQL, BigQuery, Redshift, Athena e outros.

Catalogação com Amundsen na prática

Para colocar todos os conceitos que discutimos até o momento em prática, iremos extrair os metadados de duas fontes, sendo elas o AWS Athena e o PostgreSQL, catalogando os dados no Amundsen, tudo isso sendo orquestrado pelo Airflow.

Porém antes de colocar a mão na massa, vamos analisar um pouco mais da nossa solução e dos dados envolvidos neste exemplo.

Em relação aos dados de origem como Postgres, temos um banco de dados de vendas de produtos, onde iremos extrair os metadados das tabelas produtos e item_venda.

No Athena os dados são relacionados a filmes, onde as tabelas extraídas serão movies, ratings. links e tags.

Depois de disponibilizar os dados no Amundsen, poderemos realizar pesquisas em seu catálogo, descobrindo quais datasets (conjunto de dados) existem no nosso ambiente, quais campos existem nesses datasets, descrições sobre os dados e seus campos e até quem é o responsável de negócio por eles.

A dinâmica é a seguinte, assim que acessar o Amundsen ele possui uma tela parecida com a do Google, onde podemos começar a digitar sobre algo e receber o retorno se temos algum dado relacionado a essa pesquisa.

Considerando que os dados já estão catalogados no Amundsen, o exemplo a seguir realiza uma pesquisa com a palavra chave movies e temos os seguintes resultados:

Ao clicar no dataset desejado podemos visualizar as informações sobre os dados e até editar as descrições informativas, além de adicionar tags que ajudam a encontrar os dados posteriormente.

Também é possível adicionar datasets como favoritos para um acesso mais rápido pela interface gráfica posteriormente:

O Amundsen ainda possui uma pesquisa avançada, podendo aplicar diferentes filtros para encontrar os dados desejados. Alguns filtros são as origens de dados (source), colunas (column), tags e outros.

Abaixo temos uma consulta realizada para encontrar todos os datasets com source igual athena.

A seguir o resultado da pesquisa que tem source igual a postgres e column igual a preço:

Agora que conseguimos analisar o valor que o Amundsen pode trazer para o ambiente de dados relacionado a catalogação e descoberta, iremos para a parte prática e assim chegar nesse resultado apresentado.

Arquitetura e implementação

Para exemplificar o nosso case prático, vamos considerar o seguinte desenho de arquitetura para implementação.

Basicamente temos os seguintes passos em nossa arquitetura:

  • Origem dos metadados: como mencionado, a origem da nossa extração de metadados serão o Athena e o Postgres;
  • Orquestração das extrações: a parte de orquestração dos jobs que extraem os dados e disponibilizam no Amundsen serão realizadas pelo Airflow;
  • Armazenamento e pesquisa dos dados: por último temos os dados sendo gravados nos sistemas de armazenamento e pesquisa do Amundsen, que são o Neo4j e ElasticSearch consecutivamente.

Tendo em mente a solução que vamos adotar para a catalogação dos dados neste artigo, o desenvolvimento será dividido em 4 etapas, que serão descritas em detalhes a seguir.

  1. Execução do Amundsen

A execução do Amundsen é baseada em Docker e Docker Compose podendo ser feita de três formas:

  • Execução local: uma instalação com configurações mais simples, com foco em testes locais utilizando o Neo4j e ElasticSearch.
  • Execução de produção: uma instalação com todas as configurações necessárias para um melhor desempenho da aplicação, utilizando o Neo4j e ElasticSearch.
  • Execução com Atlas: uma instalação com todas as configurações necessárias para um melhor desempenho da aplicação, utilizando o Apache Atlas e ElasticSearch.

Neste artigo iremos utilizar a execução local, assim basta os dois comandos abaixo, onde o primeiro é para baixar o repositório e o segundo dentro da pasta da aplicação, com o Docker Compose, executar todas as aplicações necessárias:

$ git clone — recursive git@github.com:amundsen-io/amundsen.git

$ docker-compose -f docker-amundsen-local.yml up -d

Caso você queira executar o Amundsen em um ambiente baseado na AWS EC2 com Terraform, conforme o desenho da arquitetura apresentado, basta acessar o repositório do gitlhub deste artigo, lá contém todas as informações necessárias.

2. Código para extração dos metadados do Postgres

A primeira etapa que precisamos realizar é a extração dos metadados do Postgres, para isso iremos utilizar as funcionalidades oferecidas pela biblioteca do amundsen-databuilder.

O trecho de código a seguir faz a parte de extração dos metadados das bases e tabelas configuradas na conexão do Postgres, salva os dados em dois arquivos no caminho definido de forma temporário (tmp_folder) e por fim salva-os no Neo4j.

Os dois arquivos mencionados são um em formato JSON que contém as informações que serão carregadas no ElasticSearch e o outro CSV que carrega os dados para o Neo4j.

O código a seguir faz a extração dos dois arquivo e salva o CSV no Neo4j:

Como o código anterior salva os dados apenas no Neo4j, precisamos salvar os dados do arquivo criado anteriormente no ElasticSearch. O código a seguir tem uma lógica muito parecida com o anterior, e utilizando o amundsen-databuilder salva o arquivo temporário search_data.json no ElasticSearch.

Com os dois passos necessários para disponibilizar os metadados do Postgres no Amundsen prontos, precisamos de algo que execute esse código, agora entra o Airflow em cena.

O código abaixo mostra a criação de uma DAG, onde as duas funções criadas anteriormente são executadas, primeiro para extrair os dados e salvar no Neo4j e depois para salvar no ElasticSearch.

Abaixo podemos visualizar a imagem da DAG na interface do Airflow, logo após sua execução.

Depois disso os dados já estarão disponíveis para serem consultados na UI do Amundsen, realizando uma pesquisa por item de vendas que são uma das tabelas extraídas, podemos analisar o resultado na imagem a seguir:

O código completo deste exemplo pode ser encontrado neste link.

3. Código para extração dos metadados do Athena

Para complementar o nosso exemplo, iremos agora extrair os dados do Athena e disponibilizá-los no Amundsen.

A lógica sempre segue a mesma, o que muda são apenas as bibliotecas e configurações de drivers relacionados a origem dos dados.

A seguir temos o código configurado para extrair os dados no Athena, criar os arquivos temporários com formatos JSON e CSV e logo após salvar os dados no Neo4j.

O código abaixo salva os dados extraídos do Athena no ElasticSearch:

A DAG no Airflow para orquestrar a extração dos metadados do Athena e disponibilizá-los no Amundsen pode ser conferida logo a seguir:

Na interface do Airflow termos o seguinte resultado após a primeira execução da DAG:

Tendo os dados extraídos, podemos realizar as pesquisas no Amundsen conforme a imagem a seguir:

O código completo deste exemplo pode ser encontrado neste link.

4. Orquestração das extrações no Airflow

Depois de realizar a criação de toda a lógica para extrair os dados do Athena e Postgres inclusive as DAGs do Airlfow, temos duas DAGs sendo orquestradas neste momento, conforme a imagem abaixo:

A grande vantagem é que podemos agendar (scheduler) as extrações pelo Airflow e manter o nosso catálogo de dados sempre atualizado. Outra solução é adicionar a atualização do catálogo de dados ao final de outras pipelines, o que é altamente recomendado, assim os catálogos são sempre atualizados assim que uma nova extração de Big Data for concluída com sucesso.

Outro ponto importante é que a biblioteca do amundsen-databuilder faz sempre as extrações completas (full load) e depois realiza a atualização dos metadados no Neo4j e ElasticSearch sobrescrevendo os dados antigos.

Ainda uma possível melhoria para essa forma de extração é criar Jobs mais genéricos, como a lógica do Amundsen se repete para todas as fontes de dados, mudando apenas referências de configurações e drivers de conexão, é possível criar funções que são reaproveitadas em todas as extrações, apenas mudando suas configurações.

Conclusão

O Amundsen é uma excelente ferramenta para o problema que se propõe em resolver, que é a parte de catalogação e descoberta dos dados, com sua interface gráfica amigável auxilia a utilização por parte da equipe de dados. Além de ser gratuita, tem um roadmap de novas funcionalidades promissor, assim é excelente principalmente para equipes que estão começando ou melhorando a área de governança de dados.

Para a utilização da ferramenta pela área de negócio ainda existem algumas barreiras, como a linguagem mais técnica para a utilização da pesquisa. Porém nada que um treinamento não auxilie na resolução desse problema, pois a disseminação de conhecimento dentro da organização também é um dos pilares da democratização de dados.

Pensando em amadurecimento do ambiente de dados, podemos pensar em ferramentas e até plataformas de dados (Data Platform) que resolvem melhor esse e outros problemas em conjunto, ainda aplicando o conceito de Data Catalog 3.0, onde o foco é principalmente na colaboração. Alguns exemplos são: Attacama, Atlan e Dadosfera.

Referências

https://medium.com/ensina-ai/como-a-governan%C3%A7a-de-dados-podem-ajudar-a-democratiza%C3%A7%C3%A3o-dos-dados-53174e847ea7

https://medium.com/r/?url=https%3A%2F%2Ftowardsdatascience.com%2Fdata-governance-impact-on-24cb8e29f281

https://towardsdatascience.com/data-catalog-3-0-modern-metadata-for-the-modern-data-stack-ec621f593dcf

--

--

Cícero Moura
Data Hackers

Arquiteto de Dados, pós-graduado em Big Data e Machine Learning. Palestrante em Big Data. Também sou AWS Community Builder e AWS Community Leader.