Quando devi confrontare file CSV online, la prima cosa da evitare è un semplice diff testuale. I CSV contengono dati strutturati: le righe cambiano posizione, le colonne vengono rinominate, gli export aggiungono nuovi campi e un confronto riga per riga si trasforma rapidamente in una massa di differenze inutili.

Preferisco confrontare i file come tabelle: scelgo una chiave stabile, associo le colonne, controllo le righe aggiunte, rimosse, modificate e invariate, quindi esporto il diff. È esattamente ciò per cui è stato creato il CSV Diff tool di Datablist.

In questa guida confronterò un vecchio export del catalogo prodotti con un file più recente contenente le offerte di un fornitore. I due file non hanno le stesse colonne, ma condividono EAN, Internal ID, Price e Stock. È un esempio realistico: abbineremo i prodotti tramite EAN, confronteremo prezzo e disponibilità, quindi esporteremo il risultato.

Metodo rapido per confrontare file CSV

Se hai già pronti i due file, il flusso è semplice:

  1. Apri il CSV Diff tool di Datablist.
  2. Carica il file meno recente come Original CSV.
  3. Carica quello più recente come Updated CSV.
  4. Inizia con auto-detect, quindi conferma la colonna chiave.
  5. Associa le colonne se i due file utilizzano nomi diversi.
  6. Mantieni full outer join per il primo controllo.
  7. Esamina le righe modificate, aggiunte, rimosse e invariate.
  8. Per il primo controllo, esporta il CSV con il diff completo.
  9. Se ti serve un file più breve da condividere, passa all'export delle sole righe modificate.

Questo sistema funziona meglio di un diff testuale perché il confronto segue i record, non i numeri di riga. Se un export del CRM riordina i contatti o un fornitore aggiunge una nuova colonna, un diff testuale può far sembrare diverso l'intero file. Un diff tra tabelle mostra invece quali record e quali celle sono effettivamente cambiati.

🔑 Scegli la chiave di riga prima di valutare il diff

Una buona colonna chiave trasforma un confronto confuso in un risultato utile. Usa un ID, un'email, uno SKU, un EAN o un identificativo interno che rimanga stabile tra gli export.

Dataset di esempio: CSV Prodotti vs CSV Offerte

Per questo tutorial userò un dataset ecommerce fittizio. Il primo file è un vecchio export del catalogo prodotti. Il secondo è un feed più recente con le offerte di un fornitore o marketplace.

Il CSV Prodotti originale si presenta così:

IndiceEANInternal IDNomeBrandCategoriaPrezzoValutaStockDisponibilità
15901234123457PRD-001Borraccia ermeticaAcme OutdoorOutdoor24.90EUR42Disponibile
25901234123464PRD-002Portapranzo BentoNorthlineCucina18.50EUR120Disponibile
35901234123471PRD-003Shopper in cotoneUrban GoodsAccessori9.90EUR0Esaurito
45901234123488PRD-004Lampada da scrivania LEDLumaUfficio39.00EUR18Disponibile
55901234123495PRD-005Tappetino yogaBalanceFitSport29.00EUR65Disponibile
105901234123549PRD-010Mouse wirelessClickProElettronica34.00EUR55Disponibile

Il CSV Offerte aggiornato contiene meno campi descrittivi, ma conserva gli identificativi e i valori commerciali che ci interessano:

Offer IDEANInternal IDSupplier SKUStockPrice
OFF-0015901234123457PRD-001ACM-BTL-013823.90
OFF-0025901234123464PRD-002NTH-LBX-0212018.50
OFF-0035901234123471PRD-003UGD-TOTE-03259.90
OFF-0045901234123488PRD-004LMA-LAMP-041835.00
OFF-0055901234123495PRD-005BFT-MAT-056529.00
OFF-0085901234123556PRD-011CLP-CAB-114416.50

Questa coppia di file comprende tutti i casi che cerco di solito in un esempio di CSV diff: valori modificati, nuove righe, righe rimosse, righe invariate e schemi differenti. Nel campione completo, mi aspetto che PRD-001, PRD-003, PRD-004, PRD-006 e PRD-010 risultino modificati. PRD-011 e PRD-012 dovrebbero risultare aggiunti, mentre PRD-008 e PRD-009 dovrebbero risultare rimossi.

Passaggio 1: carica i file CSV originale e aggiornato

Apri il CSV Diff tool. Vedrai due aree di caricamento:

  • Original CSV: l'export precedente, la vecchia istantanea o il file di riferimento.
  • Updated CSV: l'export più recente che vuoi confrontare con l'originale.

