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!
🙂