Suporte de arquivamento no Databricks

Visualização

Esse recurso está em Public Preview para Databricks Runtime 13.3 LTS e acima.

O suporte de arquivamento no Databricks apresenta uma coleção de recursos que permitem que você use políticas de ciclo de vida baseadas em cloudno armazenamento de objetos em cloud contendo tabelas Delta.

Sem suporte de arquivamento, as operações nas tabelas Delta podem ser interrompidas porque os arquivos de dados ou os arquivos logs transações foram movidos para locais arquivados e não estão disponíveis durante query. O suporte de arquivamento introduz otimizações para evitar a consulta de dados arquivados quando possível e adiciona nova sintaxe para identificar arquivos que devem ser restaurados do arquivo para query completa.

Importante

Databricks só tem suporte de arquivamento para S3 Glacier Deep Archive e Glacier Flexible Retrieval. Consulte os documentos da AWS sobre como trabalhar com objetos arquivados.

query otimizada para dados arquivados

O suporte de arquivamento no Databricks otimiza a seguinte query em tabelas Delta:

query

Novo comportamento

SELECT * FROM <table_name> LIMIT <limit> [WHERE <partition_predicate>]

Ignore automaticamente os arquivos arquivados e retorne os resultados dos dados em uma camada de armazenamento não arquivada.

Comando de manutenção do Delta Lake: OPTIMIZE, ZORDER, ANALYZE, PURGE

Ignore automaticamente arquivos arquivados e manutenção de execução no restante da tabela.

DDL e instruções DML que substituem dados ou excluem dados, incluindo o seguinte: REPLACE TABLE, INSERT OVERWRITE, TRUNCATE TABLE, DROP TABLE

Marque as entradas logs de transação para arquivos de dados arquivados de destino como excluídos.

FSCK REPAIR TABLE

Ignore os arquivos arquivados e verifique apenas os arquivos que não atingiram a política de ciclo de vida.

Consulte Limitações.

Falha antecipada e mensagens de erro

Para query que devem verificar arquivos arquivados para gerar resultados corretos, configurar o suporte de arquivamento para Delta Lake garante o seguinte:

  • query falham antecipadamente se tentarem acessar arquivos no arquivo, reduzindo o desperdício de compute e permitindo que os usuários se adaptem rapidamente e executem novamente query.

  • As mensagens de erro informam aos usuários que uma query falhou porque a query tentou acessar arquivos arquivados.

Os usuários podem gerar um relatório de arquivos que precisam ser restaurados usando a sintaxe SHOW ARCHIVED FILES . Consulte Mostrar arquivos arquivados.

Ativar suporte de arquivamento

Você habilita o suporte de arquivamento em Databricks para tabelas Delta especificando manualmente o intervalo de arquivamento configurado na política de gerenciamento do ciclo de vida cloud subjacente, como na seguinte sintaxe de exemplo:

ALTER TABLE <table_name> SET TBLPROPERTIES(delta.timeUntilArchived = 'X days');

O Delta Lake não interage diretamente com as políticas de gerenciamento de ciclo de vida configuradas em sua account cloud. Se você atualizar a política em sua account cloud, deverá atualizar a política em sua tabela Delta. Consulte Alterar a regra de transição de gerenciamento do ciclo de vida.

Importante

O suporte de arquivamento depende inteiramente de ambientes compatíveis com Databricks compute e só funciona para tabelas Delta. A configuração do suporte a arquivamento não altera o comportamento, a compatibilidade ou o suporte em clientes OSS Delta Lake ou Databricks Runtime 12.2 LTS e abaixo.

Mostrar arquivos arquivados

Para identificar os arquivos que precisam ser restaurados para concluir uma determinada query, use SHOW ARCHIVED FILES, como no exemplo a seguir:

SHOW ARCHIVED FILES FOR table_name [ WHERE predicate ];

Esta operação retorna URIs para arquivos arquivados como um Spark DataFrame.

Observação

