Database
 sql >> Database >  >> RDS >> Database

Carico incrementale in SSIS

Le persone hanno sempre più fretta. Vogliono i loro dati quasi subito. E ancora di più, i dati stanno diventando sempre più grandi. Quindi, non puoi usare le buone vecchie tecniche perché sono "abbastanza buone". Deve essere veloce. E i passaggi ETL non sono un'esenzione. È qui che entra in gioco il carico incrementale. E se sei su questa pagina, probabilmente stai cercando un carico incrementale in SSIS.

E questo è il nostro obiettivo in questo articolo. Faremo confronti ed esempi per spiegare passo dopo passo il caricamento incrementale dei dati in SSIS. E stai certo che non ti spaccherà la testa a capirlo.

Ecco cosa ti aspetta:

  • Cosa sono il carico completo e il carico incrementale in ETL?
  • Che cos'è il caricamento incrementale dei dati in SSIS?
  • Le differenze tra carico completo e carico incrementale in SSIS
  • Caricamento incrementale in SSIS utilizzando CDC o Change Data Capture
  • Carico incrementale in SSIS utilizzando le colonne DateTime
  • Come eseguire il caricamento incrementale in SSIS utilizzando Lookup
  • Il miglior strumento per il caricamento dei dati SSIS

Ogni sezione avrà delle sottosezioni. Puoi passare all'argomento di cui hai bisogno facendo clic sui collegamenti.

Prima di iniziare con gli esempi, confrontiamo il carico incrementale con il suo opposto, il carico completo.

Cosa sono il carico completo e il carico incrementale in ETL

Indipendentemente dagli strumenti ETL utilizzati, i carichi completi e incrementali hanno lo stesso significato. Descriviamoli di seguito.

Carico completo in ETL

Come suggerisce il nome, Full Load in ETL sta caricando TUTTI i dati dall'origine alla destinazione. Una tabella di destinazione viene troncata prima di caricare tutto dall'origine. Ecco perché questa tecnica è anche nota come Carico distruttivo . Questa tecnica è anche più facile da fare. E questo garantisce anche la massima integrità dei dati. Ma la dimensione dei tuoi dati oggi è maggiore di ieri. Quindi, se lo usi su dati in continua crescita, il processo diventerà più lento nel tempo.

Casi d'uso ETL a pieno carico

  • La dimensione dei dati di origine è piccola e non aumenterà in modo significativo negli anni a venire. Gli esempi includono un elenco di colori, alcune categorie/classificazioni, un elenco di paesi e città e molti altri.
  • È difficile dire cosa sia nuovo o cambiato nella fonte.
  • I dati devono essere esattamente gli stessi dall'origine alla destinazione
  • La cronologia dei dati è irrilevante e viene sovrascritta più spesso

Carico incrementale in ETL

Nel frattempo, anche il carico incrementale è come suggerisce il nome. Solo i dati modificati verranno caricati dalla sorgente alla destinazione. Questo viene fatto in modo incrementale nel tempo. Quelli che non sono cambiati rimarranno così come sono. Questo è un po' difficile da fare. È necessario assicurarsi che tutte le modifiche siano state raccolte e caricate nella destinazione. Ma questo funzionerà più velocemente di Full Load su dati molto grandi.

Casi d'uso del carico incrementale ETL

  • La dimensione dei dati è molto grande e l'esecuzione di query sarà molto lenta per set di risultati di grandi dimensioni
  • Le modifiche sono facili da interrogare
  • I dati eliminati devono essere conservati nella destinazione, come un sistema di audit

Che cos'è il carico incrementale in SSIS

I componenti di base di un carico incrementale in SSIS sono mostrati nella Figura 1.

Il caricamento incrementale in SSIS tende a essere più complesso a seconda delle tue esigenze. Ma la semplice "scheda delle ricette" nella Figura 1 include ciò di cui hai bisogno per "cucinare" i dati in incrementi. Catturare le modifiche nei dati è la parte difficile. Puoi sbagliare la destinazione se non stai attento.

Nelle sezioni successive, vedrai come eseguire il caricamento incrementale in SSIS con esempi. Questi includono l'uso di ChangeData Capture (CDC), colonne DateTime e ricerche. Vedrai anche come farlo usando i componenti Devart SSIS.

