Condividi tramite


Change Data Capture (SSIS)

Si applica a: SQL Server SSIS Integration Runtime in Azure Data Factory

Change Data Capture in SQL Server offre una soluzione efficace alla sfida posta dall'esecuzione di caricamenti incrementali da tabelle di origine in data mart e data warehouse.

Informazioni su Change Data Capture

Le tabelle di origine vengono modificate nel tempo. Un data mart o un data warehouse basato su tali tabelle deve riflettere le modifiche. Un processo di copia periodica di uno snapshot dell'intera origine, tuttavia, richiede troppo tempo e l'utilizzo di una quantità eccessiva di risorse. Approcci alternativi che includono colonne di tipo timestamp, trigger o query complesse riducono spesso le prestazioni e aumentano la complessità. È necessario un flusso affidabile di dati delle modifiche strutturato in modo che possa essere applicato con facilità dagli utenti alle rappresentazioni di destinazione dei dati. Change Data Capture in SQL Server offre questa soluzione.

La funzionalità Change Data Capture del motore di database consente di acquisire attività di inserimento, aggiornamento ed eliminazione applicate a tabelle di SQL Server e rende disponibili i dettagli relativi alle modifiche in un formato relazionale semplice da utilizzare. Le tabelle delle modifiche utilizzate da Change Data Capture contengono colonne che riflettono la struttura di colonne delle tabelle di origine rilevate, insieme ai metadati necessari per comprendere le modifiche apportate riga per riga.

Nota

Change Data Capture non è disponibile in tutte le edizioni di Microsoft SQL Server. Per un elenco delle funzionalità supportate dalle edizioni di SQL Server, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.

Funzionamento di Change Data Capture in Integration Services

Tramite un pacchetto di Integration Services è possibile raccogliere facilmente i dati delle modifiche nei database di SQL Server per eseguire caricamenti incrementali efficaci in un data warehouse. Prima che sia possibile usare Integration Services per caricare i dati delle modifiche, un amministratore deve tuttavia abilitare Change Data Capture nel database e nelle tabelle da cui si vogliono acquisire le modifiche. Per altre informazioni su come configurare Change Data Capture in un database, vedere Abilitare e disabilitare Change Data Capture (SQL Server).

Dopo che un amministratore ha abilitato Change Data Capture nel database, è possibile creare un pacchetto per l'esecuzione del caricamento incrementale di tali dati. Nel diagramma seguente vengono illustrati i passaggi per la creazione di tale pacchetto che esegue un caricamento incrementale da una singola tabella:

Passaggi di creazione del pacchetto di Change Data Capture

Come illustrato nel diagramma precedente, la creazione di un pacchetto per l'esecuzione di un caricamento incrementale dei dati modificati comporta i passaggi seguenti:

Passaggio 1: Progettazione del flusso di controllo
Nel flusso di controllo del pacchetto è necessario definire le attività seguenti:

  • Calcolare i valori datetime di inizio e di fine per l'intervallo di modifiche apportate ai dati di origine da recuperare.

    Per calcolare tali valori, usare un'attività Esegui SQL o espressioni di Integration Services con funzioni datetime. È quindi necessario archiviare gli endpoint in variabili del pacchetto da utilizzare in seguito nel pacchetto.

    Per altre informazioni: Definizione di un intervallo dei dati delle modifiche

  • Determinare se i dati delle modifiche per l'intervallo selezionato sono pronti. Questo passaggio è necessario in quanto il processo di acquisizione asincrono potrebbe non avere ancora raggiunto l'endpoint selezionato.

    Per determinare se i dati sono pronti, iniziare con un contenitore Ciclo For per rimandare l'esecuzione, se necessario, fino a quando i dati delle modifiche per l'intervallo selezionato non saranno pronti. Nel contenitore Ciclo For utilizzare un'attività Esegui SQL per eseguire una query sulle tabelle di mapping temporale gestite da Change Data Capture. Usare quindi un'attività Script che chiama il metodo Thread.Sleep o un'altra attività Esegui SQL con un'istruzione WAITFOR per rimandare temporaneamente l'esecuzione del pacchetto, se necessario. Facoltativamente, utilizzare un'altra attività Script per registrare una condizione di errore o un timeout.

    Per altre informazioni: Come determinare se i dati di modifica sono pronti

  • Preparare la stringa di query che verrà utilizzata per eseguire una query per i dati delle modifiche.

    Utilizzare un'attività Script o un'attività Esegui SQL per assemblare l'istruzione SQL da utilizzare per eseguire una query per le modifiche.

    Per altre informazioni: Preparazione dell'esecuzione di una query per i dati delle modifiche

Passaggio 2: Configurazione della query per i dati delle modifiche
Creare la funzione con valori di tabella che eseguirà una query per i dati.

Usare SQL Server Management Studio per sviluppare e salvare la query.

Per altre informazioni: Recupero e comprensione dei dati delle modifiche

Passaggio 3: Progettazione del flusso di dati
Nel flusso di dati del pacchetto è necessario definire le attività seguenti:

  • Recuperare i dati delle modifiche dalle tabelle delle modifiche.

    Per recuperare i dati, utilizzare un componente di origine per eseguire una query sulle tabelle delle modifiche comprese nell'intervallo selezionato. L'origine chiama una funzione Transact-SQL con valori di tabella che deve essere stata creata in precedenza.

    Per altre informazioni: Recupero e comprensione dei dati delle modifiche

  • Suddividere le modifiche in inserimenti, aggiornamenti ed eliminazioni per l'elaborazione.

    Per suddividere le modifiche, utilizzare una trasformazione Suddivisione condizionale per indirizzare inserimenti, aggiornamenti ed eliminazioni a output diversi per l'elaborazione appropriata.

    Per altre informazioni: Elaborazione di inserimenti, aggiornamenti ed eliminazioni

  • Applicare gli inserimenti, le eliminazioni e gli aggiornamenti alla destinazione.

    A tale scopo, utilizzare un componente di destinazione per applicare gli inserimenti alla destinazione. Utilizzare inoltre trasformazioni Comando OLE DB con istruzioni UPDATE e DELETE con parametri per applicare aggiornamenti ed eliminazioni alla destinazione. È inoltre possibile applicare aggiornamenti ed eliminazioni utilizzando componenti di destinazione per salvare le righe in tabelle temporanee. Utilizzare quindi le attività Esegui SQL per eseguire operazioni di aggiornamento bulk e di eliminazione bulk sulla destinazione dalle tabelle temporanee.

    Per altre informazioni: Applicazione delle modifiche alla destinazione

Modificare i dati di più tabelle

Il processo illustrato nel diagramma e nei passaggi precedenti prevede un caricamento incrementale da una singola tabella. Il processo per eseguire un caricamento incrementale da più tabelle è identico. È tuttavia necessario modificare la progettazione del pacchetto per adattarlo all'elaborazione di più tabelle. Per altre informazioni su come creare un pacchetto che esegue un caricamento incrementale da più tabelle, vedere Esecuzione di un caricamento incrementale di più tabelle.

Intervento nel blog sul carico incrementale con schema progettuale di SSIS su sqlblog.com