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

Rilevamento delle modifiche incrementali del database (da Oracle a MongoDB ETL)

Il rilevamento di aggiunte e aggiornamenti alle tabelle del database per la replica dei dati, ETL, mascheratura PII e altre attività di spostamento e manipolazione dei dati incrementali può essere automatizzato nei flussi di lavoro IRI Voracity progettati ed eseguiti in IRI Workbench (WB). Questo articolo spiega come controllare regolarmente le modifiche nelle tabelle di origine Oracle per decidere quando spostare i dati in una destinazione MongoDB.

Le modifiche possono essere caricate in diversi database o file utilizzando un file batch pianificato per attività o uno script di shell. Questo può essere fatto utilizzando un timestamp e campi specifici nella tabella di origine. Il controllo degli errori è incluso e si può anche reagire.

Questo esempio verrà creato ed eseguito su una macchina Windows; tuttavia, può essere facilmente modificato per funzionare su una piattaforma simile a Linux o Unix.

La creazione del file batch è semplice utilizzando un diagramma di flusso di Voracity in WB. In questo esempio, la tabella di origine contiene colonne denominate CREATION_DATE e UPDATE_DATE che sono importanti in questo lavoro.

L'immagine seguente mostra i passaggi contenuti nel file batch. Per riassumere:

  • il lavoro viene eseguito in una directory specifica
  • viene impostata una variabile di ambiente utilizzando il timestamp dell'ultimo lavoro eseguito
  • viene registrato il timestamp corrente
  • le modifiche correnti vengono acquisite
  • il livello di errore viene controllato e adottato in caso di successo o meno
  • il timestamp corrente sovrascrive il timestamp dell'ultima esecuzione
  • i dati modificati vengono convertiti in CSV
  • si verifica uno stallo in attesa dell'esistenza dell'ultimo file
  • il file CSV viene importato in MongoDB
  • il livello di errore è verificato, il file corrente è troncato
  • il file delle modifiche viene eliminato


Ogni blocco di attività nel flusso di lavoro è spiegato di seguito. Per istruzioni su come creare flussi di lavoro Voracity dalla tavolozza, vedere questo articolo.

Cambia directory

Questo blocco cambia la directory di lavoro corrente in quella specificata.

Imposta ULTIMA ORA

Questo blocco della riga di comando imposta una variabile di ambiente chiamata LASTTIME . Il valore impostato sulla variabile è il contenuto del file LastTime.txt . Il timestamp in questo file è il timestamp che è stato registrato durante l'ultima esecuzione di questo lavoro. Se questa è la prima esecuzione, questo file dovrà essere creato manualmente con un timestamp arbitrario datato prima dell'esecuzione di questo lavoro.

Timestamp.scl

Questo blocco di trasformazione utilizza il programma CoSort SortCL in Voracity per interrogare il database di origine per l'ora corrente. Quel timestamp viene salvato in un file chiamato LastTimeTemp.txt . Il motivo per cui è archiviato in un file temporaneo è che sia l'ora corrente che l'ultima data e ora possono essere conservate fino a quando non si verifica il controllo degli errori.

È importante che il timestamp provenga dal database e non dal computer locale. Ciò evita problemi in cui il database e l'ambiente di esecuzione non sono sincronizzati.

Modifiche.scl

Questo blocco di trasformazione fa alcune cose. Di seguito è visualizzato il diagramma di mappatura delle trasformazioni per questo blocco. L'input è la tabella di origine e l'output è il file current.txt .

Nell'input Sezione Opzioni, viene inviata una query alla tabella di origine per tutti i record che hanno un CREATION_DATE o UPDATE_DATE maggiore della variabile d'ambiente LASTTIME .

Sebbene l'output sembri avere due target , i dati vengono effettivamente aggiunti allo stesso file utilizzando due condizioni diverse. Nella prima sezione di output, c'è un Includi istruzione che trova tutti i record che hanno un CREATION_DATE maggiore di ULTIMA ORA . C'è anche un campo di output aggiuntivo chiamato CDC_TYPE . La stringa “CREATE” viene registrata in quel nuovo campo.