Confrontiamo il carico incrementale con il carico completo in SSIS nella sezione successiva.

La differenza tra carico completo e carico incrementale in SSIS

Hai già visto come appare il carico incrementale in SSIS (Figura 1). Nel frattempo, ecco come funziona con il carico completo SSIS nella Figura 2 di seguito.

La differenza tra carico completo e carico incrementale in SSIS è nella progettazione del pacchetto. Un progetto a pieno carico richiede meno componenti trascinati nel pacchetto SSIS. È così semplice che c'è poco da pensare. Ecco perché per un falso senso di produttività, alcuni sviluppatori tendono a ricorrere a questa tecnica la maggior parte delle volte.

Ma l'esecuzione di un pacchetto di progettazione a pieno carico ogni notte non è consigliabile per dati di grandi dimensioni, ad esempio 15 TB. Pensi che finirà in tempo prima che gli utenti arrivino al mattino? Ciò non accadrà perché stai cercando di reinserire i record che non sono cambiati affatto. Se si tratta di circa il 70% dei dati, hai bisogno di più tempi di inattività a seconda delle risorse del server.

È inaccettabile.

Quindi, più è necessario utilizzare il carico incrementale in questi scenari. Nelle sezioni seguenti imparerai come caricare i dati più velocemente utilizzando il caricamento incrementale.

Caricamento incrementale inSSIS utilizzando CDC

Innanzitutto, consideriamo l'utilizzo di Change Data Capture (CDC). Nota che da qui ai prossimi 3 esempi utilizzeremo semplici esempi. Quindi, il design del pacchetto non offusca l'obiettivo.

Prima di iniziare con l'esempio, questa sezione tratterà quanto segue:

  • In primo luogo, come abilitare CDC in un database e in una tabella
  • Quindi, creando il pacchetto SSIS per il caricamento incrementale SSIS utilizzando CDC
  • Infine, correndo e controllando i risultati

La figura 3 mostra i componenti di questo esempio.

Change Data Capture (CDC) registra inserimenti, eliminazioni e aggiornamenti in una tabella. Prima di poter far funzionare questo esempio, sono necessari un database e una tabella configurati per CDC.

Come abilitare CDC in un database e in una tabella

Le impostazioni del database e della tabella sono predefinite senza CDC. Per rendere un database abilitato per CDC, ecco la sintassi T-SQL:

-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

Quindi, per verificare se CDC è effettivamente abilitato, esegui questo:

select name from sys.databases
where is_cdc_enabled=1

Se viene visualizzato il nome del database che hai abilitato per CDC, sei a posto. Il tuo database è ora abilitato per CDC.

Ma non finisce qui. È necessario indicare quale tabella si desidera monitorare per eventuali modifiche. La sp_cdc_enable_table farà il trucco. Di seguito è riportato un esempio.

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

L'esecuzione del codice sopra dovrebbe comportare messaggi simili di seguito:

Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Questi messaggi sono i 2 nuovi processi di SQL Server Agent creati dopo aver abilitato una tabella per CDC. Ecco perché hai bisogno di SQL Server Agent per far funzionare CDC. Vedi uno screenshot nella Figura 4.

Effettuare inserimenti, eliminazioni e aggiornamenti su sportsCarSales table registrerà automaticamente le modifiche in un'altra tabella denominata cdc.dbo_sportsCarSales_CT . Questa tabella ha colonne come l'originale. Vedi uno screenshot nella Figura 5.

L'_$operazione colonna nella tabella di sinistra è di particolare interesse. I valori possibili per questa colonna sono 1(Elimina), 2 (Inserisci), 3 e 4 (Aggiorna). L'aggiornamento utilizza 2 valori:uno per i valori di colonna prima l'aggiornamento (sono 3). E l'altro per i valori di colonna dopo l'aggiornamento (che è 4). Puoi controllare questa colonna quando controlli i valori prima di eseguire il pacchetto SSIS. La Fonte CDCS e Separatore CDC i componenti utilizzano questa tabella per identificare le modifiche. Maggiori informazioni su questi nella prossima sezione.

Creazione del pacchetto SSIS per il carico incrementale SSIS tramite CDC

