Oracle
 sql >> база данни >  >> RDS >> Oracle

Откриване на постепенни промени в базата данни (Oracle към MongoDB ETL)

Откриването на допълнения и актуализации на таблици на база данни за репликация на данни, ETL, маскиране на PII и други дейности по постепенно движение и манипулиране на данни може да бъде автоматизирано в работните потоци на IRI Voracity, проектирани и изпълнявани в IRI Workbench (WB). Тази статия обяснява как редовно да проверявате за промени в изходните таблици на Oracle, за да решите кога да преместите данни в цел на MongoDB.

Промените могат да бъдат заредени в различни бази данни или файлове, като се използва команден файл или шел скрипт. Това може да се направи с помощта на времева марка и специфични полета в изходната таблица. Проверката за грешки е включена и може да се реагира.

Този пример ще бъде създаден и стартиран на машина с Windows; обаче може лесно да се модифицира, за да работи на платформа като Linux или Unix.

Създаването на пакетния файл е лесно с помощта на диаграма на потока на Voracity в WB. В този пример изходната таблица съдържа колони с име CREATION_DATE и UPDATE_DATE които са важни в тази работа.

Изображението по-долу показва стъпките, които се съдържат в пакетния файл. За да обобщим:

  • заданието се изпълнява в определена директория
  • променлива на средата се задава с помощта на времевата марка на последното изпълнение на заданието
  • текущият времеви печат се записва
  • текущите промени се улавят
  • нивото на грешката се проверява и се предприема действия, ако е успешно или не
  • текущата дата за време замества последното клеймо за време на изпълнение
  • променените данни се преобразуват в CSV
  • възниква спиране, за да се изчака съществуването на последния файл
  • CSV файлът се импортира в MongoDB
  • нивото на грешката е проверено, текущият файл е съкратен
  • файлът с промените е изтрит


Всеки блок задачи в работния поток е обяснен по-долу. За инструкции за изграждане на работни потоци на Voracity от палитрата вижте тази статия.

Промяна на директория

Този блок променя текущата работна директория в посочената.

Задайте ПОСЛЕДНО ВРЕМЕ

Този блок на командния ред задава променлива на средата, наречена LASTTIME . Стойността, зададена на променливата, е съдържанието на файла LastTime.txt . Печатът за време в този файл е клеймото за време, което е записано по време на последното изпълнение на това задание. Ако това е първото стартиране, този файл ще трябва да бъде направен ръчно с произволно времево клеймо, датирано преди изпълнението на тази задача.

Timestamp.scl

Този блок за трансформация използва програмата CoSort SortCL в Voracity, за да отправи заявка към изходната база данни за текущото време. Това клеймо за време се записва във файл, наречен LastTimeTemp.txt . Причината да се съхранява във временен файл е така, че както текущото, така и последното времеви печати могат да бъдат запазени, докато не настъпи проверка за грешка.

Важно е времевата марка да идва от базата данни, а не от локалната машина. Това избягва проблеми, при които базата данни и средата за изпълнение не са синхронизирани.

Changes.scl

Този блок за трансформация прави няколко неща. По-долу е показана диаграма на трансформиране на картографиране за този блок. Входът е изходната таблица, а изходът е файлът current.txt .

Във входните Опции на раздел, се изпраща заявка към изходната таблица за всички записи, които имат CREATION_DATE или UPDATE_DATE по-голямо от променливата на средата LASTTIME .

Докато изходът изглежда има две цели, данните всъщност се добавят към един и същ файл с помощта на две различни условия. В първия изходен раздел има Включване оператор, който намира всички записи, които имат CREATION_DATE по-голямо от ПОСЛЕДНО ВРЕМЕ . Има и допълнително изходно поле, наречено CDC_TYPE . Низът „CREATE“ се записва в това ново поле.

Във втория изходен раздел, Включи оператор намира всички записи, които имат UPDATE_DATE по-голямо от ПОСЛЕДНО ВРЕМЕ и където CREATION_DATE не е равно на UPDATE_DATE. Това гарантира, че новосъздадените файлове не са включени в този пропуск. Низът „UPDATE“ е записан в CDC_TYPE.

