Share via


Trasformazione Ricerca fuzzy

Data aggiornamento: 5 dicembre 2005

La trasformazione Ricerca fuzzy esegue attività di pulitura dei dati, ad esempio standardizzazione, correzione e inserimento di valori mancanti.

La differenza tra questa trasformazione e la trasformazione Ricerca è l'utilizzo della corrispondenza fuzzy. La trasformazione Ricerca individua i record corrispondenti nella tabella di riferimento tramite un equijoin e restituisce solo corrispondenze esatte. La trasformazione Ricerca fuzzy invece restituisce anche corrispondenze fuzzy.

La trasformazione Ricerca fuzzy viene spesso eseguita dopo la trasformazione Ricerca nel flusso di dati di un pacchetto. La trasformazione Ricerca individua innanzitutto eventuali corrispondenze esatte. Se non esiste alcuna corrispondenza esatta, la trasformazione Ricerca fuzzy individua le corrispondenze fuzzy nella tabella di riferimento.

È necessario che la trasformazione possa accedere a un'origine dei dati di riferimento contenente i valori utilizzati per la pulitura e l'estensione dei dati di input. Tale origine deve essere una tabella di un database di SQL Server 2005. La corrispondenza tra il valore di una colonna di input e il valore della tabella di riferimento può essere una corrispondenza esatta o fuzzy. La trasformazione richiede tuttavia che almeno una corrispondenza di colonna sia configurata per la corrispondenza fuzzy. Se si desidera individuare solo corrispondenze esatte, utilizzare la trasformazione Ricerca.

Questa trasformazione include un input e un output.

Nella corrispondenza fuzzy è possibile utilizzare solo colonne di input con tipi di dati DT_WSTR e DT_STR. Per la corrispondenza esatta è possibile utilizzare qualsiasi tipo di dati DTS ad eccezione di DT_TEXT, DT_NTEXT e DT_IMAGE. Per ulteriori informazioni, vedere Tipi di dati di Integration Services. I tipi di dati delle colonne che partecipano al join tra l'input e la tabella di riferimento devono essere compatibili. È ad esempio corretto unire in join una colonna con tipo di dati DTS DT_WSTR e una colonna con tipo di dati di SQL Server nvarchar, ma non una colonna con tipo di dati DT_WSTR e una colonna con tipo di dati int.

È possibile personalizzare questa trasformazione specificando la quantità di memoria massima, l'algoritmo di confronto tra righe, nonché il caching delle tabelle di riferimento e degli indici utilizzati dalla trasformazione.

La quantità di memoria utilizzata dalla trasformazione Ricerca fuzzy può essere configurata impostando la proprietà personalizzata MaxMemoryUsage. È possibile specificare il numero di megabyte (MB) oppure il valore 0, che consente alla trasformazione di utilizzare una quantità dinamica di memoria, a seconda delle esigenze e della quantità di memoria fisica disponibile. La proprietà personalizzata MaxMemoryUsage può essere aggiornata da un'espressione di proprietà al caricamento del pacchetto. Per ulteriori informazioni, vedere Guida di riferimento alle espressioni in Integration Services, Utilizzo delle espressioni di proprietà nei pacchetti e Transformation Custom Properties.

Controllo del funzionamento della corrispondenza fuzzy

La trasformazione Ricerca fuzzy include tre elementi per la personalizzazione del tipo di ricerca eseguito, ovvero numero massimo di corrispondenze da restituite per ogni riga di input, delimitatori token e soglie di somiglianza.

La trasformazione restituisce zero o più corrispondenze fino al numero massimo specificato. L'impostazione di un numero massimo di corrispondenze non garantisce la restituzione di tale numero di corrispondenze. Viene semplicemente limitato il numero di corrispondenze da restituire. Se come numero massimo di corrispondenze si imposta un valore maggiore di 1, l'output della trasformazione potrebbe includere più di una riga per ogni ricerca e alcune righe potrebbero essere duplicate.

La trasformazione utilizza un numero di delimitatori predefinito per la suddivisione in token dei dati. È tuttavia possibile aggiungere delimitatori in base alle specifiche esigenze. Il numero di delimitatori predefinito è specificato nella proprietà Delimiters. La suddivisione in token è un'operazione importante in quanto definisce le unità all'interno dei dati che vengono confrontate tra di loro.

