Aggregatortransformatie in Informatica met voorbeeld

⚡ Slimme samenvatting

De aggregator-transformatie in Informatica is het actieve object dat berekeningen uitvoert zoals optellen, gemiddelden en tellen over een groep rijen, waarbij die rijen in een aggregatiecache worden bewaard totdat elke groep is voltooid.

  • 🧮 Gegroepeerde berekening: Groepering op poorten definieert de groepen, en de integratieservice retourneert één rij voor elke unieke combinatie.
  • 💾 Twee caches: Groepswaarden worden in de indexcache bewaard, terwijl rijgegevens in de datacache worden opgeslagen.
  • 🧪 Uitgewerkt voorbeeld: De expressie sum(SAL) grouped by DEPTNO laadt de totalen van de afdelingen in SUM_SAL_DEPTWISE.
  • 🔀 Gesorteerde invoer: Door vooraf te sorteren op basis van poorten kan de Integration Service elke groep vroegtijdig vrijgeven en veel minder gegevens in de cache opslaan.
  • 📈 Incrementele uitvoeringen: Bij incrementele aggregatie wordt de historische cache hergebruikt, waardoor alleen nieuwe bronrijen worden berekend.
  • ???? Grenswaarde voor geneste structuren: Een enkele transformatie kan functies op één niveau of geneste functies bevatten, nooit beide.

Aggregatortransformatie in Informatica

Wat is aggregatortransformatie?

Een aggregatietransformatie is een actieve transformatie die aggregatieberekeningen uitvoert, zoals optellen, gemiddelde berekenen en tellen.

Als u bijvoorbeeld de som van de salarissen van alle medewerkers per afdeling wilt berekenen, kunt u de Aggregator-transformatie gebruiken.

De samengevoegde bewerkingen worden uitgevoerd op een groep rijen. Daarom is er een tijdelijke tijdelijke aanduiding nodig om al deze records op te slaan en de berekeningen uit te voeren.

Hiervoor wordt de aggregatorcache gebruikt. Dit is tijdelijk hoofdgeheugen dat is toegewezen aan de Aggregator-transformatie om dergelijke bewerkingen uit te voeren, en het is opgedeeld in twee delen: de indexcache slaat de groepswaarden op, terwijl de datacache de rijgegevens opslaat die worden geaggregeerd.

De transformatie is actief omdat deze het aantal rijen in de pipeline verandert. Er kunnen duizenden werknemersgegevens in de pipeline terechtkomen en er verlaat slechts één rij per afdeling de pipeline.

Hoe gebruik je de Aggregator-transformatie in Informatica?

In dit voorbeeld berekenen we de som van salarissen per afdeling. Hiervoor hebben we een nieuwe kolom nodig om deze som op te slaan. Dus, allereerst bereiden we een nieuwe kolom voor.

Stap 1) Maak een nieuwe doeltabel in de database aan, bijvoorbeeld "sum_sal_deptwise", met behulp van het onderstaande script. Je ziet de nieuwe doeltabel in de database aangemaakt onder de Targets map in de volgende stap.

Download het bovenstaande bestand Create_table_sal_deptwise.txt

Stap 2) Maak een nieuw kaartping “m_sum_sal_deptwise”.

Om de nieuwe kaart te makenpingWe hebben de brontabel (EMP) en de doeltabel (sum_sal_deptwise) nodig in een Map.ping Ontwerper, dus we moeten

  1. Importeer de doeltabel “sum_sal_deptwise” in de map.ping.
  2. Importeer de brontabel “emp”.

Beide definities verschijnen nu op het canvas, zoals hieronder weergegeven.

Wereldmapping Ontwerper met de EMP-bron, SQ_EMP en het geïmporteerde doel SUM_SAL_DEPTWISE

Stap 3) Op de kaartping,

  1. Van de BronkwalificatieVerwijder de kolommen empno, ename, job, mgr, hiredate en comm, zodat alleen de kolommen deptno en sal overblijven.
  2. Maak een nieuwe Aggregator-transformatie aan via het menu van de toolbox, zoals weergegeven in de schermafbeelding. Wanneer u op het aggregator-pictogram klikt, wordt er een nieuwe Aggregator-transformatie aangemaakt.

Het nieuwe AGGTRANS-object verschijnt naast de ingekorte Source Qualifier.

Aggregator-pictogram op de werkbalk dat AGGTRANS creëert naast de ingekorte SQ_EMP

Stap 4) Sleep de kolommen SAL en DEPTNO van de Source Qualifier (SQ_EMP) naar de Aggregator-transformatie. De twee poorten zijn nu gekoppeld in AGGTRANS.

