Som bekant erbjuder SAP ett fullt utbud av mjukvaror för bÄde hantering av transaktionsdata och bearbetning av dessa data i analys- och rapporteringssystem. Plattformen SAP Business Warehouse (SAP BW) utgör ett verktyg för lagring och analys av data med omfattande tekniska möjligheter. Trots sina objektiva fördelar har SAP BW en betydande nackdel; det Àr höga kostnader för lagring och bearbetning av data, vilket blir sÀrskilt pÄtagligt vid anvÀndning av molnbaserad SAP BW on HANA.
Vad hÀnder om man i stÀllet börjar anvÀnda nÄgot non-SAP, och helst OpenSource produkt som lagringssystem? Vi pÄ X5 Retail Group har valt att gÄ med GreenPlum. Detta löser sjÀlvklart kostnadsfrÄgan, men det uppstÄr omedelbart följdfrÄgor som nÀstan automatiskt hanterades vid anvÀndningen av SAP BW.

Specifikt, hur man hÀmtar data frÄn kÀllsystem som för det mesta Àr SAP-lösningar?
âHR-metrikâ blev det första projektet dĂ€r denna frĂ„ga behövde lösas. VĂ„rt mĂ„l var att skapa en HR-datalager och bygga analytisk rapportering för omrĂ„den som rör medarbetare. Den primĂ€ra datakĂ€llan Ă€r den transaktionssystem SAP HCM, dĂ€r alla personal-, organisations- och löneĂ„tgĂ€rder registreras.
Databearbetning
I SAP BW finns det standarddataextraktorer för SAP-system. Dessa extraktorer kan automatiskt samla in nödvÀndiga data, övervaka deras integritet och bestÀmma förÀndringsdelar. HÀr Àr till exempel en standarddatakÀlla för anstÀlldas attribut 0EMPLOYEE_ATTR:

Resultatet av databearbetningen frÄn den för en anstÀlld:

Vid behov kan denna extraktor modifieras enligt egna krav eller sÄ kan en egen extraktor skapas.
Idén om möjligheten att ÄteranvÀnda dem kom först. TyvÀrr visade det sig vara en ouppnÄelig uppgift. Den största delen av logiken Àr implementerad pÄ sidan av SAP BW, och det gick inte att smÀrtfritt separera extraktorn pÄ kÀllan frÄn SAP BW.
Det blev uppenbart att det krÀvdes utveckling av en egen mekanism för databearbetning frÄn SAP-system.
Databasstruktur för datalagring i SAP HCM
För att förstÄ kraven pÄ en sÄdan mekanism Àr det först nödvÀndigt att definiera vilka data vi faktiskt behöver.
Majoriteten av datan i SAP HCM lagras i platta SQL-tabeller. Baserat pÄ dessa data visualiserar SAP-applikationer organisationsstrukturer, anstÀllda och annan HR-information för anvÀndaren. SÄ hÀr ser organisationsstrukturen ut i SAP HCM:

Fysiskt lagras detta trĂ€d i tvĂ„ tabeller â i hrp1000 objekt och i hrp1001 relationer mellan dessa objekt.
Objekten "Avdelning 1" och "Ledning 1":

Relationen mellan objekten:

Det kan finnas ett stort antal bÄde objekttyper och relationstyper mellan dem. Det finns bÄde standardrelationer mellan objekt och anpassade för specifika behov. Till exempel anger standardrelationen B012 mellan en organisatorisk enhet och en tjÀnst chefen för avdelningen.
Visning av chefen i SAP:

Lagring i databasens tabell:

AnstÀlldas data lagras i tabellerna pa*. Till exempel lagras data om personalhÀndelser för en anstÀlld i tabellen pa0000.