Le soglie di somiglianza possono essere impostate a livello di componente e di join. La soglia di somiglianza a livello di join è disponibile solo quando la trasformazione esegue una corrispondenza fuzzy tra le colonne dell'input e quelle della tabella di riferimento. L'intervallo di somiglianza è compreso tra 0 e 1. I valori di somiglianza più prossimi a 1 indicano che le righe e le colonne devono essere molto simili per essere considerate duplicate. Per impostare la soglia di somiglianza, è necessario impostare la proprietà MinSimilarity a livello di componente e di join. Per soddisfare la soglia di somiglianza specificata a livello di componente, è necessario che la somiglianza di tutte le righe in tutte le corrispondenze sia maggiore o uguale alla soglia di somiglianza specificata a livello di componente. Ciò significa che è possibile specificare una corrispondenza elevata a livello di componente solo se anche le corrispondenze a livello di riga o di join sono elevate.

Ogni corrispondenza include un punteggio di somiglianza e un punteggio di probabilità. Il punteggio di somiglianza è una misura matematica della somiglianza testuale tra il record di input e il record della tabella di riferimento restituito dalla trasformazione Ricerca fuzzy. Il punteggio di probabilità indica la probabilità con cui un valore specifico risulta essere la corrispondenza migliore tra le corrispondenze individuate nella tabella di riferimento. Il punteggio di probabilità assegnato a un record dipende dagli altri record corrispondenti restituiti. Ad esempio, la corrispondenza tra Sig. e Signor restituisce un punteggio di somiglianza basso indipendentemente dalle altre corrispondenze. Se Signor è l'unica corrispondenza restituita, il punteggio di probabilità è alto. Se la tabella di riferimento include sia Signor che Sig., per Sig. la probabilità risulta elevata, mentre per Signor risulta bassa. A una somiglianza elevata tuttavia non corrisponde necessariamente una probabilità elevata. Se, ad esempio, si esegue la ricerca del valore Capitolo 4, i risultati Capitolo 1, Capitolo 2 e Capitolo 3 avranno un punteggio di somiglianza elevato, ma un punteggio di probabilità basso in quanto non è chiaro quale dei risultati sia la corrispondenza migliore.

Il punteggio di somiglianza è rappresentato da un valore decimale compreso tra 0 e 1, dove 1 indica una corrispondenza esatta tra il valore della colonna di input e il valore della tabella di riferimento. Il punteggio di probabilità, rappresentato da un valore decimale compreso tra 0 e 1, indica la probabilità della corrispondenza. Se non viene individuata alcuna corrispondenza utilizzabile, alla riga viene assegnato un punteggio di somiglianza e di probabilità pari a 0 e le colonne di output copiate dalla tabella di riferimento includeranno valori Null.

In alcuni casi la ricerca fuzzy non restituisce corrispondenze appropriate nella tabella di riferimento. Ciò si verifica se il valore di input utilizzato per la ricerca è una singola parola breve. Ad esempio, teto non viene restituito come corrispondenza del valore tetto in una tabella di riferimento che non include altri token nelle colonne della riga.

Le colonne di output della trasformazione corrispondono alle colonne di input contrassegnate come colonne pass-through, alle colonne selezionate nella tabelle di ricerca e alle colonne seguenti:

  • _Similarity, colonna che descrive la somiglianza tra i valori della colonna di input e di riferimento.
  • _Confidence, colonna che descrive la probabilità della corrispondenza.

Sfruttando la connessione al database di SQL Server 2005, la trasformazione crea le tabelle temporanee utilizzate dall'algoritmo per individuare le corrispondenze fuzzy.

Esecuzione della trasformazione Ricerca fuzzy

All'avvio della trasformazione nel pacchetto, viene innanzitutto copiata la tabella di riferimento, viene aggiunta una chiave con tipo di dati integer nella nuova tabella e viene creato un indice nella colonna chiave. Quindi, nella copia della tabella di riferimento, viene creato un indice, denominato indice delle corrispondenze. In questo indice vengono archiviati i risultati della suddivisione in token dei valori delle colonne di input della trasformazione. I token vengono quindi utilizzati dalla trasformazione durante l'operazione di ricerca. L'indice delle corrispondenze è una tabella di un database di SQL Server 2005.