Delta Lake só tem acesso às estatísticas de dados contidas nos logs de transações durante essas operações (valor mínimo, valor máximo, contagens nulas e número total de registros para as primeiras 32 colunas). Os arquivos retornados incluem todos os arquivos arquivados que precisam ser lidos para determinar se os registros que atendem a um predicado existem ou não no arquivo. Databricks recomenda fornecer predicados que incluam campos nos quais os dados são particionados, Z-ordered ou agrupados, se possível, para reduzir o número de arquivos que precisam ser restaurados.

Limitações

Existem as seguintes limitações:

  • Não existe suporte para políticas de gerenciamento de ciclo de vida que não sejam baseadas no tempo de criação do arquivo. Isso inclui políticas baseadas em tempo de acesso e políticas baseadas em tags.

  • Você não pode usar DROP COLUMN em uma tabela com arquivos arquivados.

  • REORG TABLE APPLY PURGE faz o melhor esforço, mas funciona apenas em arquivos vetoriais de exclusão e arquivos de dados referenciados que não são arquivados. PURGE não pode excluir arquivos vetoriais de exclusão arquivados.

  • Estender a regra de transição de gerenciamento de ciclo de vida resulta em comportamento inesperado. Consulte Estender a regra de transição de gerenciamento do ciclo de vida.

Alterar a regra de transição do gerenciamento do ciclo de vida

Se você alterar o intervalo de tempo para sua regra de transição de gerenciamento do ciclo de vida cloud , deverá atualizar a propriedade delta.timeUntilArchived.

Se o intervalo de tempo antes do arquivamento for reduzido (menos tempo desde a criação do arquivo), o suporte de arquivamento para a tabela Delta continuará funcionando normalmente após a atualização da propriedade da tabela.

Estenda a regra de transição do gerenciamento do ciclo de vida

Se o intervalo de tempo antes do arquivamento for estendido (mais tempo desde a criação do arquivo), atualizar a propriedade delta.timeUntilArchived para o novo valor pode levar a erros. os provedores cloud não restauram arquivos do armazenamento arquivado automaticamente quando as políticas de retenção de dados são alteradas. Isso significa que os arquivos que anteriormente eram elegíveis para arquivamento, mas agora não são considerados elegíveis para arquivamento, ainda são arquivados.

Importante

Para evitar erros, nunca defina a propriedade delta.timeUntilArchived com um valor maior que a idade real dos dados arquivados mais recentemente.

Considere um cenário em que o intervalo de tempo para arquivamento é alterado de 60 dias para 90 dias:

  1. Quando a política muda, todos os registros entre 60 e 90 dias já são arquivados.

  2. Por 30 dias, nenhum arquivo novo é arquivado (os arquivos não arquivados mais antigos têm 60 dias no momento em que a política é estendida).

  3. Após 30 dias, a política de ciclo de vida descreve corretamente todos os dados arquivados.

A configuração delta.timeUntilArchived rastreia o intervalo de tempo definido em relação ao tempo de criação do arquivo registrado pelos logs de transação Delta. Ele não tem conhecimento explícito da política subjacente. Durante o período de atraso entre o antigo limite de arquivamento e o novo limite de arquivamento, você pode seguir uma das seguintes abordagens para evitar a consulta de arquivos arquivados:

  1. Você pode deixar a configuração delta.timeUntilArchived com o limite antigo até que tenha passado tempo suficiente para que todos os arquivos sejam arquivados.

    • Seguindo com o exemplo acima, a cada dia, durante os primeiros 30 dias, os dados de outro dia seriam considerados arquivados pelo Databricks, mas ainda não arquivados pelo provedor cloud . Isso não resulta em erro, mas ignora alguns arquivos de dados que podem ser query.

    • Após 30 dias, atualize o delta.timeUntilArchived para 90 days.

  2. Você pode atualizar a configuração delta.timeUntilArchived todos os dias para refletir o intervalo atual durante o período de atraso.

    • Embora a política cloud esteja definida para 90 dias, a idade real dos dados arquivados muda em tempo real. Por exemplo, após 7 dias, definir delta.timeUntilArchived como 67 days reflete com precisão a idade de todos os arquivos de dados no arquivo.

    • Essa abordagem só é necessária se você precisar acessar todos os dados em camadas quentes.

Observação

A atualização do valor para delta.timeUntilArchived não altera realmente quais dados são arquivados. Ele apenas altera quais dados o Databricks trata como se fossem arquivados.