L'ordine è importante. Se una riga esiste solo nel file aggiornato, Datablist la contrassegna come added. Se esiste solo nel file originale, la contrassegna come removed.

Nel nostro esempio, carico il CSV Prodotti come file originale perché è l'export meno recente del catalogo. Carico il CSV Offerte come file aggiornato perché rappresenta il nuovo feed del fornitore.

Schermata di caricamento del CSV Diff tool con i campi Original CSV e Updated CSV
Schermata di caricamento del CSV Diff tool con i campi Original CSV e Updated CSV

Dopo aver selezionato entrambi i file, il tool li analizza e prepara il primo confronto. I CSV vengono elaborati e confrontati nel browser. Il parser riconosce i separatori più comuni, come virgola, punto e virgola, tabulazione e pipe, e supporta codifiche diffuse come UTF-8 e i file in stile Windows-1252.

Prima di esaminare il risultato, verifico comunque l'ordine dei file. Molti confronti CSV errati dipendono semplicemente dall'inversione tra vecchio e nuovo file, che porta a interpretare al contrario le righe aggiunte e rimosse.

Passaggio 2: scegli come abbinare le righe

L'abbinamento delle righe è l'impostazione più importante dell'intero processo.

Datablist può partire con auto-detect. Cerca le colonne che probabilmente contengono un identificativo, come id, email, sku, uuid, external_id, record_id, user_id, contact_id e company_id.

Per i dati di prodotto, in genere preferisco:

  • EAN, quando è presente e univoco.
  • Internal ID, quando gli EAN sono assenti, duplicati o specifici del fornitore.
  • SKU, solo quando entrambi i file utilizzano lo stesso SKU.

Per i file CRM o le liste di Lead, la chiave equivalente potrebbe essere email, contact_id, company_id oppure l'ID record del CRM.

Impostazioni di abbinamento CSV Diff con auto-detect e full outer join
Impostazioni di abbinamento CSV Diff con auto-detect e full outer join

La modalità di abbinamento dipende dalla struttura dei dati:

  • Usa l'abbinamento con chiave singola per la maggior parte degli export. Una sola colonna stabile è più facile da verificare.
  • Usa l'abbinamento con più chiavi quando una sola colonna non è abbastanza univoca. Per esempio, Company Domain insieme a Email.
  • Usa il confronto dell'intera riga solo se non disponi di un identificativo stabile.
  • Usa auto-detect per il primo tentativo, ma conferma la chiave rilevata prima di fidarti dei conteggi.

⚠️ Una chiave debole genera troppe righe aggiunte e rimosse

Se la chiave è assente, duplicata o formattata diversamente nei due export, uno stesso record può apparire come una riga rimossa e una aggiunta. Controlla gli avvisi sulle chiavi duplicate prima di usare il risultato per un aggiornamento.

La presenza di chiavi duplicate non rende inutile il diff, ma invita alla prudenza. Il tool segnala le chiavi duplicate: considero queste righe come record da controllare prima di fare affidamento sui conteggi.

Passaggio 3: associa le colonne con nomi diversi

L'associazione delle colonne determina quali campi vengono confrontati.

Nel nostro esempio, entrambi i file contengono EAN, Internal ID, Stock e Price. Il file originale include anche Name, Brand, Category, Currency e Availability, mentre quello aggiornato contiene Offer ID e Supplier SKU.

Non voglio che i metadati presenti soltanto nel feed del fornitore generino delle modifiche. Voglio confrontare le colonne che rispondono alla mia esigenza di business:

  • Abbinare le righe tramite EAN.
  • Confrontare Stock con Stock.
  • Confrontare Price con Price.
  • Conservare le colonne descrittive come contesto quando aiutano a esaminare la riga.
  • Lasciare non associati i campi estranei che non devono influire sul confronto.

Quando i nomi delle colonne sono identici, Datablist può allinearle automaticamente in base al nome. Non è necessario che l'ordine coincida. L'associazione manuale diventa importante quando cambiano le etichette. Per esempio, un export CRM potrebbe usare customer_id in un file e Customer ID nell'altro. Associali soltanto se rappresentano lo stesso valore.

💡 Associa solo le colonne che vuoi confrontare

Nei feed dei fornitori e negli export CRM compaiono spesso nuove colonne di metadati. Se un campo non deve essere considerato una modifica, lascialo senza associazione oppure usalo soltanto come contesto durante il controllo.

Può sembrare un dettaglio, ma spesso è il passaggio che fa risparmiare più tempo. Una chiave sbagliata compromette l'abbinamento delle righe; un'associazione errata delle colonne falsifica il conteggio delle modifiche.

Passaggio 4: scegli il tipo di join e le opzioni di confronto