Vi har beslutat att GreenPlum ska hÀmta "rÄdata", dvs. bara kopiera dem frÄn SAP-tabeller. Och direkt i GreenPlum kommer de att bearbetas och omvandlas till fysiska objekt (t.ex. Avdelning eller AnstÀlld) och metrik (t.ex. genomsnittlig antal anstÀllda).
Det har identifierats cirka 70 tabeller vars data behöver överföras till GreenPlum. Efter detta började vi arbeta med sÀttet att överföra dessa data.
SAP erbjuder ett ganska stort antal integrationsmekanismer. Men det enklaste sĂ€ttet â direkt Ă„tkomst till databasen Ă€r förbjudet pĂ„ grund av licensbegrĂ€nsningar. SĂ„ledes mĂ„ste alla integrationsflöden implementeras pĂ„ nivĂ„ servern av applikationer.
NÀsta problem var avsaknaden av data om rader som tagits bort i SAP-databasen. Vid borttagning av en rad i databasen tas den bort fysiskt. Det vill sÀga att det inte var möjligt att bilda en delta av förÀndringar baserat pÄ tidpunkten för Àndringen.
Naturligtvis finns det mekanismer för att registrera Àndringar av data i SAP HCM. Till exempel, för efterföljande överföring till mottagarsystem finns förÀndringspekare (change pointer), som registrerar alla Àndringar och baserat pÄ vilka Idoc (objekt för överföring till externa system) skapas.
Exempel pÄ IDoc-Àndring av infotyp 0302 för anstÀlld med personnr 1251445:

Eller att föra loggar över Àndringar av data i tabellen DBTABLOG.
Exempel pÄ logg över borttagning av posten med nyckel QK53216375 frÄn tabellen hrp1000:

Men dessa mekanismer Àr inte tillgÀngliga för alla nödvÀndiga data och deras behandling pÄ applikationsservernivÄ kan anvÀnda ganska mycket resurser. SÄledes kan massaktivering av loggning för alla nödvÀndiga tabeller leda till mÀrkbar nedgÄng i systemets prestanda.
En annan allvarlig frÄga var klusterborden. Data för tidsberÀkning och löneberÀkning i RDBMS-versionen av SAP HCM lagras som en uppsÀttning logiska tabeller för varje anstÀlld för varje berÀkning. Dessa logiska tabeller lagras som binÀra data i tabellen pcl2.
LöneberÀkningskluster:

Data frĂ„n klusterborden kan inte lĂ€sas med en SQL-kommando, utan det krĂ€vs anvĂ€ndning av SAP HCM makrokommandon eller specialiserade funktionsmoduler. DĂ€rmed kommer hastigheten för att lĂ€sa sĂ„dana tabeller att vara ganska lĂ„g. Ă
andra sidan lagras i sĂ„dana kluster data som endast behövs en gĂ„ng i mĂ„naden â slutlig löneberĂ€kning och tidsbedömning. SĂ„ hastigheten Ă€r i detta fall inte sĂ„ kritisk.
Vid bedömning av alternativ för att skapa delta av dataĂ€ndringar beslutade vi Ă€ven att övervĂ€ga alternativet med fullstĂ€ndig export. Alternativet att dagligen överföra gigabyte av oförĂ€ndrad data mellan systemen kan inte se bra ut. Men det har ocksĂ„ flera fördelar â ingen nödvĂ€ndighet för att implementera delta pĂ„ kĂ€llsidan samt realisering av inbĂ€ddning av detta delta pĂ„ mottagarsidan. Detta minskar kostnaderna och genomförandetiderna samt ökar pĂ„litligheten i integrationen. Samtidigt bestĂ€mdes det att nĂ€stan alla Ă€ndringar i SAP HR sker inom tre mĂ„nader före det aktuella datumet. SĂ„ledes fattades beslutet att stanna vid daglig fullstĂ€ndig export av data frĂ„n SAP HR för N mĂ„nader före det aktuella datumet och mĂ„natlig fullstĂ€ndig export. Parametern N beror pĂ„ den specifika tabellen
och varierar mellan 1 och 15.
För att extrahera data föreslogs följande schema:

Det externa systemet genererar en begÀran och skickar den till SAP HCM, dÀr begÀran kontrolleras för datainsamling och behörighet för att fÄ tillgÄng till tabeller. Om kontrollen Àr framgÄngsrik, körs ett program i SAP HCM som samlar de nödvÀndiga uppgifterna och överför dem till integrationslösningen Fuse. Fuse identifierar nödvÀndig Àmne i Kafka och skickar data dit. DÀrefter överförs data frÄn Kafka till Stage Area GP.
I denna kedja Àr vi intresserade av att extrahera data frÄn SAP HCM. LÄt oss titta nÀrmare pÄ det.
Interaktionsscheman mellan SAP HCM och FUSE.

Det externa systemet faststÀller tiden för den senaste framgÄngsrika begÀran till SAP.
Processen kan startas av en timer eller annat evenemang; en timeout kan ocksÄ stÀllas in för att vÀnta pÄ ett svar med data frÄn SAP och initiera en ny begÀran. DÀrefter genereras en delta-begÀran som skickas till SAP.
BegÀrans data överförs i body i json-format.
HTTP-metod: POST.
Exempel pÄ begÀran:

SAP-tjÀnsten genomför kontroll av begÀran för fullstÀndighet, överensstÀmmelse med den aktuella strukturen i SAP och tillgÄngstillstÄnd till den begÀrda tabellen.
Vid fel returnerar tjÀnsten ett svar med motsvarande kod och beskrivning. Vid en lyckad kontroll skapas en bakgrundsprocess för urvalet, vilket genererar och synkront returnerar ett unikt sessions-id.
Det externa systemet registrerar vid fel, om nÄgot, i loggen. Vid en framgÄngsrik respons överförs sessions-id:t och namnet pÄ tabellen som begÀran gjordes pÄ.
Det externa systemet registrerar den aktuella sessionen som öppen. Om andra sessioner finns för denna tabell stÀngs de med en registrering av en varning i loggen.
SAP:s bakgrundsjobb skapar en cursor enligt angivna parametrar och ett datapaketeringsstorlek. Paketstorleken Àr det maximala antalet poster som processen lÀser frÄn databasen. Standard Àr satt till 2000. Om det finns fler poster i databasen Àn den anvÀnda paketstorleken, skapas nÀsta block med motsvarande offset och ett inkrementerat paketnummer efter att det första paketet har överförts. Numren ökar med 1 och skickas i strikt följd.
DÀrefter överför SAP paketet till ingÄngen för webbtjÀnsten i det externa systemet. Det externa systemet utför kontroller av det inkommande paketet. Det mÄste finnas en registrerad session i systemet med det angivna id:t som mÄste befinna sig i öppet status. Om paketnumret Àr > 1 mÄste det finnas en registrerad framgÄngsrik mottagning av det föregÄende paketet (package_id-1).
Vid framgÄngsrik kontroll parsar och sparar det externa systemet data frÄn tabellen.
Dessutom, om paketet innehÄller flaggan final och serialiseringen har genomförts framgÄngsrikt, skickas en avisering till integrationsmodulen om att sessionens behandling har avslutats framgÄngsrikt, och modulen uppdaterar sessionens status.
Vid fel i kontroller/parsing loggas felet och paketen för den aktuella sessionen kommer att avslÄs av det externa systemet.
Detsamma gÀller för motsatta fall, nÀr det externa systemet returnerar ett fel, loggas det och överföringen av paketen avbryts.
För att begÀra data frÄn SAP HCM har en integrationsservice implementerats. TjÀnsten Àr implementerad pÄ ICF-ramverket (SAP Internet Communication Framework - ). Den möjliggör att begÀra data frÄn SAP HCM-systemet enligt vissa tabeller. Vid skapandet av dataförfrÄgan finns det möjlighet att ange specifika fÀlt och filtreringsparametrar för att fÄ de nödvÀndiga uppgifterna. Implementeringen av tjÀnsten förutsÀtter ingen affÀrslogik. Algoritmer för berÀkning av delta, förfrÄgningsparametrar, integritetskontroll med mera implementeras ocksÄ pÄ den externa systemets sida.
Denna mekanism gör det möjligt att samla in och överföra alla nödvÀndiga data pÄ nÄgra timmar. Denna hastighet ligger pÄ grÀnsen till acceptabel, dÀrför betraktas denna lösning av oss som tillfÀllig, vilket har tillÄtit oss att tillfredsstÀlla behovet av ett extraktionsverktyg i projektet.
I den mÄlinriktade bilden för att lösa uppgiften med databasextraktion övervÀgs alternativ med CDC-system som Oracle Golden Gate eller ETL-verktyg som SAP DS.
KĂ€lla: habr.com