De SAL- en DEPTNO-poorten zijn vanuit SQ_EMP naar de AGGTRANS-aggregatortransformatie gesleept.

Stap 5) Double-klik op de Aggregator-transformatie om de eigenschappen ervan te openen en vervolgens

  1. Voeg een nieuwe poort toe aan de transformatie
  2. Hernoem de poort naar SUM_SAL
  3. Wijzig het gegevenstype van deze nieuwe poort naar dubbel
  4. Maak van deze poort een uitvoerpoort door het selectievakje voor de uitvoerpoort aan te vinken.
  5. Klik op de expressie-optie

Op het tabblad Poorten worden nu SAL, DEPTNO en de nieuwe uitvoerpoort SUM_SAL weergegeven.

Tabblad Poorten van AGGTRANS met de nieuwe uitvoerpoort SUM_SAL ingesteld op het gegevenstype double.

Stap 6) In het venster Expressie-editor

  1. Voeg de expressie sum(SAL) toe; je moet deze expressie zelf schrijven.
  2. Selecteer de knop OK; hiermee wordt het venster 'Transformaties bewerken' opnieuw geopend.

De expressie-editor toont de aggregatie-expressie die is toegewezen aan SUM_SAL.

Expressie-editor voor de SUM_SAL-poort die de aggregatie-expressie sum(SAL) bevat.

Stap 7) In het venster 'Transformaties bewerken' selecteert u de optie 'Groeperen op' door het selectievakje naast de kolom 'deptno' aan te vinken en klikt u op OK. Door 'Groeperen op' te selecteren voor 'deptno' geven we Informatica de opdracht om salarissen te groeperen op afdelingsnummer.

Tabblad Poorten met het selectievakje Groeperen op aangevinkt bij de poort DEPTNO

Stap 8) Koppel de kolommen deptno en sum_sal uit de Aggregator-transformatie aan de doeltabel. De mapping is dan van bron tot doel voltooid.

DEPTNO en SUM_SAL zijn vanuit AGGTRANS gekoppeld aan de doeldefinitie SUM_SAL_DEPTWISE.

Sla de kaart nu op.ping en voer het uit na het aanmaken van een nieuwe sessie voor deze kaartpingDe doeltabel zou de som van de salarissen per afdeling bevatten. Op deze manier kunnen we de Aggregator-transformatie gebruiken om geaggregeerde resultaten te berekenen.

Groeperen op havens in aggregator-transformatie

In de bovenstaande stap werd één poort gemarkeerd als 'Groeperen op', waardoor een totaalbedrag voor het hele bedrijf werd omgezet in één totaalbedrag per afdeling. Elke invoer-, invoer/uitvoer-, uitvoer- of variabele poort kan op dezelfde manier worden gemarkeerd.

De resultatenreeks is gebaseerd op drie regels:

  • Eén rij per groep. Wanneer waarden worden gegroepeerd, genereert de Integratieservice één rij voor elke unieke combinatie van de poorten waarop de groepering is gebaseerd.
  • Geen groepering op, één rij. Als er geen poort is gemarkeerd, wordt de gehele invoer als één groep beschouwd en wordt er één rij geretourneerd voor alle invoerrijen.
  • De laatste rij wint. Naast het geaggregeerde resultaat geeft de integratieservice doorgaans de laatst ontvangen rij in de groep door, tenzij een functie zoals FIRST een andere rij noemt.

Wanneer meerdere havens zijn aangegeven, bepaalt de volgorde van de havens de groepering.ping volgorde, en de volgorde kan het resultaat veranderen. Groepping door DEPTNO en vervolgens JOB is niet hetzelfde als groepping eerst op JOB en vervolgens op DEPTNO, omdat de waarden in de tweede kolom niet per se uniek hoeven te zijn.

Eigenschappen van aggregatortransformaties

Het tabblad Eigenschappen van het venster Transformaties bewerken bevat de instellingen die bepalen waar de cache zich bevindt en hoeveel ervan wordt gebruikt. De onderstaande tabel geeft een overzicht van deze instellingen.

omgeving Wat het controleert
Cachemap De lokale map waarin de Integration Service de index- en datacachebestanden aanmaakt. De standaardlocatie is de procesvariabele $PMCacheDir die is ingesteld in Workflow Manager.
Tracing Niveau De hoeveelheid details die voor deze transformatie in het sessielogboek is vastgelegd.
Gesorteerde invoer Geeft aan dat de binnenkomende gegevens al gesorteerd zijn op basis van de groepering per poort. Selecteer deze alleen wanneer de kaartping Het levert daadwerkelijk gesorteerde gegevens op.
Grootte van de aggregator-datacache Grootte van de datacache. De standaardwaarde is 2,000,000 bytes, en 'Auto' laat de Integration Service de grootte bepalen.
Grootte van de aggregatorindexcache Grootte van de indexcache. De standaardwaarde is 1,000,000 bytes, en 'Auto' laat de Integration Service de grootte bepalen.
Transformatiebereik Past de logica toe op elke transactie, of op alle binnenkomende gegevens. Alle invoer verwijdert de grenzen van de binnenkomende transacties.