Nella seconda sezione di output, un Includi trova tutti i record che hanno un UPDATE_DATE maggiore di ULTIMA ORA e dove CREATION_DATE non è uguale a UPDATE_DATE. Ciò garantisce che i file appena creati non siano inclusi in questo passaggio. La stringa "UPDATE" viene registrata in CDC_TYPE.

Coordinamento errore

Questo blocco decisionale controlla la variabile ERRORLEVEL per assicurarsi che restituisse 0 (o successo) dopo aver eseguito il processo CoSort sopra. In caso contrario, il lavoro continua fino a EXIT blocco in cui il lavoro è terminato. Se restituisce true, il lavoro continua al blocco successivo.

Rinomina LastTimeTemp

Questo blocco comandi copia il contenuto di LastTimeTemp.txt in LastTime.txt. Questo registra il timestamp corrente acquisito in precedenza nel file da utilizzare per l'esecuzione del lavoro successivo.

Converti.scl

Questo blocco di trasformazione richiede current.txt e lo converte in changes.csv . La conversione è dal tipo di file delimitato predefinito a CSV. L'utilizzo del tipo di processo CSV in CoSort antepone una riga di intestazione al file di output utilizzando i nomi dei campi. Questo è il blocco attività in cui potrei applicare altre manipolazioni (come il mascheramento dei dati) ai dati, se lo desidero.

File di attesa

Questo blocco di attesa blocca il file batch per 3 secondi e quindi verifica l'esistenza di changes.csv file prima di procedere.

MongoImport

Questo blocco comandi esegue il comando mongoimport utilizzando i parametri specificati nella vista delle proprietà come mostrato di seguito.

I parametri indicano che il database MongoDB chiamato fnx deve essere caricato con il contenuto del file changes.csv che è del tipo csv e contiene un intestazione che definisce i campi.

Nota che Voracity supporta altri metodi per spostare e manipolare i dati MongoDB. Vedere questo esempio di utilizzo dei driver Progress ODBC per il mascheramento dei dati utilizzando le funzioni "FieldShield" integrate. Voracity può anche elaborare i dati BSON direttamente tramite API tramite il supporto /PROCESS=MongoDB in CoSort v10, ora anche.

Errore durante il caricamento

Questo blocco decisionale controlla la variabile ERRORLEVEL per assicurarsi che restituisse 0 (o successo) dopo l'importazione in MongoDB. In caso contrario, il lavoro continua con Elimina-modifiche e ESCI blocchi in cui il lavoro è terminato. Se restituisce true, il lavoro continua al blocco successivo.

Tronca corrente

Questo blocco comandi tronca il file current.txt . Questo serve per cancellare i record che sono stati caricati in MongoDB. Se l'importazione non è riuscita e il blocco precedente è uscito dal lavoro, questi record modificati vengono aggiunti al passaggio successivo. Quindi, quando il lavoro si ripeteva, sarebbero stati caricati in MongoDB con il successivo gruppo di record modificati.

Elimina modifiche

Questo blocco comandi elimina changes.csv in modo che il passaggio successivo venga avviato con un file appena creato per il passaggio.

File batch

Il file batch e gli script di trasformazione vengono creati durante l'esportazione del diagramma di flusso. Di seguito è riportata una copia del file batch. Ogni blocco aggiunge righe eseguibili al file batch.

Programmazione attività

Utilizzando l'Utilità di pianificazione di Windows, questo file batch può essere eseguito ripetutamente per acquisire le modifiche nel database di origine.

Conclusione

Con un po' di pianificazione e l'uso di blocchi di comandi, le modifiche a una tabella di database possono essere rilevate automaticamente utilizzando un file batch e quindi pianificate per l'esecuzione a intervalli selezionati.

Contatta [email protected] o il tuo rappresentante IRI per ulteriori informazioni o assistenza con il tuo caso d'uso

  1. Questo approccio differisce dalle soluzioni di acquisizione dei dati delle modifiche basate su log, che in genere presentano colli di bottiglia nelle prestazioni, sono limitate a database specifici e non consentono la trasformazione simultanea dei dati, il mascheramento dei dati PII e la pulizia e rapporti.