Di seguito sono riportati i passaggi per la creazione del pacchetto SSIS con caricamento incrementale tramite CDC. Ciò presuppone che tu abbia già un pacchetto vuoto in Visual Studio 2019. Il nostro obiettivo qui è caricare le righe da sportsCarSales tablein FactSportsCarSales tabella dei fatti in un data warehouse.

Di seguito il riepilogo dei passaggi:

PASSO 1. Crea 2 gestori di connessione al database
PASSO 2. Trascina 2 attività di controllo CDC nel flusso di controllo
PASSO #3. Trascina un'attività di flusso di dati e connettiti all'attività di controllo CDC

PASSO #1. Crea 2 gestori di connessione al database

Abbiamo bisogno di 2 connessioni al database qui. Uno è la connessione ADO.Net che dovrebbe puntare al database abilitato per CDC. Quindi, creare una connessione OLE DB a un data warehouse come destinazione. Entrambi sono database di SQL Server 2019. Vedere le figure 6 e 7 di conseguenza. In questo esempio, entrambi i database si trovano sulla stessa macchina. E stiamo usando l'autenticazione di Windows per connetterci.

Quindi, nei Gestione connessioni finestra, fare clic con il pulsante destro del mouse e selezionare Nuova connessione ADO.Net . Quindi, compila le impostazioni del server, dell'autenticazione e del database come mostrato nella Figura 6 di seguito.

Quindi creare una connessione OLE DB al data warehouse. Nella finestra Gestione connessioni, fai clic con il pulsante destro del mouse e seleziona Nuova connessione OLE DB . Quindi, compila il server, l'autenticazione e il nome del database. Specifica qui il data warehouse.

PASSAGGIO #2. Trascina 2 attività di controllo CDC nel flusso di controllo

Ci sono 2 cose che dobbiamo fare dopo aver trascinato un'attività di controllo CDC nel flusso di controllo.

Segna CDC Start

Innanzitutto, è necessario configurare l'attività di controllo CDC per contrassegnare l'avvio di CDC. Quindi, crea una tabella di stato CDC. Questo può essere fatto in una finestra di configurazione. Vedere la Figura 8 di seguito.

Seguendo i passaggi numerati nella Figura 9, di seguito sono riportati i dettagli.

  1. Seleziona la connessione ADO.Net che abbiamo creato nella Figura 6.
  2. Quindi, seleziona Contrassegna inizio CDC .
  3. Fai clic su Nuovo per creare una variabile di stato CDC. Quindi, apparirà una finestra. Fai clic su OK per creare il nome della variabile predefinita Utente::Stato_CDC .
  4. Seleziona la connessione ADO.Net in modo da poter memorizzare lo stato CDC in quel database.
  5. Fai clic su Nuovo per creare una tabella per la memorizzazione dello stato. Lo script è già stato creato per te. Quindi, fai clic su Esegui nella finestra successiva.
  6. Quindi, seleziona Stato_CDC come nome dello stato.
  7. Infine, fai clic su OK .

Dopo aver configurato questa attività di controllo CDC, eseguire il pacchetto. Non vedrai ancora i record copiati nell'altro database. Ma la tabella di stato (dbo.cdc_state ) verrà popolato con i valori iniziali.

Da qui, puoi scegliere di disabilitare questa attività di controllo CDC o sovrascriverla di nuovo con nuovi valori nell'attività successiva.

Ottieni intervallo di elaborazione

O trascini una nuova attività di controllo CDC nel flusso di controllo o sovrascrivi quella precedente. La configurazione è la stessa della Figura 9, ad eccezione dell'operazione di controllo CDC (#2). Questa volta, seleziona Ottieni intervallo di elaborazione . Quindi, fai clic su OK . Collegalo all'attività del flusso di dati nel PASSO 3 in seguito.

Segna intervallo elaborato

Configura l'altra attività di controllo CDC come la prima, ma questa volta seleziona Segna intervallo elaborato per l'operazione di controllo CDC. Collega l'attività del flusso di dati nel PASSAGGIO 3 a questo.

Fase #3. Trascina un'attività del flusso di dati e connettiti all'attività di CDCControl

Questa attività del flusso di dati eseguirà l'estrazione e il caricamento come mostrato nella Figura 3 in precedenza. Prima di approfondire i dettagli di ogni passaggio, ecco un riepilogo:

