Quando você precisa comparar arquivos CSV online, a principal coisa a evitar é um diff de texto bruto. Arquivos CSV são dados estruturados. As linhas mudam de posição, as colunas são renomeadas, os exports ganham novos campos e uma comparação linha por linha rapidamente vira ruído.
Prefiro comparar os arquivos como tabelas: escolher uma chave estável, mapear as colunas, revisar as linhas adicionadas, removidas, alteradas e inalteradas e, depois, exportar o diff. Foi para isso que a ferramenta CSV Diff da Datablist foi criada.
Neste passo a passo, vou comparar um export antigo de um catálogo de produtos com um arquivo mais recente de ofertas de um fornecedor. Os dois arquivos não têm as mesmas colunas, mas compartilham EAN, Internal ID, Price e Stock. Isso nos dá um exemplo realista: associar os produtos pelo EAN, comparar preço e estoque e exportar o resultado.
Links rápidos
- O jeito mais rápido de comparar arquivos CSV
- Conjunto de dados de exemplo
- Etapa 1: envie os arquivos CSV original e atualizado
- Etapa 2: escolha como associar as linhas
- Etapa 3: mapeie colunas com nomes diferentes
- Etapa 4: escolha o tipo de join e as opções de comparação
- Etapa 5: revise as diferenças
- Etapa 6: exporte o resultado do CSV Diff
- Exemplo de resultado
O jeito mais rápido de comparar arquivos CSV
Se você já tem os dois arquivos em mãos, o processo é simples:
- Abra a ferramenta CSV Diff da Datablist.
- Envie o arquivo mais antigo como o CSV original.
- Envie o arquivo mais recente como o CSV atualizado.
- Comece com a detecção automática e confirme a coluna-chave.
- Mapeie as colunas caso os dois arquivos usem nomes diferentes.
- Mantenha o full outer join na primeira auditoria.
- Revise as linhas alteradas, adicionadas, removidas e inalteradas.
- Na primeira análise, exporte o CSV com o diff completo.
- Se precisar de um arquivo menor para compartilhar, mude para o export apenas das linhas alteradas.
Esse método funciona melhor do que um diff de texto porque a comparação acompanha os registros, não os números das linhas. Se um export do CRM reordenar os contatos ou um fornecedor adicionar uma coluna, um diff de texto pode fazer o arquivo inteiro parecer diferente. Já o diff de tabelas mostra exatamente quais registros e células mudaram.
🔑 Escolha a chave das linhas antes de avaliar o diff
Uma boa coluna-chave transforma uma comparação confusa em um resultado útil. Use um ID, email, SKU, EAN ou identificador interno que permaneça estável entre os exports.
Exemplo de dados: CSV de produtos vs. CSV de ofertas
Neste tutorial, vou usar dados fictícios de um ecommerce. O primeiro arquivo é um export antigo do catálogo de produtos. O segundo é um feed mais recente de ofertas de um fornecedor ou marketplace.
O CSV original de produtos tem esta aparência:
| Índice | EAN | ID interno | Nome | Marca | Categoria | Preço | Moeda | Estoque | Disponibilidade |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 5901234123457 | PRD-001 | Garrafa hermética | Acme Outdoor | Atividades ao ar livre | 24.90 | EUR | 42 | Em estoque |
| 2 | 5901234123464 | PRD-002 | Marmita bento | Northline | Cozinha | 18.50 | EUR | 120 | Em estoque |
| 3 | 5901234123471 | PRD-003 | Ecobag de algodão | Urban Goods | Acessórios | 9.90 | EUR | 0 | Sem estoque |
| 4 | 5901234123488 | PRD-004 | Luminária de mesa LED | Luma | Escritório | 39.00 | EUR | 18 | Em estoque |
| 5 | 5901234123495 | PRD-005 | Tapete de yoga | BalanceFit | Esporte | 29.00 | EUR | 65 | Em estoque |
| 10 | 5901234123549 | PRD-010 | Mouse sem fio | ClickPro | Eletrônicos | 34.00 | EUR | 55 | Em estoque |
O CSV atualizado de ofertas tem menos campos descritivos, mas ainda inclui os identificadores e valores comerciais relevantes para a análise:
| ID da oferta | EAN | ID interno | SKU do fornecedor | Estoque | Preço |
|---|---|---|---|---|---|
| OFF-001 | 5901234123457 | PRD-001 | ACM-BTL-01 | 38 | 23.90 |
| OFF-002 | 5901234123464 | PRD-002 | NTH-LBX-02 | 120 | 18.50 |
| OFF-003 | 5901234123471 | PRD-003 | UGD-TOTE-03 | 25 | 9.90 |
| OFF-004 | 5901234123488 | PRD-004 | LMA-LAMP-04 | 18 | 35.00 |
| OFF-005 | 5901234123495 | PRD-005 | BFT-MAT-05 | 65 | 29.00 |
| OFF-008 | 5901234123556 | PRD-011 | CLP-CAB-11 | 44 | 16.50 |
Esse par reúne os cenários que costumo buscar em um exemplo de CSV diff: valores alterados, linhas novas, linhas removidas, linhas inalteradas e schemas diferentes. Com a amostra completa, espero que PRD-001, PRD-003, PRD-004, PRD-006 e PRD-010 apareçam como alterados. Já PRD-011 e PRD-012 devem ser adicionados, enquanto PRD-008 e PRD-009 devem ser removidos.
Etapa 1: envie os arquivos CSV original e atualizado
Abra a ferramenta CSV Diff. Você verá duas áreas de upload:
- Original CSV: o export anterior, snapshot antigo ou arquivo de referência.
- Updated CSV: o export mais recente que você deseja comparar com o original.
A ordem importa. Se uma linha existir apenas no arquivo atualizado, a Datablist a marcará como added. Se existir apenas no arquivo original, ela será marcada como removed.
No exemplo dos produtos, envio o CSV Products como arquivo original, pois ele corresponde ao export mais antigo do catálogo. Em seguida, envio o CSV Offers como arquivo atualizado, pois ele representa o feed mais recente do fornecedor.
Depois que você seleciona os dois arquivos, a ferramenta faz o parsing e prepara a primeira comparação. Os arquivos CSV são processados e comparados no navegador. O parser detecta separadores comuns, como vírgula, ponto e vírgula, tabulação e pipe, além de aceitar encodings comuns, como UTF-8 e arquivos no padrão Windows-1252.
Mesmo assim, sempre confiro a ordem dos arquivos antes de analisar o resultado. Muitas comparações ruins acontecem porque os arquivos antigo e novo foram invertidos, fazendo com que as linhas adicionadas e removidas sejam interpretadas ao contrário.
Etapa 2: escolha como associar as linhas
A associação das linhas é a configuração mais importante desse processo.
A Datablist pode começar com a detecção automática. Ela procura possíveis colunas identificadoras, como id, email, sku, uuid, external_id, record_id, user_id, contact_id e company_id.
Para dados de produtos, costumo preferir:
EAN, quando estiver presente e for único.Internal ID, quando os EANs estiverem ausentes, duplicados ou variarem conforme o fornecedor.SKU, somente quando o mesmo SKU for usado nos dois arquivos.
Para arquivos de CRM ou de leads, a chave equivalente pode ser email, contact_id, company_id ou o ID de registro do CRM.
O modo de associação depende da estrutura dos dados:
- Use a associação por uma única chave na maioria dos exports. Uma coluna estável é mais fácil de auditar.
- Use a associação por várias chaves quando uma só coluna não for suficientemente única. Por exemplo,
Company DomainmaisEmail. - Use a comparação da linha inteira apenas quando não houver um identificador estável.
- Use a detecção automática na primeira análise, mas confirme a chave identificada antes de confiar nas contagens.
⚠️ Uma chave fraca gera muitas linhas adicionadas e removidas
Se a chave estiver ausente, duplicada ou tiver sido reformatada entre os exports, registros correspondentes poderão aparecer como uma linha removida e outra adicionada. Verifique os alertas de chaves duplicadas antes de usar o resultado em uma atualização.
Chaves duplicadas não são motivo para ignorar o diff, mas indicam que é preciso analisar os dados com mais cuidado. A ferramenta sinaliza essas chaves, e trato as linhas correspondentes como registros que devem ser revisados antes de confiar nas contagens.
Etapa 3: mapeie colunas com nomes diferentes
O mapeamento das colunas define quais campos serão comparados.
No exemplo dos produtos, os dois arquivos compartilham EAN, Internal ID, Stock e Price. O arquivo original também contém Name, Brand, Category, Currency e Availability. Já o arquivo atualizado inclui Offer ID e Supplier SKU.
Não quero que metadados exclusivos do fornecedor sejam considerados alterações. Quero comparar as colunas que respondem à minha necessidade de negócio:
- Associar as linhas por
EAN. - Comparar
StockcomStock. - Comparar
PricecomPrice. - Manter colunas descritivas como contexto quando elas ajudarem na revisão da linha.
- Deixar campos não relacionados sem mapeamento quando não devam afetar a comparação.
Quando os nomes das colunas são idênticos, a Datablist consegue alinhá-las pelo nome. A ordem das colunas não precisa ser a mesma. O mapeamento manual é importante quando os rótulos mudam. Um export de CRM pode usar customer_id em um arquivo e Customer ID em outro. Mapeie esses campos apenas se representarem o mesmo valor.
💡 Mapeie apenas as colunas que deseja comparar
Novas colunas de metadados aparecem com frequência em feeds de fornecedores e exports de CRM. Se um campo não deve ser considerado uma alteração, deixe-o sem mapeamento ou use-o apenas como contexto durante a revisão.
Essa etapa parece simples, mas costuma ser a que mais economiza tempo. Uma chave errada prejudica a associação das linhas. Um mapeamento incorreto prejudica a contagem das alterações.
Etapa 4: escolha o tipo de join e as opções de comparação
Na primeira execução, recomendo esta configuração:
- Full outer join.
- Uma coluna-chave estável.
- Ignorar espaços no início e no fim.
- Normalizar valores vazios e semelhantes a null.
- Manter a comparação case-sensitive, a menos que o uso de maiúsculas e minúsculas não seja relevante.
O full outer join é a melhor opção padrão porque mostra tudo: linhas correspondentes, adicionadas e removidas. Assim, você tem uma visão ampla da auditoria antes de restringir os resultados.
O tipo de join determina o que aparece no resultado:
- Full outer join mostra as linhas correspondentes, as que existem apenas no arquivo original e as que existem apenas no atualizado.
- Inner join mostra somente registros presentes nos dois arquivos. Use-o quando seu foco forem apenas as alterações nas linhas compartilhadas.
- Left join mantém o arquivo original como base e exclui as linhas que existem somente no arquivo atualizado.
As opções de comparação reduzem o ruído causado pela formatação:
- Ignore whitespace remove os espaços no início e no fim antes de comparar as células.
- Ignore case considera
AcmeeACMEvalores iguais. - A normalização de valores vazios e semelhantes a null trata campos em branco,
null,undefined,nil,none,n/aenacomo marcadores equivalentes.
📘 Use full outer join na primeira auditoria
Comece com uma visão ampla e depois restrinja os resultados. Quando as contagens de linhas adicionadas, removidas e alteradas fizerem sentido, exporte um arquivo menor somente com as linhas alteradas para revisão.
Em arquivos grandes, o desempenho do navegador e do dispositivo faz diferença. A prévia é limitada para manter a ferramenta responsiva, enquanto o CSV para download é gerado com base no resultado completo. Se um export for grande demais para analisar com conforto, primeiro divida o CSV em arquivos menores para revisão.
Etapa 5: revise linhas adicionadas, removidas, alteradas e inalteradas
Quando a comparação terminar, comece pelos status das linhas:
added: a chave existe apenas no CSV atualizado.removed: a chave existe apenas no CSV original.changed: a chave existe nos dois arquivos e pelo menos um valor mapeado foi alterado.unchanged: a chave existe nos dois arquivos e os valores mapeados são iguais após a normalização.
O exemplo dos produtos apresenta casos bem claros:
PRD-001foi alterado porquePricepassou de24.90para23.90eStock, de42para38.PRD-003foi alterado porque o estoque passou de0para25.PRD-011foi adicionado porque seu EAN aparece apenas no CSV Offers.PRD-008foi removido porque seu EAN aparece apenas no CSV Products.
Use os filtros de status para direcionar a revisão. Costumo começar por Changed e depois verificar Added e Removed. Deixo Unchanged para o fim, exceto quando preciso de uma trilha de auditoria completa.
A visualização de linhas alteradas é útil quando você precisa analisar as diferenças célula por célula. Ela mostra lado a lado o valor original e o atualizado de cada coluna modificada.
Antes de exportar, faço uma rápida verificação de qualidade:
- As contagens de itens adicionados e removidos parecem plausíveis?
- A ferramenta associou as linhas pela chave esperada?
- As chaves duplicadas foram sinalizadas?
- As colunas estão mapeadas corretamente?
- Alterações apenas de formatação estão sendo ignoradas quando deveriam?
- Algumas das linhas alteradas fazem sentido quando expandidas?
A seção de resumo oferece mais uma conferência rápida. Ela mostra detalhes do processamento, colunas mapeadas, alertas de chaves duplicadas e contagens por status.
Se os números parecerem estranhos, não exporte ainda. Primeiro, volte à configuração da chave e ao mapeamento das colunas. É nesses pontos que surge a maioria dos problemas.
Etapa 6: exporte o resultado do CSV Diff
Quando a prévia estiver correta, exporte o resultado. A Datablist oferece diferentes modos de saída, conforme sua necessidade:
- Summary CSV: use para ver o status das linhas, as chaves, as contagens e um panorama adequado para auditoria.
- Changed rows CSV: use quando alguém precisar revisar apenas os registros com diferenças.
- Full diff CSV: use para comparar lado a lado os valores originais e atualizados.
Na primeira execução, prefiro o Full diff CSV. Ele preserva mais contexto, o que ajuda quando é necessário explicar uma alteração posteriormente. Depois de validar o fluxo, passo a usar o Changed rows CSV para gerar um arquivo mais enxuto.
Você também pode escolher o separador:
- Vírgula para a maioria dos fluxos com planilhas.
- Ponto e vírgula quando sua configuração regional ou sistema de destino exigir esse formato.
- Pipe ou tabulação para ferramentas que exigem esses separadores.
A ferramenta permite copiar o CSV de diferenças ou baixá-lo. Os arquivos baixados seguem este padrão:
csv-diff-{originalBase}-vs-{updatedBase}.csv
Se o resultado exportado for grande e você precisar filtrá-lo ou editá-lo antes de compartilhar, consulte o guia da Datablist sobre como editar arquivos CSV grandes online.
Exemplo de tabela de resultados
Veja uma pequena amostra de como pode ser um export com o diff completo do exemplo dos produtos.
| status | key | changed_columns | original:Price | updated:Price | original:Stock | updated:Stock |
|---|---|---|---|---|---|---|
| changed | 5901234123457 | Price|Stock | 24.90 | 23.90 | 42 | 38 |
| changed | 5901234123471 | Stock | 9.90 | 9.90 | 0 | 25 |
| added | 5901234123556 | 16.50 | 44 | |||
| removed | 5901234123525 | 7.50 | 88 |
O CSV exportado pode incluir:
status: added, removed, changed ou unchanged.key: o valor usado para associar a linha.__row_index_original: o número da linha no CSV original, quando disponível.__row_index_updated: o número da linha no CSV atualizado, quando disponível.__duplicate_key: indica se a chave selecionada aparece mais de uma vez.changed_columns: os campos alterados.changed_columns_count: o número de campos alterados.summary: um resumo legível das alterações.- Pares
original:{column}eupdated:{column}para revisão lado a lado.
Gosto desse formato porque é fácil de compartilhar. Outra pessoa pode filtrar por status = changed, ordenar por changed_columns_count ou isolar os registros adicionados e removidos sem precisar repetir a comparação.
Quando comparar arquivos CSV dessa forma
Esse fluxo é indicado para qualquer situação em que você tenha dois snapshots e precise descobrir o que mudou. Alguns bons exemplos:
- Atualizações de preço e estoque em catálogos de produtos.
- Revisão de feeds de fornecedores antes da importação de novas ofertas.
- Export de CRM antes e depois de uma limpeza.
- Atualização de listas de leads.
- Comparação de snapshots de estoque.
- Auditoria de planilhas compartilhadas.
- Arquivos CSV gerados em um fluxo de conversão de JSON.
Por exemplo, depois de converter um JSON aninhado em CSV, você pode usar o CSV Diff para comparar dois exports gerados. Se estiver preparando registros para um CRM, execute o diff antes de um processo mais amplo de limpeza de dados para saber quais linhas mudaram.
Comparar, fazer join ou remover duplicados: escolha o fluxo certo
Comparar arquivos CSV não é o mesmo que fazer join ou remover registros duplicados. Use o CSV Diff quando sua pergunta for:
O que mudou entre estes dois snapshots?
Use um fluxo de join quando a pergunta for:
Como combino campos de dois arquivos?
Nesse caso, consulte o guia para fazer join de arquivos CSV por um identificador único.
Use a deduplicação quando a pergunta for:
Quais registros se repetem em um ou mais arquivos?
Nesse caso, consulte o guia para remover duplicados de um CSV.
Essa distinção é importante porque cada fluxo tem um objetivo diferente. O CSV Diff serve para comparar snapshots e exportar as diferenças. Ele não é uma ferramenta de fuzzy matching nem de merge.
Solução de problemas e casos especiais
As linhas aparecem como adicionadas e removidas, não alteradas
Primeiro, confira a coluna-chave. Se a chave tiver mudado entre os arquivos, a Datablist não conseguirá reconhecer as duas linhas como o mesmo registro. Verifique também a ordem dos arquivos. Se os arquivos original e atualizado estiverem invertidos, as linhas adicionadas e removidas aparecerão ao contrário.
Muitas células aparecem como alteradas
Revise as opções de comparação. Ative a remoção de espaços no início e no fim se eles não forem relevantes, use a comparação case-insensitive se maiúsculas e minúsculas não fizerem diferença, normalize valores vazios se campos em branco e marcadores equivalentes devam corresponder e confira o mapeamento das colunas renomeadas.
Os nomes das colunas são diferentes
Use o mapeamento manual. Mapeie os campos somente quando tiverem o mesmo significado. Deixe colunas não relacionadas sem mapeamento caso elas não devam afetar a comparação.
Há chaves duplicadas
Considere as chaves duplicadas um sinal de que os dados precisam ser revisados. O resultado ainda pode ser útil, mas essas duplicidades indicam que o identificador escolhido não é único o bastante. Limpe os arquivos de origem ou escolha uma chave mais robusta antes de usar as contagens em uma importação.
O arquivo está lento ou a prévia é limitada
O processamento de arquivos grandes depende do desempenho do navegador e do dispositivo. Use a prévia para revisar os dados e baixe o CSV diff quando precisar do resultado completo.
O parsing do CSV falha
Procure campos entre aspas que não foram fechados, delimitadores incomuns ou problemas de encoding. Um único campo com aspas abertas pode invalidar o arquivo CSV.
Conclusão
A melhor forma de comparar dois exports CSV é tratá-los como dados, não como texto. Envie o arquivo antigo como Original CSV e o novo como Updated CSV, escolha uma chave estável, mapeie as colunas, revise os status das linhas e exporte o diff.
Minha configuração padrão é simples: full outer join, chave estável, remoção de espaços no início e no fim, normalização de valores semelhantes a null e export do diff completo na primeira revisão.
Você pode executar esse fluxo com a ferramenta CSV Diff da Datablist.
FAQ
Como comparar dois arquivos CSV online?
Abra a ferramenta CSV Diff da Datablist, envie o arquivo mais antigo como Original CSV e o mais recente como Updated CSV, escolha uma coluna-chave, revise o resultado e baixe o CSV com as diferenças.
Posso comparar arquivos CSV por ID, email, SKU ou EAN?
Sim. Use o identificador compartilhado como coluna-chave. Boas opções incluem IDs de registros, endereços de email, SKUs, EANs, IDs internos, IDs de empresas e outros valores que permaneçam estáveis entre os exports.
E se as linhas estiverem em outra ordem?
Use a associação por chave. Quando as linhas são vinculadas por uma chave estável, elas não precisam estar na mesma ordem nos dois arquivos.
Posso comparar arquivos CSV com nomes de colunas diferentes?
Sim. Mapeie manualmente as colunas quando os nomes forem diferentes. Por exemplo, associe customer_id em um arquivo a Customer ID no outro se ambos representarem o mesmo identificador.
Qual é o melhor tipo de join para um CSV diff?
Use full outer join na primeira auditoria. Ele mostra as linhas correspondentes, adicionadas e removidas. Use inner join apenas quando seu foco forem os registros presentes nos dois arquivos.
Posso ignorar espaços, maiúsculas e minúsculas ou valores em branco?
Sim. Você pode remover espaços no início e no fim, comparar textos sem diferenciar maiúsculas de minúsculas e tratar campos vazios ou semelhantes a null como iguais. Costumo manter ativadas a remoção de espaços e a normalização de valores vazios.
Posso exportar apenas as linhas alteradas?
Sim. Use a opção de saída das linhas alteradas quando precisar de um arquivo de revisão mais curto. Ainda assim, recomendo exportar primeiro o diff completo para validar a comparação.
O que significam added, removed, changed e unchanged?
added significa que a chave aparece apenas no CSV atualizado. removed indica que ela aparece apenas no original. changed significa que a chave existe nos dois arquivos, mas os valores mapeados são diferentes. unchanged indica que a chave existe nos dois arquivos e os valores mapeados são iguais.
Os arquivos CSV são enviados para um servidor?
Os arquivos CSV são processados e comparados no seu navegador. Considere essa solução uma ferramenta de comparação no navegador, não um fluxo de importação ou sincronização de collections da Datablist.
É possível comparar arquivos CSV grandes?
Sim, mas o processamento de arquivos muito grandes depende do desempenho do navegador e do dispositivo. A prévia é limitada para manter a ferramenta responsiva, enquanto o CSV para download é gerado com base no resultado completo.