Alla successiva esecuzione del pacchetto, la trasformazione utilizza un indice delle corrispondenze esistente oppure ne crea uno nuovo. Se la tabella di riferimento è statica, il pacchetto può evitare la rigenerazione dell'indice per le sessioni di pulitura dei dati successive, operazione potenzialmente costosa in termini di risorse. Se si sceglie di utilizzare un indice esistente, l'indice viene creato alla prima esecuzione del pacchetto. Se si eseguono più trasformazioni Ricerca fuzzy basate sulla stessa tabella di riferimento, viene utilizzato lo stesso indice in tutte le trasformazioni. Per poter riutilizzare l'indice, è necessario che le operazioni di ricerca siano identiche e che nella ricerca vengano utilizzate le stesse colonne. È possibile assegnare un nome all'indice e selezionare la connessione al database di SQL Server in cui viene salvato l'indice.

Se la trasformazione salva l'indice delle corrispondenze, l'indice può essere mantenuto in modo automatico. Ciò significa che in corrispondenza di ogni aggiornamento di un record della tabella di riferimento viene aggiornato anche l'indice delle corrispondenze. La manutenzione dell'indice delle corrispondenze consente di ridurre i tempi di elaborazione, in quanto non è necessario creare nuovamente l'indice quando il pacchetto viene eseguito. È possibile impostare la modalità con cui la trasformazione gestisce l'indice delle corrispondenze.

Nella tabella seguente vengono descritte le opzioni per l'indice delle corrispondenze.

Opzione Descrizione

GenerateAndMaintainNewIndex

Crea un nuovo indice, lo salva e ne esegue la manutenzione. Nella tabella di riferimento la trasformazione installa trigger per la sincroninzzazione tra la tabella di riferimento e la tabella dell'indice.

GenerateAndPersistNewIndex

Crea un nuovo indice e lo salva, ma non ne esegue la manutenzione.

GenerateNewIndex

Crea un nuovo indice, ma non lo salva.

ReuseExistingIndex

Riutilizza un indice esistente.

Manutenzione della tabella dell'indice delle corrispondenze

L'opzione GenerateAndMaintainNewIndex consente di installare i trigger nella tabella di riferimento per mantenere la sincronizzazione tra la tabella dell'indice delle corrispondenze e la tabella di riferimento. Prima di rimuovere il trigger installato, è necessario eseguire la stored procedure sp_FuzzyLookupTableMaintenanceUnInstall e specificare come valore del parametri di input il nome riportato nella proprietà MatchIndexName.

Non eliminare la tabella dell'indice delle corrispondenze prima di eseguire la stored procedure sp_FuzzyLookupTableMaintenanceUnInstall. Se si esegue questa operazione, i trigger della tabella di riferimento non verranno eseguiti correttamente. I successivi aggiornamenti della tabella di riferimento avranno esito negativo fino a quando i trigger della tabella non vengono eliminati in modo manuale.

Il comando SQL TRUNCATE TABLE non richiama trigger DELETE. Se si esegue il comando TRUNCATE TABLE sulla tabella di riferimento, la tabella e l'indice delle corrispondenze non saranno più sincronizzati e la trasformazione Ricerca fuzzy avrà esito negativo. Mentre i trigger per la manutenzione della tabella dell'indice delle corrispondenze sono installati nella tabella di riferimento, è necessario eseguire il comando SQL DELETE anziché TRUNCATE TABLE.

Confronto tra righe

Quando si configura la trasformazione Ricerca fuzzy è possibile specificare l'algoritmo di confronto utilizzato per individuare i record corrispondenti nella tabella di riferimento. Se si imposta la proprietà Exhaustive su True, la trasformazione confronta ogni riga dell'input con ogni riga della tabella di riferimento. Questo algoritmo di confronto restituisce in genere risultati più precisi, ma la trasformazione viene eseguita più lentamente, a meno che la tabella di riferimento non includa un numero di righe ridotto. Se si imposta la proprietà Exhaustive su True, l'intera tabella di riferimento viene caricata in memoria. Per evitare un impatto negativo sulle prestazioni, è consigliabile impostare la proprietà Exhaustive su True solo in fase di sviluppo dei pacchetti.