A. Aggiungi una sorgente CDC
B. Aggiungi uno splitter CDC e collegalo alla sorgente CDC
C. Aggiungere un comando OLE DB per eliminare i record
D. Aggiungere una destinazione OLE DB per inserire i record
E. Aggiungi un altro comando OLE DB per aggiornare i record

Ora, tuffiamoci.

A. Aggiungi una sorgente CDC

Trascina una Sorgente CDC componente con le impostazioni mostrate nella Figura 9 di seguito.

Seguendo i passaggi numerati nella Figura 9, i dettagli sono i seguenti:

  1. In primo luogo, seleziona la connessione ADO.Net che abbiamo creato nella Figura 6.
  2. Quindi, seleziona la tabella abilitata per CDC sportsCarSales .
  3. Seleziona l'istanza di acquisizione dbo_SportsCarSales .
  4. Quindi, seleziona Netto per la modalità di elaborazione CDC. Ciò restituirà solo le modifiche nette. Per una descrizione dettagliata di ciascuna modalità di elaborazione, consulta questo link. Puoi anche fare clic su Anteprima per vedere quali righe verranno incluse.
  5. Seleziona la variabile di stato CDC che abbiamo creato in precedenza (Figura 9).
  6. Infine, fai clic su OK .
B. Aggiungi uno splitter CDC e collegalo alla sorgente CDC

L'unico requisito di uno splitter CDC è una Sorgente CDC precedente. Quindi, collega la Sorgente CDC prima a questo componente. Questo separerà le modifiche a inserimenti, aggiornamenti ed eliminazioni.

C. Aggiungi un comando OLE DB per eliminare i record

Innanzitutto, è necessario etichettare questo componente come Elimina record (vedere la figura 3). Quindi, collegalo allo splitter CDC. Quando viene visualizzato un messaggio, seleziona EliminaOutput per l'output e fare clic su OK .

Quindi, configura il comando OLE DB Gestione connessioni scheda. Vedi figura 10.

Successivamente, nelle Proprietà del componente scheda, specificare il comando DELETE per SQLCommand proprietà. Il comando dovrebbe essere questo:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Vedi uno screenshot nella Figura 11 di seguito.

Il punto interrogativo creerà un parametro per SalesID . Ciascun ID vendite valore proveniente da CDCSplitter verrà utilizzato per eliminare le righe in FactSportsCarSales tabella.

Quindi, nelle Mapping delle colonne scheda, mappare il SalesID colonna della tabella al parametro (Param_0 ) Vedi figura 12.

Infine, fai clic su OK.

D. Aggiungi una destinazione OLE DB per inserire i record

Innanzitutto, trascina una Destinazione OLE DB . Quindi, etichettalo Inserisci record . Collegalo allo splitter CDC . Quindi, seleziona InserisciOutput quando viene visualizzata una finestra di richiesta. Vedere la Figura 14 per le impostazioni di base.

Seguendo i passaggi numerati nella Figura 13, di seguito sono riportati i dettagli:

  1. Innanzitutto, seleziona la connessione OLE DB creata nella Figura 7.
    Quindi, seleziona FactSportsCarSales tabella dei fatti.
  2. Infine, fai clic su OK .
E. Aggiungi un comando OLE DB per aggiornare i record

Trascina un altro comando OLE DB ed etichettalo Aggiorna record. Quindi, collegalo allo splitter CDC . Sceglierà automaticamente UpdateOutput produzione. I Gestori di connessione l'impostazione della scheda dovrebbe essere la stessa della Figura 11.

Ma il Component PropertiesSQLCommand dovrebbe avere un valore come questo:

UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

Il numero di punti interrogativi nel codice sopra ti dirà quanti parametri usare a partire da Param_0 .La posizione dei parametri da Param_0 a Param_5 è organizzato in base alla loro posizione nel codice. Quindi, Param_0 isfor ID cliente , Param_1 è per SportsCarID , e così via.

Dai un'occhiata alle Mappatura delle colonne nella Figura 15.

Dopo aver configurato CDC a livello di database e tabella, il modo per verificare se CDC funziona è aggiungere e modificare righe. Quindi, aggiungiamo alcuni record alla tabella.


USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

Per vedere se questo è registrato in CDC è necessario interrogare il cdc.dbo_sportsCarSales_CT tabella.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Controlla i risultati nell'acquisizione dei dati di modifica dopo il comando INSERT nella Figura 15.