Per il primo confronto consiglio questa configurazione:

  • Full outer join.
  • Una colonna chiave stabile.
  • Ignora gli spazi iniziali e finali.
  • Normalizza i valori vuoti e quelli equivalenti a null.
  • Mantieni il confronto case-sensitive, a meno che maiuscole e minuscole non siano irrilevanti.

Full outer join è l'opzione predefinita migliore perché mostra tutto: righe abbinate, aggiunte e rimosse. Offre una panoramica completa prima di restringere il risultato.

Impostazioni CSV Diff per ordine delle colonne, spazi, maiuscole e normalizzazione dei valori null
Impostazioni CSV Diff per ordine delle colonne, spazi, maiuscole e normalizzazione dei valori null

Il tipo di join determina ciò che appare nel risultato:

  • Full outer join mostra le righe abbinate, quelle presenti solo nel file originale e quelle presenti solo nel file aggiornato.
  • Inner join mostra esclusivamente i record presenti in entrambi i file. Usalo se ti interessano soltanto le modifiche alle righe condivise.
  • Left join mantiene il file originale come base ed esclude le righe presenti solo nel file aggiornato.

Le opzioni di confronto riducono il rumore dovuto alla formattazione:

  • Ignore whitespace elimina gli spazi iniziali e finali prima di confrontare le celle.
  • Ignore case considera equivalenti Acme e ACME.
  • La normalizzazione dei valori vuoti e null-like considera equivalenti celle vuote, null, undefined, nil, none, n/a e na.

📘 Usa full outer join per il primo controllo

Parti da una visione completa, poi restringi il campo. Dopo aver verificato che i conteggi di righe aggiunte, rimosse e modificate siano plausibili, esporta un file più piccolo con le sole righe modificate.

Con i file di grandi dimensioni, le prestazioni dipendono dal browser e dal dispositivo. L'anteprima è limitata per rimanere reattiva, mentre il CSV scaricabile viene generato utilizzando il risultato completo. Se un export è troppo grande per essere esaminato comodamente, puoi prima dividere il CSV in file più piccoli.

Passaggio 5: controlla le righe aggiunte, rimosse, modificate e invariate

Una volta eseguito il confronto, parti dagli stati delle righe:

  • added: la chiave esiste solo nel CSV aggiornato.
  • removed: la chiave esiste solo nel CSV originale.
  • changed: la chiave esiste in entrambi i file e almeno un valore associato è cambiato.
  • unchanged: la chiave esiste in entrambi i file e, dopo la normalizzazione, i valori associati coincidono.

L'esempio dei prodotti offre casi molto chiari:

  • PRD-001 è stato modificato perché Price è passato da 24.90 a 23.90 e Stock da 42 a 38.
  • PRD-003 è stato modificato perché lo stock è passato da 0 a 25.
  • PRD-011 è stato aggiunto perché il suo EAN compare soltanto nel CSV Offerte.
  • PRD-008 è stato rimosso perché il suo EAN compare soltanto nel CSV Prodotti.

Usa i filtri di stato per concentrarti sui dati rilevanti. Di solito parto da Changed, quindi controllo Added e Removed. Lascio Unchanged per ultimo, a meno che non mi serva una traccia completa dell'audit.

Tabella di anteprima CSV Diff con filtri di stato, ricerca e azioni per copiare o scaricare
Tabella di anteprima CSV Diff con filtri di stato, ricerca e azioni per copiare o scaricare

La vista delle righe modificate è utile quando devi analizzare le differenze a livello di singola cella. Per ogni colonna modificata mostra affiancati il valore originale e quello aggiornato.

Vista delle righe modificate in CSV Diff con i valori originali e aggiornati affiancati
Vista delle righe modificate in CSV Diff con i valori originali e aggiornati affiancati

Prima dell'export, eseguo un rapido controllo di qualità:

  • I conteggi delle righe aggiunte e rimosse sono plausibili?
  • Il tool ha abbinato le righe usando la chiave prevista?
  • Sono state segnalate chiavi duplicate?
  • Le colonne sono associate correttamente?
  • Le differenze dovute soltanto alla formattazione vengono ignorate quando necessario?
  • Alcune righe modificate, una volta aperte, mostrano variazioni sensate?

La sezione di riepilogo offre un'ulteriore verifica veloce. Mostra i dettagli dell'elaborazione, le colonne associate, gli avvisi sulle chiavi duplicate e i conteggi per stato.

Schede di riepilogo CSV Diff con conteggi di righe modificate, aggiunte, rimosse e invariate, elaborazione e colonne associate
Schede di riepilogo CSV Diff con conteggi di righe modificate, aggiunte, rimosse e invariate, elaborazione e colonne associate