Se la proprietà Exhaustive è impostata su False, la trasformazione Ricerca fuzzy restituirà solo le corrispondenze che hanno almeno una sottostringa (detta q-gramma) o un token indicizzato in comune con il record di input. Per ottimizzare l'efficienza delle ricerche, viene indicizzato solo un subset dei token in ogni riga della tabella nella struttura con indice invertito utilizzata dalla trasformazione Ricerca fuzzy per individuare le corrispondenze. Quando il set di dati in input è di piccole dimensioni, è possibile impostare Exhaustive su True per evitare di ignorare le corrispondenze per cui non esistono token comuni nella tabella dell'indice.

Caching di indici e tabelle di riferimento

Quando si configura la trasformazione Ricerca fuzzy, è possibile specificare se l'indice e la tabella di riferimento devono prima essere inseriti parzialmente nella memoria cache. Se si imposta la proprietà WarmCaches su True, l'indice e la tabella di riferimento vengono caricati in memoria. Se l'input include molte righe, l'impostazione della proprietà WarmCaches su True può comportare un miglioramento delle prestazioni della trasformazione. Se invece il numero delle righe di input è ridotto, l'impostazione della proprietà WarmCaches su False può rendere più veloce il riutilizzo di un indice di grandi dimensioni.

Tabelle e indici temporanei

In fase di esecuzione la trasformazione Ricerca fuzzy crea oggetti temporanei, ad esempio tabelle e indici, nel database di SQL Server 2005 a cui la trasformazione si connette. Le dimensioni delle tabelle e degli indici temporanei sono proporzionali al numero di righe e token della tabella di riferimento e al numero di token creati dalla trasformazione Ricerca fuzzy. Questi oggetti temporanei pertanto possono utilizzare potenzialmente una quantità di spazio su disco considerevole. La trasformazione esegue inoltre query sulle tabelle temporanee. È pertanto consigliabile eseguire la connessione della trasformazione Ricerca fuzzy a un'istanza di un database di SQL Server non di produzione, soprattutto se lo spazio su disco disponibile nel server di produzione è ridotto.

Le prestazioni della trasformazione possono risultare migliori se le tabelle e gli indici utilizzati si trovano sullo stesso computer locale. Se la tabella di riferimento utilizzata dalla trasformazione Ricerca fuzzy si trova nel server di produzione, è consigliabile copiarla in un server non di produzione e configurare la trasformazione per l'accesso alla copia della tabella. In tal modo le risorse del server di produzione non vengono utilizzate dalle query di ricerca. La trasformazione Ricerca fuzzy, inoltre, mantiene l'indice delle corrispondenze, ovvero se MatchIndexOptions è impostata su GenerateAndMaintainNewIndex la tabella di riferimento potrebbe risultare bloccata per l'intera durata dell'operazione di pulitura dei dati per impedirne l'accesso da parte di altri utenti e applicazioni.

Configurazione della trasformazione Ricerca fuzzy

È possibile impostare le proprietà tramite Progettazione SSIS o a livello di programmazione.

Per ulteriori informazioni sulle proprietà che è possibile impostare nella finestra di dialogo Editor trasformazione Ricerca fuzzy, fare clic su uno degli argomenti seguenti:

Per ulteriori informazioni sulle proprietà che è possibile impostare nella finestra di dialogo Editor avanzato o a livello di programmazione, fare clic su uno degli argomenti seguenti:

Per ulteriori informazioni sulle procedure per l'impostazione delle proprietà, fare clic su uno degli argomenti seguenti:

Vedere anche

Concetti

Trasformazione Ricerca
Trasformazione Raggruppamento fuzzy
Trasformazioni di Integration Services

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta della descrizione della proprietà personalizzata MaxMemoryUsage.
  • Aggiunta della definizione di q-gramma.
Contenuto modificato:
  • Descrizione del comportamento della proprietà Exhaustive.