Wanneer incrementele aggregatie is ingeschakeld, schrijft de Integration Service bij elke uitvoering een back-up van de cachebestanden, waardoor de cachemap twee sets bestanden moet bevatten in plaats van één.

Aggregatie-expressieregels en prestatietips

Een aggregatie-uitdrukking kan een aggregatiefunctie combineren met voorwaardelijke clausules en niet-aggregatiefuncties, waardoor voorwaardelijke sommen en tellingen binnen één poort mogelijk zijn. Twee regels beperken wat er geschreven kan worden.

  • Eén niveau van nesting. Slechts één aggregatiefunctie mag in een andere genest zijn, en de binnenste expressie wordt eerst geëvalueerd.
  • Geen vermenging. Een transformatie kan functies op één niveau of geneste functies bevatten, nooit beide. Als een transformatie beide bevat, markeert de ontwerper de afbeelding.ping Ongeldig, dus verdeel de logica over twee Aggregator-transformaties.

Wat de afstemming betreft, doen drie instellingen het meeste werk:

  • Gesorteerde invoer. Wanneer rijen gesorteerd binnenkomen op basis van de groepering per poort, kan elke groep worden vrijgegeven zodra de laatste rij binnenkomt. Hierdoor wordt er veel minder data in de cache opgeslagen en verloopt de sessie sneller. Gesorteerde invoer kan niet worden gecombineerd met incrementele aggregatie.
  • Incrementele aggregatie. Nieuwe bronrijen worden door de map verwerkt.ping En in combinatie met de historische cache in plaats van de geschiedenis opnieuw te berekenen, wat geschikt is voor een nachtelijke laadbeurt die een doorlopend totaal bijhoudt.
  • Filter vroegtijdig. Rijen die nooit zullen bijdragen aan een totaal, moeten vóór de Aggregator worden verwijderd, hetzij in de Source Qualifier-query, hetzij in een FiltertransformatieOmdat elke rij die de Aggregator bereikt cachegeheugen in beslag neemt. Dit is een van de standaardcontroles tijdens het proces. prestatieafstemming.

Veelgestelde vragen

De gezamenlijke familie omvat AVG, COUNT, FIRST, LAST, MAX, MEDIAN, MIN, PERCENTILE, STDDEV, SUM en VARIANCE. Elk retourneert een samenvattende waarde voor de niet-lege waarden in de geselecteerde poort.

De volledige invoer wordt als één groep behandeld, waardoor voor alle invoerrijen één rij wordt geretourneerd. Deze rij bevat het geaggregeerde resultaat samen met de laatste rij die de transformatie heeft ontvangen.

De indexcache bevat de groepswaarden, oftewel de waarden van de poorten die zijn gemarkeerd met 'Groeperen op'. De datacache bevat de rijgegevens die in de berekening worden gebruikt. Overloop van beide wordt naar cachebestanden geschreven.

Het stuurt alleen nieuwe brongegevens door de kaart.ping en combineert het met de historische gegevens van eerdere uitvoeringen, zodat de totalen worden bijgewerkt in plaats van opnieuw opgebouwd. Het kan niet worden gecombineerd met de optie voor gesorteerde invoer.

Standaard behandelt de Integratieservice null-waarden als NULL en slaat ze over, waardoor lege salarissen bij een somberekening worden genegeerd. De service kan echter zo worden geconfigureerd dat null-waarden in aggregatiefuncties als nul worden behandeld.

In de map die is opgegeven in de instelling 'Cache Directory', die standaard is ingesteld op de procesvariabele $PMCacheDir die is geconfigureerd in Workflow Manager. Zorg ervoor dat deze map bestaat en voldoende vrije schijfruimte heeft.

AI-assistenten analyseren brongegevens en werkbelastinggeschiedenis om te suggereren waar een totaalbedrag thuishoort en tot welke groep het behoort.ping Sleutels zijn belangrijk en bepalen waar een berekening in de database goedkoper is. Op machine learning gebaseerde adviseurs rangschikken de opties, waarna een engineer ze goedkeurt.

Copilot genereert snel expressies en de bijbehorende SQL, wat tijd bespaart op repetitief poortwerk. Het programma kan uw cachegroottes of poortvolgorde niet zien, dus valideer elke suggestie in de expressie-editor voordat u opslaat.

Vat dit bericht samen met: