pondělí 31. ledna 2011

Migrace historických dat z DBF souborů do Oracle DB

Fakta:
  • Zákazník provozoval starý HR systém v podobě DOS aplikace (FoxPro a DBF soubory)
  • Nyní migruje na nový systém s MS SQL
  • Pro jednorázový load historických dat do DWH máme k dispozici sady dbf souborů obsahující zazálohované DBF files po každé měsíční uzávěrce
  • Pro nahrání dat do L0 vrstvy (Oracle DB) použijeme ODI 11g
  • Pro přístup k DBF souborům využívám JDBC driver - bohužel jsem zatím nenašel žádný opensource, takže zatím trial, který se dá stáhnout z http://www.hxtt.com/dbf.zip (alternativou postupu může být např. konverze dbf souborů do xml souborů, na to prý existují také utility, ale protože máme souborů mraky, tak jsem chtěl co nejvíc ušetřit práci)
  • Prováděno na Win7 (ODI + standalone agent)

Příprava ODI
JAR obsahující JDBC driver pro DBF (v mém případě DBF_JDBC30.jar) je potřeba nahrát pro ODI Standalone Agenta do [agent_home]/drivers/, pro ODI Studio do C:\Documents and Settings\[uživatel]\Application Data\odi\oracledi\userlib\ (na Windows 7 do C:\Users\\AppData\Roaming\odi\oracledi\userlib).


Příprava DBF Serveru
JDBC umí fungovat i jako remote server, pro moji potřebu mi však stačilo následující:
  1. Na fyzicky stejném serveru, kde běží ODI Studio a Standalone Agent (jinak umístit stejně na obě místa, kvůli selektivnímu reverzu metadat) vytvořit adresář v rootu s názvem DBF_SERVER
  2. Vytvořit podadresář DATA, do kterého jsou nahrány pokusná data (adresářová struktura je v sql pak adresovatelná pomocí /)
  3. Překopírovat testovací dbf soubory (*.dbf)

Definice Fyzické architektury v ODI
  1. Spustit ODI Topology Manager
  2. Technologie DBase > nový Data Server
  3. Name: např. HR_MZDY_dbf
  4. JDBC driver: com.hxtt.sql.dbf.DBFDriver
  5. JDBC URL: jdbc:DBF:/D:/DBF_SERVER/DATA (cesta do adresáře, kde jsou dbf soubory)
  6. Vytvořit defaultní fyzické schéma > New Physical Schema a jen uložit
  7. POZOR Nutné provést reverse datových typů na uzlu DBase pravé tlačítko a volba datatypes reverse engineering, jinak Vám to nebude správně reversovat datové typy (více viz. krok 9)
  8. Stejně nutné je nastavit konverzí převody datových typů (např. VARCHAR v DBase, jak se bude konvertovat do Vaší cílové DB), více viz. krok 10 a 11
Pozn.: Zatím jsem neřešil potřebu překódování codepage, podle manuálu tohoto konkrétního JDBC ovladače lze provést pomocí Property s názvem charSet a zadání kódové stránky ala Java

Definice Logické architektury v ODI
  1. Technologie Dbase > nové Logické Schema, např. název HR_OLD_DATA, v kontextu nastavit namapování na fyzické schéma HR_MZDY_dbf_Default

Reverse metadat dbf souborů v ODI Designeru

  1. Založte nový Model:
    a. Name: např. HR_OLD_DATA
    b. Technologie: Dbase
    c. Logické schéma: HR_OLD_DATA

  2. Reverse Engineer – standard

  3. Selective Reverse-Engineering


  4. V modelu se zobrazí reversované tabulky a sloupce


  5. Pak už je můžete přetahat do L0 (pozor: má data neobsahovala PK constraint, tj. pro využití integrační strategie "Incremental Update" je potřeba přidat PK do cílových tabulek a nebo v Interface nastavit "Update key" ručně).

  6. V Interface použijte LKM SQL To Oracle a už to jede…

Pokud by jste někdo našli free JDBC driver, který bude s ODI fungovat, dejte do komentáře k článku, bude se nám hodit.


Petr Šimbera (BI/DW Architekt - Freelancer)

1 komentář:

cNemo řekl(a)...

Nakonec, protože šlo o stovky DBF souborů jsme našli zajímavou utilitku "dbf loader to Oracle" od Alexey Kravets. Trosku jsme si ji upravili, je to ceckovy kod a uz to bezelo jako po dratkach...sice bez ODI, ale hodne rychle...Pokud ma nekdo zajem, protoze je to upraveny opensource, mohu poskytnout.
Petr Šimbera