Quindi, ha registrato gli inserti. Va bene.

Ora, prova a eseguire il pacchetto SSIS in precedenza. Il risultato dovrebbe essere lo stesso della Figura 16 di seguito.

Figura 16 . Risultato di runtime del pacchetto SSIS per il caricamento incrementale tramite CDC.

E infine, interrogando i risultati in FactSportsCarSales la tabella rivela lo stesso insieme di 4 record.

Carico incrementale in SSIS utilizzando le colonne DateTime

Il carico incrementale in SSIS usando DateTimecolumns è un altro modo per raccogliere dati in modo incrementale. Se ti capita di eseguire ETL in una tabella senza CDC, questa è la tua prossima opzione.

La tabella di origine potrebbe avere un Modificato o Ultimo aggiornamento colonna come quella della Figura 17.

Interrogare le modifiche significa conoscere il massimo Modificato valore della colonna dalla destinazione. Quindi, interroga tutti i record dall'origine che hanno maggiore di Modificato columnvalue dalla destinazione.

Gli ingredienti tipici di questa tecnica sono mostrati nella Figura 18.

Si prega di seguire le istruzioni su come cucinare questo tipo di carico incrementale. Di seguito sono riportati gli argomenti secondari di questa sezione:

  • Creazione del pacchetto per eseguire il caricamento incrementale SSIS con colonne DateTime
  • Risultati di runtime del pacchetto

Creazione del pacchetto per eseguire il caricamento incrementale SSIS con colonne DateTime

Il nostro obiettivo è caricare le SportsCars tabella in dimSportsCars tabella delle dimensioni in un altro database. Di seguito è riportato un riepilogo dei passaggi:

PASSO 1. Crea 2 gestori di connessione OLE DB
PASSO 2. Crea 2 variabili di pacchetto
PASSO #3. Aggiungi un Esegui attività SQL nel flusso di controllo
PASSO #4. Aggiungi un Attività flusso di dati

Cominciamo.

PASSO #1. Crea 2 gestori di connessione OLE DB

La prima connessione OLE DB proviene da un database transazionale. E le impostazioni sono semplici, come mostrato nella Figura 19.

Quindi creare un'altra connessione OLE DB al data warehouse. Dovrebbe essere lo stesso della Figura 7.

PASSAGGIO #2. Crea 2 variabili di pacchetto

La prima variabile conterrà la data dell'ultima modifica da dimSportsCars tabella dimensionale. Quindi, il secondo conterrà la query SQL personalizzata.

A. Crea la variabile utente::sportsCars_lastUpdate
  1. Nelle Variabili finestra, fai clic su Aggiungi variabile .
  2. Nominalo sportsCars_lastupdate .
  3. Imposta il tipo di dati su DateTime .
B. Crea l'utente::sqlCommand Variable
  1. Nelle Variabili finestra, fai clic su Aggiungi variabile .
  2. Denominalo sqlCommand .
  3. Imposta il tipo su Stringa .
  4. Fai clic sul pulsante con i puntini di sospensione per creare l'Espressione . Vedere la Figura 21 per il Generatore di espressioni finestra e l'espressione stringa effettiva.
  5. Fai clic su OK .

La stringa SQL dovrebbe essere così:

"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Si noti che abbiamo impostato la clausola WHERE su Modificata maggiore di Utente::sportsCars_lastupdate .

Ci saranno maggiori dettagli sull'impostazione delle 2 variabili nei passaggi successivi.

PASSO #3. Aggiungi un'attività Esegui SQL nel flusso di controllo

Questa attività eseguirà una query sulla tabella di destinazione per ottenere l'ultima Modificata valore della data. Trascina un Esegui attività SQL al flusso di controllo. Quindi, etichettalo Ottieni la data dell'ultima modifica da DW . Quindi, vedere le impostazioni nella Figura 21.

Le proprietà importanti da impostare qui sono la Connessione , IstruzioneSQL e ResultSet proprietà.

Imposta la Connessione proprietà alla seconda connessione OLE DB impostata in STEP #1. Quindi, imposta SQLStatement proprietà al codice sottostante.

select max(modified) as LastUpdate from dimSportsCars

Quindi, imposta il ResultSet proprietà su una Riga singola .