Грешка CoSort

Този блок за решение проверява променливата ERRORLEVEL за да се уверите, че е върнал 0 (или успех) след изпълнение на CoSort заданието по-горе. Ако не е, задачата продължава до ИЗХОД блок, където работата е прекратена. Ако върне истината, задачата продължава към следващия блок.

Преименуване на LastTimeTemp

Този команден блок копира съдържанието на LastTimeTemp.txt в LastTime.txt. Това записва по-рано заснетото текущо времево клеймо във файла, което да се използва за следващото изпълнение на задание.

Convert.scl

Този блок за трансформиране приема current.txt и го преобразува в changes.csv . Преобразуването е от типа файл с разделители по подразбиране в CSV. Използването на типа CSV процес в CoSort добавя заглавен ред към изходния файл, използвайки имената на полетата. Това е блокът със задачи, където мога да приложа други манипулации (като маскиране на данни) към данните, ако пожелая.

Изчакайте файлове

Този блок за изчакване спира пакетния файл за 3 секунди и след това проверява за съществуването на changes.csv файл, преди да продължите.

MongoImport

Този команден блок изпълнява командата mongoimport, използвайки параметрите, посочени в изгледа на свойствата, както е показано по-долу.

Параметрите показват, че базата данни MongoDB се нарича fnx трябва да се зареди със съдържанието на файла changes.csv който е от типа csv и съдържа заглавие който дефинира полетата.

Имайте предвид, че Voracity поддържа други методи за преместване и манипулиране на данни на MongoDB. Вижте този пример за използване на драйвери на Progress ODBC за маскиране на данни с помощта на вградени функции „FieldShield“. Voracity също може да обработва BSON данни директно чрез API чрез /PROCESS=MongoDB поддръжка в CoSort v10 вече също.

Грешка при зареждане

Този блок за решение проверява променливата ERRORLEVEL за да се уверите, че е върнал 0 (или успех) след импортиране в MongoDB. Ако не е, задачата продължава към Изтриване-Промени и ИЗХОД блокове, където работата е прекратена. Ако върне истината, задачата продължава към следващия блок.

Отрязване на текущия

Този команден блок съкращава файла current.txt . Това е за изчистване на записите, които са били заредени в MongoDB. Ако импортирането е неуспешно и блокът по-горе излезе от заданието, тогава тези променени записи се добавят към следващото преминаване. След това, когато работата се повтаря, те ще бъдат заредени в MongoDB със следващата група от променени записи.

Изтриване на промените

Този команден блок изтрива changes.csv така че следващото преминаване да започне с новосъздадения файл за пропуска.

Пакетен файл

Пакетният файл и скриптовете за трансформация се създават, когато диаграмата на потока се експортира. Копие на пакетния файл е по-долу. Всеки блок добавя изпълними редове към пакетния файл.

Планировчик на задачи

С помощта на Windows Task Scheduler този пакетен файл може да се изпълнява многократно, за да се уловят промените в изходната база данни.

Заключение

С малко планиране и използване на командни блокове, промените в таблицата на базата данни могат да бъдат открити автоматично с помощта на пакетен файл и след това да бъдат планирани за изпълнение на избрани интервали.

Свържете се с [email protected] или с вашия представител на IRI за повече информация или помощ с вашия случай на употреба

  1. Този подход се различава от базираните на регистрационни файлове решения за улавяне на промяна на данни, които обикновено имат тесни места в производителността и са ограничени до конкретни бази данни и не позволяват едновременна трансформация на данни, маскиране на лични данни, почистване , и отчитане.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да използвам ограничението за проверка в oracle

  2. Мрежовият адаптер не можа да установи връзката - Oracle 11g

  3. Предаване на масив от данни като входен параметър към процедура на Oracle

  4. Unitils и DBMaintainer - как да ги накарам да работят с множество потребители/схеми?

  5. Как да проверите всяко липсващо число от поредица от числа?