Muitos de nós fizemos alterações nos dados com base em requisitos que evoluem posteriormente. Quando percebemos isso, torna-se impossível reverter. A mudança não é apenas uma constante; é uma parte essencial do gerenciamento de dados que exige uma abordagem sofisticada. Entre na funcionalidade semelhante ao Git do catálogo de dados Nessie do Dremio.
Assim como o Git se tornou fundamental para o desenvolvimento de software, os engenheiros de dados precisam de ferramentas semelhantes para trabalhar em paralelo, comparar versões de dados, promover alterações na produção e reverter dados quando necessário. Nessie fornece aos engenheiros de dados um sistema de controle de versão semelhante ao Git para gerenciar versões de dados, ramificações, mesclagens e confirmações. Isso pode ser muito útil quando vários engenheiros de dados estão trabalhando e transformando dados ao mesmo tempo. Nessie permite que cada engenheiro trabalhe em filiais separadas, mantendo uma única fonte de verdade na forma de filial principal. Essa funcionalidade capacita as equipes de engenharia de dados a manter a qualidade dos dados de forma colaborativa diante de mudanças implacáveis.
Este artigo fornece um guia passo a passo que demonstra como Nessie, Dremio e MinIO trabalham juntos para melhorar a qualidade dos dados e a colaboração em seus fluxos de trabalho de engenharia de dados. Quer você seja um engenheiro de dados, um engenheiro de ML ou apenas um entusiasta moderno de data lake, este blog fornece o conhecimento e as ferramentas necessárias para aprimorar efetivamente suas práticas de controle de versão de dados.
Nessie permite cargas de trabalho semelhantes ao Git que permitem testar, desenvolver e enviar para produção. Vamos analisar alguns conceitos-chave:
Branches: Assim como no Git, os branchs no Nessie permitem que você trabalhe em diferentes tarefas de engenharia de dados simultaneamente. Por exemplo, você pode ter uma ramificação para desenvolvimento de recursos, limpeza e transformação de dados. Cada filial pode ter seu próprio conjunto de alterações de dados.
Commits: No Nessie, um commit representa um instantâneo dos dados em um momento específico. Ao fazer alterações em seus dados, você cria um novo commit, que registra essas alterações. Os commits estão vinculados a um branch específico. Quando você precisa reverter seus dados para um estado estável ou em bom estado, o Nessie facilita a seleção de um commit específico e a reversão para essa versão de dados. Isso garante qualidade e consistência dos dados.
Mesclar : Nessie permite mesclar as alterações de um ramo para outro. Isso é semelhante a mesclar alterações de código no Git. Quando você mescla uma ramificação, as alterações de dados feitas nessa ramificação tornam-se parte da ramificação de destino.
Dremio é um mecanismo de análise distribuída que opera como uma plataforma de código aberto, oferecendo uma interface intuitiva de autoatendimento para exploração, transformação e trabalho colaborativo de dados. Seu design é baseado em
Já exploramos como implantar o Dremio com Kubernetes e também como
MinIO é armazenamento de objetos de alto desempenho. Famosa pela sua excepcional
Você precisará do
Esta parte do tutorial é baseada no Dremio
Para começar, abra um terminal e navegue até a pasta onde você clonou/ baixou o repositório e execute o comando abaixo para iniciar o Dremio.
docker-compose up dremio
Aguarde alguns instantes e navegue até http://localhost:9047
para acessar o Dremio. Atualize os campos solicitados e clique em Avançar.
Em seguida, execute o seguinte comando para iniciar o MinIO.
docker-compose up minio
O comando final docker-compose up
abaixo iniciará o Nessie.
docker-compose up nessie
Navegue até http://localhost:9001
para fazer login no MinIO com o nome de usuário e senha minioadmin:minioadmin
. Você será solicitado a criar um bucket.
Faça um chamado iceberg-datalake
.
Em seguida, volte para Dremio em http://localhost:9047
e clique em Add Source e selecione Nessie.
nessie
http://nessie:19120/api/v2
none
Não clique em Salvar ainda. Em vez disso, no painel de navegação à esquerda, clique em Armazenamento. MinIO é um armazenamento de objetos compatível com S3-API e pode usar os mesmos caminhos de conexão do AWS S3.
minioadmin
minioadmin
/iceberg-datalake
Role para baixo para o próximo conjunto de instruções.
Add Property
em Connection Properties
para criar e configurar as propriedades a seguir.fs.s3a.path.style.access
para true
fs.s3a.endpoint
para minio:9000
dremio.s3.compat
para true
Encrypt connection
Em seguida, clique em Salvar. Agora você deve ver os Catálogos Nessie em suas fontes de dados.
No Dremio navegue até SQL Runner no lado esquerdo. Certifique-se de que o Context
na área superior direita do editor de texto esteja definido como nossa fonte Nessie. Caso contrário, você terá que fazer referência ao contexto como nessie.SalesData
em vez de apenas SalesData
para executar esta consulta. Copie e cole o SQL abaixo e execute.
CREATE TABLE SalesData ( id INT, product_name VARCHAR, sales_amount DECIMAL, transaction_date DATE ) PARTITION BY (transaction_date);
Execute a consulta abaixo para inserir dados na tabela que você acabou de criar.
INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES (1, 'ProductA', 1500.00, '2023-10-15'), (2, 'ProductB', 2000.00, '2023-10-15'), (3, 'ProductA', 1200.00, '2023-10-16'), (4, 'ProductC', 1800.00, '2023-10-16'), (5, 'ProductB', 2200.00, '2023-10-17');
Navegue de volta ao MinIO para ver se seu data lake foi preenchido com as tabelas Iceberg.
Retorne ao Dremio em http://localhost:9047
. Comece consultando uma tabela na ramificação principal usando a sintaxe AT BRANCH
:
SELECT * FROM nessie.SalesData AT BRANCH main;
Crie uma ramificação ETL (Extract Transform and Load) para permitir que você experimente e transforme dados sem afetar a produção.
CREATE BRANCH etl_06092023 in nessie
Dentro da ramificação ETL, insira novos dados na tabela:
USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');
Confirme a disponibilidade imediata dos novos dados na filial ETL:
SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;
Observe o isolamento das alterações dos usuários na ramificação principal:
SELECT * FROM nessie.SalesData AT BRANCH main;
Mescle as alterações da ramificação ETL de volta à ramificação principal:
MERGE BRANCH etl_06092023 INTO main in nessie;
Selecione o branch principal novamente para ver se as alterações foram realmente mescladas.
SELECT * FROM nessie.SalesData AT BRANCH main
Essa estratégia de ramificação permite que os engenheiros de dados lidem de forma independente com inúmeras transações em diversas tabelas. Quando estiverem prontos, os engenheiros de dados podem mesclar essas transações em uma transação única e abrangente com várias mesas na filial principal.
Esta postagem do blog investigou o poder do controle de versão semelhante ao Git na engenharia de dados, enfatizando como
Deixe-nos saber como é o seu data lakehouse
Também aparece aqui .