Infine, devi mappare LastUpdate alias di colonna (vedi codice sopra) all'Utente::sportsCars_lastupdate variabile. Vedi uno screenshot nella Figura 22.

Infine, fai clic su OK per salvare le nuove impostazioni.

PASSO #4. Aggiungi un'attività di flusso di dati

Trascina un Attività flusso di dati al Flusso di controllo e collegare Esegui attività SQL ad esso. Quindi, etichetta l'Attività flusso di dati Aggiorna la dimensione dimSportsCars . Quindi, segui i passaggi per aggiungere componenti all'Attività flusso di dati .

L'Attività Flusso di dati ha diversi passaggi al suo interno:

A. Aggiungere un'origine OLE DB
B. Aggiungere una trasformazione di ricerca per confrontare l'origine con la destinazione
C. Aggiungere un comando OLE DB per aggiornare i record
D. Aggiungi una destinazione OLE DB per inserire i record

Ora iniziamo.

A. Aggiungi un'origine OLE DB

Questa fonte OLE DB interrogherà la tabella di origine per i record modificati. Vedere le impostazioni in Figura 23.

Seguendo i numeri in Figura 23, ecco i dettagli:

  1. In primo luogo, specifica la connessione OLE DB che abbiamo creato. Vedi figura 20.
  2. Quindi, imposta la Modalità di accesso ai dati a comando SQL da la variabile .
  3. Quindi, seleziona la variabile User::sqlCommand che abbiamo creato in precedenza. Vedi figura 21.
  4. Infine, fai clic su OK .
B. Aggiungi una trasformazione di ricerca per confrontare la sorgente con la destinazione

Ora, dobbiamo avere un modo per confrontare le tabelle di origine e di destinazione. Possiamo usare la Ricerca Componente di trasformazione per farlo. Questo eseguirà un join tra le 2 tabelle.

Quindi, trascina una Ricerca Trasformazione nel flusso di dati e denominarlo Classifica la modifica . Quindi, collegalo alla Sorgente OLE DB prima. Fare doppio clic su di esso. Vedere la Figura 24 per l'impostazione del Generale pagina.

Imposta il menu a discesa su Reindirizza le righe a nessun output di corrispondenza come mostrato nella Figura 24. Ciò significa che utilizzeremo le righe che non hanno corrispondenze. E in questo caso serve per rilevare le righe presenti nella sorgente ma non nella destinazione.

Quindi, fai clic su Connessione pagina nel riquadro sinistro dell'Editor trasformazione ricerca . Quindi, vedere la Figura 25 su cosa impostare.

Nella Figura 26 è necessario specificare la connessione OLE DB per la tabella di destinazione. (Vedi Figura 7). Quindi, imposta la query SQL sul codice seguente.

SELECT SportsCarID from dimSportsCars

Abbiamo solo bisogno di SportsCarID colonna da confrontare, quindi abbiamo usato una query invece dell'intera tabella.

Quindi, fai clic su Colonne pagina per impostare il mapping della colonna della chiave della query di origine alla destinazione. Vedere la Figura 26 per la mappatura.

Come mostrato nella Figura 26, dovrebbe esserci una linea dall'origine alla destinazione utilizzando SportsCarID colonna chiave. Entrambe le colonne chiave verranno utilizzate per il confronto.

Infine, fai clic su OK .

C. Aggiungi un comando OLE DB per aggiornare i record

Questa parte aggiornerà i record che hanno SportsCarID corrispondenti valori chiave dalla Ricerca Trasformazione.

Quindi, trascina un comando OLE DB nel flusso di dati e denominarlo Aggiorna dimSportsCars . Quindi, collegalo a Cerca Trasformazione prima. Quando viene visualizzato un messaggio, impostare l'Output a Cerca l'output di corrispondenza . Quindi, fai clic su OK .

Fare doppio clic sul comando OLE DB e imposta le proprietà in Gestione connessioni scheda. Vedi figura 27.

La Figura 27 mostra che è necessario impostare Gestione connessioni al database di destinazione (vedere la figura 8). Quindi, fai clic su Proprietà del componente scheda. Vedere la Figura 28 per le impostazioni delle proprietà.

La proprietà SQLCommand è impostata su:

UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Abbiamo già fatto qualcosa di simile in precedenza. I punti interrogativi sono segnaposto dei parametri. E se mappiamo la colonna di origine corretta, verrà impostata la colonna di destinazione corrispondente. Vedi le mappature nella Figura 29.

Infine, fai clic su OK .

D. Aggiungi una destinazione OLE DB per inserire i record

Questa parte inserirà i nuovi record trovati in SportsCars tavolo in dimSportsCars dimensionabile.

Quindi, trascina una Destinazione OLE DB componente e denominarlo Inserisci nuovi record in dimSportsCars. Fare doppio clic su di esso e impostare la connessione e la tabella di destinazione. Vedi figura 30.

Come mostrato in Figura 30, imposta la connessione al data warehouse (Figura 8) e seleziona dimSportsCars tabella delle dimensioni.

Quindi, fai clic su Mapping pageper vedere se le colonne sono mappate di conseguenza. Poiché i nomi delle colonne sono gli stessi sia nell'origine che nella destinazione, verranno mappati automaticamente.

Infine, fai clic su OK .

Risultati di runtime del pacchetto

Ora che il pacchetto è completo, ecco uno screenshot del risultato nella Figura 31.

Il processo ha aggiornato 8 righe e ha inserito 1 nuova riga in dimSportsCars tabella delle dimensioni.

Carico incrementale in SSIS utilizzando la ricerca

Un altro metodo per eseguire il carico incrementale consiste nel confrontare l'origine dalla destinazione per vedere cosa deve essere inserito, aggiornato ed eliminato. E questa è la tua opzione se non ci sono colonne DateTime e CDCon in entrambe le tabelle. Un modo per farlo è utilizzare Cerca Trasformazione.

Gli ingredienti tipici di questo approccio sono mostrati nella Figura 32.

Si noti che l'approccio semplice nella Figura 32 è applicabile per le tabelle che non consentono le eliminazioni definitive. Se è necessario gestire le eliminazioni, potrebbe essere applicabile un join unito che utilizza un join completo.

Ci sono 2 sottoargomenti per questa sezione:

Creazione del pacchetto SSIS per il carico incrementale SSIS tramite Lookup
Risultati di runtime del pacchetto

Entriamo.

Creazione del pacchetto SSIS per il carico incrementale SSIS utilizzando la ricerca

Il nostro obiettivo qui è caricare le righe di Produttori tabella nei dimManufacturers dimensionabile.

Ciò presuppone che tu abbia un pacchetto SSIS vuoto pronto.

Di seguito il riepilogo dei passaggi:

PASSO 1. Crea 2 connessioni OLE DB
PASSO 2. Aggiungi un'attività di flusso di dati

Cominciamo con l'esempio.

PASSO #1. Crea 2 connessioni OLE DB

È possibile fare riferimento alla Figura 19 per l'origine e alla Figura 7 per la destinazione. Stiamo usando gli stessi Connection Manager qui.

PASSAGGIO #2. Aggiungi un'attività di flusso di dati

Trascina un Attività flusso di dati nel flusso di controllo e denominarlo Aggiorna tabella dimensioni produttori. Fare doppio clic su di esso e seguire i passaggi successivi. Di seguito sono riepilogati i passaggi all'interno dell'Attività flusso di dati .

R. Aggiungi una origine OLE DB
B. Aggiungi una Ricerca Trasformazione per cercare nuovi record
C. Aggiungi una Destinazione OLE DB per inserire record.
D. Aggiungi un'altra Ricerca Trasformazione in Scansione modifiche
E. Aggiungi un comando OLE DB per aggiornare la tabella di destinazione

A. Aggiungi un'origine OLE DB

Trascina una Sorgente OLE DB ed etichettalo come Produttori . Imposta il Gestione connessioni come si vede nella Figura 33.

B. Aggiungi una trasformazione di ricerca per cercare nuovi record

Questa Ricerca Transformation cercherà i record che non esistono nella destinazione in base all'ManufacturerID colonna chiave. E tutte le righe non corrispondenti sono candidate per l'inserimento nella tabella.

Trascina una Ricerca trasformazione e chiamalo Cerca dimManufacturers. Quindi, fai doppio clic su di esso.