Se i numeri sembrano strani, non esportare ancora. Torna prima alla chiave e all'associazione delle colonne: è lì che nasce la maggior parte dei problemi.

Passaggio 6: esporta il risultato del CSV diff

Quando l'anteprima è corretta, esporta il risultato. Datablist offre diverse modalità di output in base alle tue esigenze:

  • Summary CSV: usalo per visualizzare stato delle righe, chiavi, conteggi e un riepilogo adatto all'audit.
  • Changed rows CSV: usalo quando chi riceve il file deve controllare soltanto i record che presentano differenze.
  • Full diff CSV: usalo per vedere affiancati i valori originali e quelli aggiornati.

Per il primo confronto preferisco Full diff CSV. Conserva più contesto, utile se in seguito devi spiegare una modifica. Una volta validato il flusso, passo a Changed rows CSV per ottenere un file più breve.

Puoi anche scegliere il separatore:

  • Virgola per la maggior parte dei flussi basati su fogli di calcolo.
  • Punto e virgola quando è richiesto dalle impostazioni locali o dal sistema di destinazione.
  • Pipe o tabulazione per i tool che richiedono questi formati.

Il tool permette di copiare il CSV delle differenze o di scaricarlo. I file scaricati seguono questo schema:

csv-diff-{originalBase}-vs-{updatedBase}.csv

Se il risultato esportato è voluminoso e devi filtrarlo o modificarlo prima di condividerlo, consulta la guida di Datablist per modificare file CSV di grandi dimensioni online.

Esempio di tabella di output

Ecco un piccolo esempio di come può apparire l'export Full diff per il nostro catalogo prodotti.

statuskeychanged_columnsoriginal:Priceupdated:Priceoriginal:Stockupdated:Stock
changed5901234123457Price|Stock24.9023.904238
changed5901234123471Stock9.909.90025
added590123412355616.5044
removed59012341235257.5088

Il CSV esportato può includere:

  • status: added, removed, changed o unchanged.
  • key: il valore usato per abbinare la riga.
  • __row_index_original: il numero della riga nel CSV originale, quando presente.
  • __row_index_updated: il numero della riga nel CSV aggiornato, quando presente.
  • __duplicate_key: indica se la chiave selezionata compare più di una volta.
  • changed_columns: i campi modificati.
  • changed_columns_count: il numero di campi modificati.
  • summary: un riepilogo leggibile delle modifiche.
  • Coppie original:{column} e updated:{column} per il controllo affiancato.

Questo formato mi piace perché è facile da condividere. Chi lo riceve può filtrare status = changed, ordinare per changed_columns_count oppure isolare i record aggiunti e rimossi senza ripetere il confronto.

Quando conviene confrontare i file CSV in questo modo

Questo flusso è adatto a qualsiasi situazione in cui disponi di due istantanee e vuoi sapere cosa è cambiato. Alcuni esempi:

  • Aggiornamenti di prezzi e stock nel catalogo prodotti.
  • Controllo dei feed dei fornitori prima di importare nuove offerte.
  • Export CRM prima e dopo un'attività di pulizia.
  • Aggiornamento di liste di Lead.
  • Confronto delle istantanee di inventario.
  • Verifica dei passaggi di consegne tramite fogli di calcolo.
  • Export CSV generati da un flusso di conversione JSON.

Per esempio, dopo aver convertito un JSON nidificato in CSV, puoi usare CSV Diff per confrontare due export generati. Se stai preparando record per un CRM, esegui il diff prima di un intervento più ampio di pulizia dei dati, così saprai esattamente quali righe sono cambiate.

Confrontare, unire o deduplicare: scegli il flusso giusto

Confrontare file CSV non equivale a unirli o deduplicarli. Usa CSV Diff quando la tua domanda è:

Cosa è cambiato tra queste due istantanee?

Usa un flusso di join quando la domanda è:

Come posso combinare i campi di due file?

In questo caso, consulta la guida per unire file CSV tramite un identificativo univoco.

Usa invece la deduplicazione quando vuoi sapere:

Quali record si ripetono all'interno di uno o più file?

Per farlo, consulta la guida per rimuovere i duplicati dai CSV.

La distinzione è importante, perché ogni flusso ha un obiettivo diverso. CSV Diff serve a confrontare istantanee ed esportare le differenze. Non è un tool di fuzzy matching né uno strumento di merge.

Risoluzione dei problemi e casi particolari

Le righe risultano aggiunte e rimosse invece che modificate

