de: estender a funcionalidade do DataHub deve ser o mais simples possível. Fazer alterações como estender uma entidade existente e adicionar uma nova entidade deve exigir esforço mínimo e deve ser bem abordado em documentação detalhada.</li></ul><h2 id="a72b">Integrações:</h2><p id="35cb">Como catálogo de dados, um dos seus principais pontos de adoção é sua quantidade de soluções prontas de ingestão. Com o DataHub é necessário apenas ter o Docker instalado, instalar uma biblioteca Python e fazer a execução de arquivo de configuração YML passando a categoria de ingestão, informações de acesso como usuário e senha, e o destino “sink”.</p><p id="df38">Relação de integrações:</p><ul><li>Kafka</li><li>MySQL</li><li>Microsoft SQL Server</li><li>Hive</li><li>PostgreSQL</li><li>Redshift</li><li>AWS SageMaker</li><li>Snowflake</li><li>SQL Profiles</li><li>Superset</li><li>Oracle</li><li>Feast</li><li>Google BigQuery</li><li>AWS Athena</li><li>AWS Glue</li><li>Druid</li><li>SQLAlchemy</li><li>MongoDB</li><li>LDAP</li><li>LookML</li><li>Looker dashboards</li><li>File</li><li>dbt</li><li>Google BigQuery</li><li>Kafka Connect</li></ul><p id="71e7">Não achou seu banco de dados ou fonte de dados, uma alternativa é utilizar SQLAlchemy para colher os metadados ou fazer a ingestão via API Rest ou diretamente no Kafka interno do DataHub.</p><p id="c6a4">Além de integração com banco de dados, APIs, Kafka, é possível conduzir a integração e buscar informações de modelos de inteligência artificial.</p><h2 id="b78a">Deploy:</h2><p id="4b43">Outra preocupação quando se trata de catálogo de dados é aonde e como será instalado? Sua autenticação? Backup e logs?</p><p id="e8b0">Uma preocupação pessoal é sempre adotar soluções que seja possível de serem utilizadas em diferentes ambientes, Clouds e o DataHub pode ser implantando localmente via imagem docker, ambiente kubernetes, AWS e GCP.</p><p id="c8c4">Sua autenticação pode ser integrada a JaaS Authentication, JaaS Authentication via React, Google Authentication e Okta Authentication. Os logs estão em diretórios que podem ser acessados remotamente e os dados estão salvos no banco de dados.</p><h2 id="d588">Demonstração local:</h2><figure id="190a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*jd2LRRSws9P1XVJd"><figcaption></figcaption></figure><p id="3d86">Esse é um exemplo de como realizar a instalação local de um PostgreSQL, criar uma tabela de exemplo, instalar o DataHub e fazer a ingestão do metadados do PostgreSQL no DataHub. Para realizar essa demostração foi necessário ter o Docker, Git e Python instalados.</p><p id="18e6"><b>Deploy PostgreSQL usando Docker-compose:</b></p><p id="25db">Crie o arquivo docker-compose.yml</p><div id="d1cb"><pre><span class="hljs-symbol">version:</span> <span class="hljs-string">'3'</span></pre></div><div id="0dec"><pre><span class="hljs-symbol">services:</span>
<span class="hljs-symbol"> postgres:</span>
<span class="hljs-symbol"> image:</span> postgres:<span class="hljs-number">13.1</span>
<span class="hljs-symbol"> healthcheck:</span>
<span class="hljs-symbol"> test:</span> [ <span class="hljs-string">"CMD"</span>, <span class="hljs-string">"pg_isready"</span>, <span class="hljs-string">"-q"</span>, <span class="hljs-string">"-d"</span>, <span class="hljs-string">"postgres"</span>, <span class="hljs-string">"-U"</span>, <span class="hljs-string">"root"</span> ]
<span class="hljs-symbol"> timeout:</span> <span class="hljs-number">45</span>s
<span class="hljs-symbol"> interval:</span> <span class="hljs-number">10</span>s
<span class="hljs-symbol"> retries:</span> <span class="hljs-number">10</span>
<span class="hljs-symbol"> restart:</span> always
<span class="hljs-symbol"> environment:</span>
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- APP_DB_USER=docker
- APP_DB_PASS=docker
- APP_DB_NAME=docker
<span class="hljs-symbol"> volumes:</span>
- ./db:/docker-entrypoint-initdb.d/
<span class="hljs-symbol"> ports:</span>
- <span class="hljs-number">5432</span>:<span class="hljs-number">5432</span></pre></div><p id="c44e">Execute o comando a seguir:</p><div id="8080"><pre><span class="hljs-attribute">docker-compose up</span></pre></div><p id="61c3">Usando alguma ferramenta de conexão a banco de dados como Dbeaver, acesse o PostgreSQL e crie a tabela a seguir:</p><div id="eeaa"><pre><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> COMPANY(
ID <span class="hljs-type">INT</span> <span class="hljs-keyword">PRIMARY KEY</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
<span class="hljs-type">NAME</span> <span class="hljs-type">TEXT</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
AGE <span class="hljs-type">INT</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
ADDRESS <span class="hljs-type">CHAR</span>(<span class="hljs-number">50</span>),
SALARY <span class="hljs-type">REAL</span>,
JOIN_DATE <span class="hljs-type">DATE</span>
);</pre></div><p id="c5fa"><b>Deploy do DataHub</b></p><p id="a9b5">Tendo o Python 3.6 instalado ou superior, execute os comandos abaixo no terminal:</p><div id="5dd8"><pre>python3 -m pip install <span class="hljs-params">--upgrade</span> pip wheel setuptools
python3 -m pip uninstall datahub acryl-datahub || <span class="hljs-literal">true</span>
python3 -m pip install <span class="hljs-params">--upgrade</span> acryl-datahubdatahub <span class="hljs-keyword">version</span></pre></div><p id="0e59">Instale a CLI do DataHub em seu terminal:</p><div id="2f77"><pre><span class="hljs-attribute">datahub docker quickstart</span></pre></div><p id="3ce3">Acesse <a href="http://localhost:9002/">http://localhost:9002</a>, seu usuário e senha serão “datahub”, sem as aspas.</p><figure id="232a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*zSqPo64Qck2Z0fWrz6mNcA.png"><figcaption></figcaption></figure><p id="c1f6">Temos nosso DataHub e o PostgreSQL executando:</p><figure id="f643"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*r5S_U9Wr41ZbEUpZRvPgpw.png"><figcaption></figcaption></figure><p id="09a5"><b>Ingestão do metadados PostgreSQL no DataHub.</b></p><p id="309b">Faça o clone do projeto do DataHub</p><div id="9b83"><pre>git <span class="hljs-keyword">clone</span> <span class="hljs-title">https</span>://github.com/linkedin/datahub.git</pre></div><p id="86e1">Navegue até a pasta do scripts de ingestão:</p><div id="bb18"><pre><span class="hljs-built_in">cd</span> datahub/metadata-ingestion/scripts</pre></div><p id="05d1">Crie o arquivo metadata_ingest_from_postgres.yaml com o seguinte conteúdo:</p><div id="b600"><pre><span class="hljs-symbol">
Options
source:</span>
<span class="hljs-symbol"> type:</span> postgres
<span class="hljs-symbol"> config:</span>
<span class="hljs-symbol"> username:</span> root
<span class="hljs-symbol"> password:</span> password
<span class="hljs-symbol"> host_port:</span> localhost:<span class="hljs-number">5432</span>
<span class="hljs-symbol"> database:</span> postgres
<span class="hljs-symbol"> database_alias:</span> postgrespublic
<span class="hljs-symbol"> include_views:</span> True
<span class="hljs-symbol">sink:</span>
<span class="hljs-symbol"> type:</span> <span class="hljs-string">"datahub-rest"</span>
<span class="hljs-symbol"> config:</span>
<span class="hljs-symbol"> server:</span> <span class="hljs-string">"http://localhost:8080"</span></pre></div><p id="7a70">Execute o comando abaixo:</p><div id="4d62"><pre>./datahub_docker.sh ingest -c ./metadata_ingest_from_postgres.yml</pre></div><p id="a215">A partir do comando acima todos os metadados serão ingeridos e estarão disponíveis para acesso:</p><figure id="7d7c"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*qzU8JyUmHQ3FAXokJmMNjg.png"><figcaption></figcaption></figure><figure id="5dc9"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*bCofkB6eOivnWN8Y9jbXFw.png"><figcaption></figcaption></figure><figure id="fe46"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*xioPGIqaBiKBKlQrmToN3g.png"><figcaption></figcaption></figure><p id="d169">Além dos metadados colhidos é possível colocar uma descrição e tags para o schemas, tabelas e suas colunas; descobrir seu dono “Ownership”, linhagem, principais queries, propriedades e adicionar links de documentações adicionais.</p><h2 id="f7d4">Conclusão:</h2><p id="2047">Estruturar o universo de dados inicialmente caóticos pode ser uma tarefa muito complexa e um primeiro passo será conduzir uma imersão e catalogação dos dados de modo a possibilitar uma reestruturação para um cenário onde haja uma melhor governança e qualidade das informações.</p><p id="8892">Uma visão de uma arquitetura de dados ideal:</p><figure id="b3eb"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*570UIb1ctbsdOviQ.png"><figcaption></figcaption></figure><p id="944c">O DataHub é uma poderosa solução para catálogo de dados que além de se integrar a diferentes bancos de dados, possibilita uma linhagem de dados e até mesmo uma catalogação de modelos de inteligência artificial. Contudo, essa solução não é mágica, é necessário acompanhamento e ingestão de dados como descrição dos campos, bem como a gerenciamento de acesso.</p><blockquote id="e8ff"><p>“Sem dados, você é apenas mais uma pessoa com opinião.”, W. Edwards Deming</p></blockquote><h2 id="b099">Referências:</h2><div id="c808" class="link-block">
<a href="https://medium.com/datahub-project">
<div>
<div>
<h2>DataHub Project</h2>
<div><h3>LinkedIn DataHub is an open source data discovery and metadata platform.</h3></div>
<div><p>medium.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*2dzNv2pagCmn5MW2-xLAMQ.png)"></div>
</div>
</div>
</a>
</div><div id="9f94" class="link-block">
<a href="https://martinfowler.com/articles/data-mesh-principles.html">
<div>
<div>
<h2>Data Mesh Principles and Logical Architecture</h2>
<div><h3>Our aspiration to augment and improve every aspect of business and life with data, demands a paradigm shift in how we…</h3></div>
<div><p>martinfowler.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/0*TT_qfFB7EsYcyfr1)"></div>
</div>
</div>
</a>
</div><div id="a6c2" class="link-block">
<a href="https://readmedium.com/data-in-context-lineage-explorer-in-datahub-a53a9a476dc4">
<div>
<div>
<h2>Data in Context: Lineage Explorer in DataHub</h2>
<div><h3>DataHub aims to empower users to discover, trust and take action on data in their organizations. Understanding where a…</h3></div>
<div><p>medium.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*aQYBL8d5iBZs6vrTbOUTmQ.png)"></div>
</div>
</div>
</a>
</div><div id="3aaf" class="link-block">
<a href="https://readmedium.com/the-5-data-store-patterns-data-lakes-data-hubs-data-virtualization-data-federation-data-27fd75486e2c">
<div>
<div>
<h2>The 5 Data Store Patterns — Data Lakes, Data Hubs, Data Virtualization/Data Federation, Data…</h2>
<div><h3>How to choose the right one, and why you may need more than one</h3></div>
<div><p>medium.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*xA6-DUKgzxCYq6Ddyd5brw.png)"></div>
</div>
</div>
</a>
</div><div id="6bcb" class="link-block">
<a href="https://github.com/linkedin/datahub">
<div>
<div>
<h2>GitHub - linkedin/datahub: A Metadata Platform for the Modern Data Stack</h2>
<div><h3>📣 Next DataHub town hall meeting on Jul 23rd, 9am-10am PDT ( convert to your local time) DataHub is an open-source…</h3></div>
<div><p>github.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/0*d4zca9seVCZ8dPUj)"></div>
</div>
</div>
</a>
</div><div id="56bc" class="link-block">
<a href="https://engineering.linkedin.com/blog/2020/datahub-popular-metadata-architectures-explained">
<div>
<div>
<h2>DataHub: Popular metadata architectures explained</h2>
<div><h3>When I started my journey at LinkedIn ten years ago, the company was beginning to experience extreme growth in the…</h3></div>
<div><p>engineering.linkedin.com</p></div>
</div>
<div>
<div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/0*TdphCncqDvlsoey3)"></div>
</div>
</div>
</a>
</div><p id="ef5b"><i>#Obrigado por sua leitura, compartilhe essa publicação, por favor! :)</i></p></article></body>
Catálogo de Dados do Zero Até Implantação e Evolução!!!
Oque é? Alternativas de código aberto? Como implementar? Desafios e muito mais!
Essa publicação se destina a dar uma luz para a situação que “algumas” instituições que começaram a entender e valorizar seus dados como sendo um produto interno que impulsiona, qualifica e distingui seus produtos em relação ao mercado a curto prazo. Essas mesmas empresas que infelizmente, internamente, cada área de negócio construiu sua arquitetura muitas das vezes sem um padrão, sem uma qualidade ou saneamento básico e fazendo a distribuição de maneira arcaica e lenta, cheias de gambiaras, uma verdadeira favela de dados.
Nessa situação caótica é muito comum que as pessoas do negócio estejam de certa forma alienadas, colocando a culpa de situações de lentidão em um determinado “software” ou solução, ou tenham a “certeza” que determinada informação não exista em toda essa zona.
#Como mudar essa situação? Como evitar o “Shadow IT” com dados? Impedir o “tráfico” de informações?
Uma alternativa é entender o que já existe, organizar, dicionarizar e catalogar as bases disponíveis, de modo a distribuir e criar uma oportunidade de fomentar uma cultura organizacional orientada a dados, ou seja, criar um Hub de dados.
Esses são alguns dos casos, segundo os engenheiros do LinkedIn de uso de um catálogo de dados e uma amostra dos metadados de que eles precisam:
Pesquisa e descoberta: esquemas de dados, campos, tags, informações de uso.
Controle de acesso: grupos de controle de acesso, usuários, políticas.
Linhagem de dados: execuções de pipeline, consultas, registros de API, esquemas de API.
Conformidade: taxonomia de privacidade de dados / categorias de anotação de conformidade.
Gerenciamento de dados: configuração da fonte de dados, configuração de ingestão, configuração de retenção, políticas de eliminação de dados (por exemplo, para GDPR “Right To Be Forgotten”), políticas de exportação de dados (por exemplo, para GDPR “Right To Access”).
Explicação de AI, reprodutibilidade: definição de recurso, definição de modelo, execuções de execução de treinamento, declaração de problema.
Operações de dados: execuções de pipeline, partições de dados processadas, estatísticas de dados.
Qualidade de dados: definições de regras de qualidade de dados, resultados de execução de regras, estatísticas de dados.
Observando a necessidade crescente do mercado várias comunidades e empresas pelo mundo desenvolverão várias soluções como, por exemplo, o Dataportal da Airbnb, Metacat da Netflix, Databook da Uber, DataHub do LinkedIn, Amundsen do Lyft, Lexikon do Spotify e o Data Catalog da Qlik.
Dentro dessas e de muitas outras, as que tem mais se destacado principalmente nas comunidades e empresas que adotam e utilizam de soluções de código aberto são o Amundsen do Lyft e DataHub do LinkedIn.
O Amundsen por ser uma solução que foi lançada antes de o DataHub e de ter sido incorporado LF AI Foundation, ganhou uma grande comunidade e muitas empresas a utilizam em seus ambientes produtivos.
Olhando para o DataHub, podemos notar que o histórico de sucesso de projetos de código aberto do LinkedIn se repetindo como foi o caso do Kafka. Já nos seus primeiros meses o projeto, ganhou uma grande comunidade e está sendo adotado por muitas empresas e até instituições financeiras que o utilizam e contribuem ativamente.
#Por experiência, pela quantidade integrações e pela documentação muito rica, prefiro o DataHub e você?
DataHub :)
é uma plataforma de metadados de código aberto para a stack de dados moderna.
Arquitetura
Sua arquitetura pode ser dividida em ingestão, Serving e FrontEnd:
Arquitetura de Ingestão:
Com um sistema de ingestão em Python que se conetar em diferentes fontes para extrair metadados enviados via HTTP ou Kafka para uma camada de armazenamento, essas pipelines podem ser integradas a um Airflow para uma ingestão programada ou uma linhagem de captura.
Arquitetura de “Serving”:
Os metadados são persistidos em um armazenamento de documentos (pode ser um RDBMS como MySQL, PostgreSQL ou um armazenamento de chave-valor como Couchbase, etc.).
O DataHub possui Metadata Commit Log Stream (MAE), serviço que possibilita verificar se houver alteração de metadados e iniciar uma reação de atualização em tempo real a modificação que aconteceu.
Arquitetura de FrontEnd: React App + Graphql + Imagens:
Seu FrontEnd é construindo utilizando React visando possibilitar:
Configurabilidade: a experiência do cliente deve ser configurável, de modo que as organizações de implantação possam adaptar certos aspectos às suas necessidades. Isso inclui a possibilidade de configuração de tema / estilo, exibição e ocultação de funcionalidades específicas, personalização de cópias e logotipos, etc.
Extensibilidade: estender a funcionalidade do DataHub deve ser o mais simples possível. Fazer alterações como estender uma entidade existente e adicionar uma nova entidade deve exigir esforço mínimo e deve ser bem abordado em documentação detalhada.
Integrações:
Como catálogo de dados, um dos seus principais pontos de adoção é sua quantidade de soluções prontas de ingestão. Com o DataHub é necessário apenas ter o Docker instalado, instalar uma biblioteca Python e fazer a execução de arquivo de configuração YML passando a categoria de ingestão, informações de acesso como usuário e senha, e o destino “sink”.
Relação de integrações:
Kafka
MySQL
Microsoft SQL Server
Hive
PostgreSQL
Redshift
AWS SageMaker
Snowflake
SQL Profiles
Superset
Oracle
Feast
Google BigQuery
AWS Athena
AWS Glue
Druid
SQLAlchemy
MongoDB
LDAP
LookML
Looker dashboards
File
dbt
Google BigQuery
Kafka Connect
Não achou seu banco de dados ou fonte de dados, uma alternativa é utilizar SQLAlchemy para colher os metadados ou fazer a ingestão via API Rest ou diretamente no Kafka interno do DataHub.
Além de integração com banco de dados, APIs, Kafka, é possível conduzir a integração e buscar informações de modelos de inteligência artificial.
Deploy:
Outra preocupação quando se trata de catálogo de dados é aonde e como será instalado? Sua autenticação? Backup e logs?
Uma preocupação pessoal é sempre adotar soluções que seja possível de serem utilizadas em diferentes ambientes, Clouds e o DataHub pode ser implantando localmente via imagem docker, ambiente kubernetes, AWS e GCP.
Sua autenticação pode ser integrada a JaaS Authentication, JaaS Authentication via React, Google Authentication e Okta Authentication. Os logs estão em diretórios que podem ser acessados remotamente e os dados estão salvos no banco de dados.
Demonstração local:
Esse é um exemplo de como realizar a instalação local de um PostgreSQL, criar uma tabela de exemplo, instalar o DataHub e fazer a ingestão do metadados do PostgreSQL no DataHub. Para realizar essa demostração foi necessário ter o Docker, Git e Python instalados.
A partir do comando acima todos os metadados serão ingeridos e estarão disponíveis para acesso:
Além dos metadados colhidos é possível colocar uma descrição e tags para o schemas, tabelas e suas colunas; descobrir seu dono “Ownership”, linhagem, principais queries, propriedades e adicionar links de documentações adicionais.
Conclusão:
Estruturar o universo de dados inicialmente caóticos pode ser uma tarefa muito complexa e um primeiro passo será conduzir uma imersão e catalogação dos dados de modo a possibilitar uma reestruturação para um cenário onde haja uma melhor governança e qualidade das informações.
Uma visão de uma arquitetura de dados ideal:
O DataHub é uma poderosa solução para catálogo de dados que além de se integrar a diferentes bancos de dados, possibilita uma linhagem de dados e até mesmo uma catalogação de modelos de inteligência artificial. Contudo, essa solução não é mágica, é necessário acompanhamento e ingestão de dados como descrição dos campos, bem como a gerenciamento de acesso.
“Sem dados, você é apenas mais uma pessoa com opinião.”, W. Edwards Deming