Determinar se o Spark está regravando muitos arquivos
DELETE, UPDATE e MERGE operações em tabelas Delta Lake podem gravar muito mais dados do que alteram. Sem vetores de exclusão, modificar uma única linha requer a regravação de todo o arquivo Parquet que a contém. Se uma pequena alteração afetar muitos arquivos, o estágio de gravação regravará todas as linhas não modificadas nesses arquivos também.
Use esta página quando o estágio mais longo tiver uma saída alta e uma execução DELETE, UPDATE ou MERGE. Para verificar a saída do estágio, consulte Saída alta.
Verifique a gravação no SQL DAG
Para verificar quanto de dados a etapa de gravação grava:
-
Role a página até o topo da página do job e clique em Associated SQL Query :

O DAG SQL aparece. Se não aparecer, role para encontrá-lo:

-
Localize o nó de gravação e verifique quantos dados ele grava:
-
Para
DELETEouUPDATE, compare a quantidade de dados gravados com a quantidade esperada. Se a operação gravar muito mais dados do que o esperado, pode estar reescrevendo dados:
-
Para
MERGE, o node de merge mostra estatísticas explícitas sobre quanto de dados ele reescreve.
-
Verificar a história da tabela
Para verificar uma reescrita, verifique as métricas de operação na história da tabela. Para um MERGE, compare numTargetRowsCopied com as linhas inseridas, atualizadas e excluídas. Para DELETE e UPDATE, verifique numCopiedRows. Uma contagem de linhas copiadas muito maior do que as linhas alteradas indica que a operação reescreveu dados não modificados. Veja Métricas de operação.
Reduza as reescritas
Se a operação reescrever uma grande quantidade de dados, experimente estas abordagens:
- Habilitar vetores de exclusão. Vetores de exclusão marcam as linhas como removidas ou alteradas sem reescrever o arquivo Parquet.
- Ajuste as operações
MERGE. Adicione restrições conhecidas à condição de correspondência para reduzir o espaço de pesquisa. Para outras abordagens de ajuste de merge, consulte Práticas recomendadas: Delta Lake.