Controlla prima di tutto la colonna chiave. Se la chiave cambia tra i due file, Datablist non può riconoscere le due righe come lo stesso record. Verifica anche l'ordine dei file: se Original CSV e Updated CSV sono invertiti, lo saranno anche le righe aggiunte e rimosse.

Troppe celle risultano modificate

Controlla le opzioni di confronto. Attiva la rimozione degli spazi se non devono essere considerati, usa un confronto case-insensitive se maiuscole e minuscole sono irrilevanti, normalizza i valori vuoti se celle bianche e segnaposto devono coincidere e verifica l'associazione delle colonne rinominate.

I nomi delle colonne sono diversi

Usa l'associazione manuale. Associa i campi solo quando hanno lo stesso significato. Se non devono influire sul confronto, lascia le colonne estranee senza associazione.

Compaiono chiavi duplicate

Considera le chiavi duplicate come un segnale da approfondire. Il risultato può comunque essere utile, ma i duplicati indicano che l'identificativo selezionato non è abbastanza univoco. Pulisci i file di origine o scegli una chiave più solida prima di usare i conteggi per un'importazione.

Il file è lento o l'anteprima è limitata

Con i file di grandi dimensioni, le prestazioni dipendono dal browser e dal dispositivo. Usa l'anteprima per il controllo, quindi scarica il CSV diff quando ti serve il risultato completo.

L'analisi del CSV non riesce

Controlla la presenza di campi tra virgolette non chiusi, delimitatori insoliti o problemi di codifica. Basta un solo campo tra virgolette non chiuso per rendere non valido un file CSV.

Conclusione

Il modo migliore per confrontare due export CSV è trattarli come dati, non come testo. Carica il vecchio file come Original CSV e quello nuovo come Updated CSV, scegli una chiave stabile, associa le colonne, controlla gli stati delle righe ed esporta il diff.

La mia configurazione predefinita è semplice: full outer join, una chiave stabile, rimozione degli spazi iniziali e finali, normalizzazione dei valori null-like ed export Full diff per il primo controllo.

Puoi eseguire l'intero flusso con il CSV Diff tool di Datablist.

FAQ

Come posso confrontare due file CSV online?

Apri il CSV Diff tool di Datablist, carica il file meno recente come Original CSV e quello più recente come Updated CSV, scegli una colonna chiave, controlla il risultato e scarica il CSV con le differenze.

Posso confrontare file CSV tramite ID, email, SKU o EAN?

Sì. Usa l'identificativo condiviso come colonna chiave. Tra le chiavi più adatte ci sono ID record, indirizzi email, SKU, EAN, ID interni, company ID e altri valori che rimangono stabili tra gli export.

Cosa succede se le righe sono in un ordine diverso?

Usa l'abbinamento basato su una chiave. Quando le righe vengono associate tramite una chiave stabile, non è necessario che si trovino nello stesso ordine nei due file.

Posso confrontare CSV con nomi di colonna diversi?

Sì. Se i nomi sono diversi, associa manualmente le colonne. Per esempio, puoi associare customer_id in un file a Customer ID nell'altro, se rappresentano lo stesso identificativo.

Qual è il miglior tipo di join per un CSV diff?

Usa full outer join per il primo controllo. Mostra le righe abbinate, aggiunte e rimosse. Scegli inner join soltanto quando ti interessano i record presenti in entrambi i file.

Posso ignorare spazi, maiuscole e valori vuoti?

Sì. Puoi eliminare gli spazi iniziali e finali, confrontare il testo senza distinguere tra maiuscole e minuscole e considerare equivalenti i valori vuoti o i segnaposto null-like. Di solito mantengo attive la rimozione degli spazi e la normalizzazione dei valori vuoti.

Posso esportare soltanto le righe modificate?

Sì. Usa l'output Changed rows quando ti serve un file più breve da controllare. Consiglio comunque di esportare almeno una volta il Full diff, così puoi validare il confronto.

Cosa significano added, removed, changed e unchanged?

added indica che la chiave compare soltanto nel CSV aggiornato. removed indica che compare soltanto nel CSV originale. changed significa che la chiave è presente in entrambi i file, ma i valori associati sono diversi. unchanged indica che la chiave è presente in entrambi e che i valori associati coincidono.

I file CSV vengono caricati su un server?

I file CSV vengono analizzati e confrontati nel browser. Consideralo un tool di confronto basato sul browser, non un flusso di importazione o sincronizzazione con una collection Datablist.

Posso confrontare file CSV di grandi dimensioni?

Sì, ma con file molto grandi le prestazioni dipendono dal browser e dal dispositivo. L'anteprima è limitata per rimanere reattiva, mentre il CSV scaricabile viene generato a partire dal risultato completo.