Fala, pessoal! Tudo certo?
Espero que sim! 🙂
Hoje quero trazer para vocês um dos formato de tabela que falamos anteriormente, o Apache Iceberg.
Então bora lá!
😀

A importância do Apache Iceberg no ecossistema de Big Data

Atualmente o Apache Iceberg tem sido um dos formatos mais utilizados/adotados no mundo do big data pois ele traz diversas vantagens para o mundo dos Data Lakes modernos. Desafios como transações ACID, Time Travel, Schema Evolution e Hidden Partitioning são importantes features que essa tecnologia traz.

Além de alguns movimentos de mercado, como por exemplo o S3 Tables que irá utilizar o iceberg como formato padrão da tecnologia e a compra da tabular pela Databricks o que pode desbancar o delta e impusonar mais ainda a tecnologia do Apache Iceberg.

Quando vejo esses movimentos, não posso deixar de notar a tendência à utilização de iceberg como formato padrão de tabelas.

Para além disso, por ser open source, a tecnologia conta com uma comunidade ampla e com mais de 6.5 mil estrelas em seu github o que a torna mais resiliente ainda.

Comparação com Data Lakes tradicionais e soluções como Hive/Parquet

Desafios dos Data Lakes tradicionais

Por maior que seja a revolução que os Data Lakes tradicionais trouxeram ao mundo dos dados esse modelo antigo tem diversos desafios:

  • não garantem transações atômicas (ACID), podendo gerar inconsistência nos dados.
  • tem governança frágil o que potencializa a criação de um Data swamp.
  • a gestão de metadados pode ser ineficiente, pois o metadado não é armazenado junto à tabela, causando lentidão.
  • operações de update e delete podem ser demasiadamente custosas, visto que em Data Lakes tradicionais as operações são geralmente “append-only”.

Como o Iceberg supera essas limitações

Podemos, utilizando o Apache Iceberg, superar diversos desses desafios.

  • ACID: O Apache Iceberg garante a atomicidade da transação.
  • Time Travel: O Apache Iceberg tem o mecanismo de snapshots que podemos utilizar para recuperar versões anteriores da tabela.
  • UPDATE, DELETE e MERGE: São operações nativas na tecnologia.
  • Metadados: Os metadados são armazenados junto com a tabela.

Além disso, existem diversas outras features que o Apache Iceberg traz para a gente:

Vantagens do Apache Iceberg

ACID transactions

Um padrão já praticado há décadas nos bancos relacionais, utilizado para transações.

Escrevi um pouco sobre isso no artigo que fala sobre formatos abertos de tabelas: https://thedataengineer.com.br/2024/06/22/open-table-format/

Time Travel

Basicamente, utilizando os snapshots que são gerados nas transações, conseguimos voltar no tempo para um snapshot anterior.

// time travel to snapshot with ID 10963874102873L
spark.read
    .option("snapshot-id", 10963874102873L)
    .format("iceberg")
    .load("path/to/table")

Extraí esse código da própria documentação em: https://iceberg.apache.org/docs/latest/spark-queries/#time-travel.

Um ponto importante aqui, é colocar um pouco da minha experiência recente utilizando iceberg, essa parte de snapshots é configurada nas propriedades dá tabela, então eles vão acumulando durante o uso, por esse comportamento, é importante habilitarmos as rotinas de manutenção, pois em um dado momento, precisamos realizar o expurgo dessas snapshots, caso contrario pode chegar o momento que nossa tabela acumule tantos metadados que fique inviável mantê-la.

Por esse motivo, consulte a parte de manutenção: https://iceberg.apache.org/docs/1.6.0/maintenance/?h=main#recommended-maintenance

Schema Evolution

Podemos evoluir o schema de nossas tabelas, adicionando, removendo, reordenando ou estendendo o tipo de dado conforme vemos na documentação: https://iceberg.apache.org/docs/1.6.0/evolution/#schema-evolution.

Em todo o caso, devemos tomar um pouco de cuidado ao realizar trocas de tipos de dados, pois no final do dia, o iceberg armazena uma serie de arquivos e caso tentemos converter coisas incompatíveis, podemos corromper a tabela.

Hidden Partitioning

O Iceberg também produz partições de forma oculta, baseando-se em valores de colunas. Sem que os usuários precisem saber disso.

Documentação: https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning

Conclusão

Esse é um dos principais formatos abertos de tabelas que temos hoje em dia, pra além do que foi apresentado aqui no artigo, eu sugiro que testem o Iceberg pois é bem interessante.

Na própria documentação temos um ambiente de teste completo criado com docker-compose o que facilita demais esses testes.

Aleḿ disso, o ambiente tráz com sigo alguns casos bem interessantes como o padrão Write-Audit-Publish que eu não conhecia e que achei bem interessante.

Até logo, pessoal!

🙂


Jefferson Soares

Olá! Sou Jefferson. Trabalho com: Dados, Dashboards, SQL, SAS, Python e muito mais! Criei esse cantinho para postar alguns conhecimentos. :)

0 0 votos
Article Rating
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários