🇧🇷Como voltar no tempo e acessar versões históricas de suas tabelas

 🇬🇧– To read this article in English click here

Já imaginou ser capaz de voltar no tempo e acessar o histórico de modificações de uma tabela? Isso é possível com a funcionalidade Time Travel do Delta Lake.

O que é o Delta Lake?

O Delta Lake é uma camada de armazenamento open-source que melhora data lakes adicionando capacidades de transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade). Ele se integra ao Apache Spark oferecendo confiabilidade e desempenho para lidar com grandes volumes de dados. Para entender mais sobre como implementar o Delta Lake nos seus jobs Spark, acesse a documentação.

Mas, bem resumidamente, para configurar o Delta Lake na sua sessão Spark, vou apresentar um exemplo abaixo:

spark = SparkSession.builder \

    .appName(“Exemplo Delta Lake”) \

    .config(“spark.jars.packages”, “io.delta:delta-core_2.12:1.0.0”) \

    .config(“spark.sql.extensions”, “io.delta.sql.DeltaSparkSessionExtension”) \

    .config(“spark.sql.catalog.spark_catalog”, “org.apache.spark.sql.delta.catalog.DeltaCatalog”) \

    .config(“spark.databricks.delta.retentionDurationCheck.enabled”, “true”) \

    .config(“spark.databricks.delta.retentionDurationCheck.retentionDuration”, “30 days”) \

    .getOrCreate()

Esse é um exemplo de sessão Spark com a configuração do Delta Lake adicionada. Vou explicar cada uma dessas configurações para que você entenda a relação entre Spark, Delta Lake e Time Travel, a nossa máquina do tempo de tabelas.

  • spark.jars.packages: Esta configuração define os pacotes JAR que serão incluídos no ambiente Spark e específica a dependência Maven para o Delta Lake.
  • spark.sql.extensions: Define as extensões do Spark SQL que serão carregadas ao iniciar uma sessão Spark.
  • spark.sql.catalog.spark_catalog: Define o catálogo usado para armazenar metadados de tabelas e views no Spark.
  • spark.databricks.delta.retentionDurationCheck.enabled: Controla se a verificação de tempo de retenção está habilitada no Delta Lake.
  • spark.databricks.delta.retentionDurationCheck.retentionDuration: Define a duração de retenção para versões de dados no Delta Lake.

Tendo em mente para que serve cada configuração, perceba que a nossa máquina do tempo está sendo configurada em spark.databricks.delta.retentionDurationCheck.retentionDuration, onde definimos a quantidade de dias que serão guardados e disponibilizados para consulta e recuperação. No exemplo apresentado, eu defini um tempo de retenção de 30 dias, logo minha tabela Delta me deixa viajar até 30 dias no passado.

Depois de configurar sua sessão Spark, basta escrever sua tabela no formato “delta”:

df.write.format(“delta”).mode(“overwrite”).save(delta_path)

O Time Travel:

Time Travel no Delta Lake possibilita aos usuários consumidores da tabela retornarem a versões anteriores e acessarem o histórico de modificações. Isso é útil para auditoria dos dados, depuração e correção da tabela.

Para acessar o histórico de uma tabela Delta utilizando Python, vou apresentar alguns exemplos de código.

Importação:

from delta.tables import DeltaTable

Exibindo histórico de versões da tabela:

deltaTable = DeltaTable.forPath(ss.spark, “caminho/localizacao/tabela”)

fullHistoryDF = deltaTable.history()

Esse código vai exibir o histórico de versões salvas com número de identificação e alteração.

Restaurando versão de uma tabela:

deltaTable.restoreToVersion(4254)

Entre parênteses, você deve adicionar o número da versão que deseja restaurar.

ATENÇÃO!

Por último, mas não menos importante, você deve ter em mente que o tempo de retenção usará capacidade e recursos de armazenamento para guardar o histórico de suas tabelas. Isso pode impactar os custos de armazenamento e o desempenho das consultas.

Esse é um resumo de como funciona a viagem no tempo utilizando a função Time Travel do Delta Lake. Você pode se aprofundar mais no assunto e visualizar outras linhas de comando úteis da ferramenta. Espero ter ajudado a entender um pouco mais sobre como funciona essa funcionalidade incrível.