Append — Escrita Incremental
pf.append() adiciona novos dados a um arquivo .permafrost existente sem recomprimir os dados originais. É a forma recomendada para pipelines que acumulam dados ao longo do tempo.
Uso básico
import permafrost as pf
import pandas as pd
# Arquivo já existe com dados de janeiro
result = pf.append("logs.pf", df_fevereiro)
print(result["total_rows"]) # total acumulado
print(result["new_chunks"]) # chunks adicionados nesta operação
Como funciona internamente
- Abre o arquivo existente e lê o sparse index
- Verifica SHA-256 dos chunks originais (
verify=Truepor padrão) - Comprime
dfnos novos chunks e os escreve no final do arquivo - Faz patch no header (
n_chunkseorig_rows) sem reescrever o arquivo inteiro - Reescreve o sparse index com as novas entradas
O resultado é um arquivo .permafrost válido que o unfreeze(), peek() e query() leem normalmente.
Particionamento após append
Se o arquivo original foi criado com partition_by=, o append respeita a mesma coluna de partição. Todos os thaws seletivos continuam funcionando:
pf.freeze(df_jan, "vendas.pf", partition_by="mes")
pf.append("vendas.pf", df_fev) # adiciona mes=2 ao sparse index
pf.append("vendas.pf", df_mar) # adiciona mes=3
# Thaw seletivo funciona normalmente
df = pf.unfreeze("vendas.pf", filter={"mes": 2})
Compatibilidade de schema
O schema (conjunto de colunas e tipos) do DataFrame novo deve ser compatível com o original. Se houver divergência, um ValueError é levantado antes de qualquer escrita:
# Erro: coluna extra não existia no original
pf.append("vendas.pf", df_com_coluna_nova)
# ValueError: schema mismatch — colunas extras: {'desconto'}
Múltiplos appends
for mes_df in [df_jan, df_fev, df_mar, df_abr]:
res = pf.append("historico.pf", mes_df)
print(f"Total acumulado: {res['total_rows']:,}")
Verificação de integridade
Por padrão (verify=True), o append verifica o SHA-256 de todos os chunks existentes antes de escrever. Para arquivos grandes onde a integridade já foi verificada recentemente:
Warning
Use verify=False apenas quando tiver certeza da integridade do arquivo.
Ver também
pf.diff()— comparar duas versões de um arquivo- Exemplo completo