Le impostazioni per il Generale la pagina dovrebbe essere la stessa della Figura 24. Nel frattempo, imposta la connessione al data warehouse e utilizza una query per le Connessioni impostazioni della pagina. Vedi figura 34.

C. Aggiungi una destinazione OLE DB per inserire i record

Trascina una Destinazione OLE DB e chiamalo Inserisci nuovi record. Collegalo alla Ricerca Trasformazione e seleziona Cerca output senza corrispondenza quando viene visualizzato un messaggio. Fare doppio clic su di esso e impostare la connessione e la tabella di destinazione come mostrato nella Figura 35.

Le tabelle di origine e di destinazione hanno gli stessi nomi di colonna e verranno mappate automaticamente. Vedi figura 36.

Infine, fai clic su OK .

D. Aggiungi un'altra trasformazione di ricerca per cercare modifiche

A differenza della precedente Ricerca Trasformazione, questo cercherà le modifiche nel Produttore colonna. E se ci sono modifiche, sarà un candidato per l'aggiornamento della tabella.

Trascina un'altra Cerca Trasformazione e denominalo Cerca record che sono cambiati. Collegalo alla prima Ricerca Trasformazione. Il generale la pagina per questa ricerca dovrebbe essere la stessa della Figura 24.

Nel frattempo, la Connessione la pagina dovrebbe assomigliare alla Figura 37 di seguito.

Nel frattempo, notate le mappature nella Figura 38.

La Figura 38 mostra le mappature tramite Produttore nome. Se non è uguale, c'è un cambiamento nella fonte. E deve essere copiato nella destinazione.

E. Aggiungi un comando OLE DB per aggiornare la tabella di destinazione

Le impostazioni dovrebbero essere le stesse della Figura 29, ad eccezione di SQLCommand . Il comando UPDATE dovrebbe essere così:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Adatta le mappature delle colonne ai parametri di conseguenza.

Risultati di runtime del pacchetto

Fatto? Quindi, esegui il pacchetto. Vedrai i risultati di runtime come nella Figura 39.

Lo strumento migliore per il caricamento dei dati SSIS

Tutti gli esempi che avevamo in precedenza utilizzano i componenti pronti all'uso che provengono da Microsoft. Anche se è abbastanza buono per alcuni progetti, cosa succede se devi integrare sia il cloud che il database tramite SSIS?

È qui che entrano in gioco i componenti Devart SSIS. Questi componenti SSIS sono comodi da usare. Inoltre, offrono un caricamento dei dati ad alte prestazioni utilizzando ottimizzazioni specifiche dell'origine dati e memorizzazione nella cache avanzata. Hanno anche oltre 40 origini dati, inclusi i preferiti RDBMS come MySQL, PostgreSQL e Oracle. Sono inclusi anche servizi cloud come Salesforce, HubSpot, Google Analytics e molti altri. Quindi, vale la pena provare a caricare milioni di record in SSIS utilizzando Devart SSIS Components.

Perché non un esempio?

Utilizzo dei componenti SSIS Devart per eseguire un carico incrementale

Proviamo a replicare i dimManufacturer tabella in MySQL e utilizza Lookup di Devart e Destinazione componenti per MySQL. La ricetta è mostrata in Figura 40.

Iniziamo aggiungendo un nuovo pacchetto SSIS al tuo progetto di Visual Studio Integration Services. Quindi, aggiungi un Data FlowTask e fare doppio clic su di esso. Quindi, segui i passaggi seguenti.

Prima di ciò, ecco un riepilogo dei passaggi:

PASSO 1. Aggiungi una Sorgente OLE DB
PASSO 2. Aggiungi un Devart MySQL Connection Manager
PASSO #3. Aggiungi una Ricerca MySQL Devart per cercare nuovi record
PASSO #4. Aggiungi un'altra Ricerca Devart MySQL Trasformazione per cercare le modifiche
PASSO #5. Aggiungi una destinazione MySQL Devart per inserire record
PASSO #6. Add another Devart MySQL Destination to update records

STEP #1. Add an OLE DB Source

This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .

STEP #2. Add a Devart MySQL Connection Manager

We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records

Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager earlier. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:

  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers table.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

NOTE :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes

This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records

This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords

Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Trasformazione. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results

See the runtime results in Figure 46.

Conclusione

That’s it.

You learned 3 ways to do incremental load in SSIS by using the following:

  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.