0% found this document useful (0 votes)
137 views

Informatica Dynamic Lookup Cache

The document discusses dynamic lookup caches in Informatica. A dynamic lookup cache updates in real-time as the underlying source data changes, unlike a static cache which is fixed once built. This allows lookups to always reflect the current state of the source. Dynamic caches are useful when loading duplicate data, updating master tables, or loading dimension and fact tables simultaneously. The document explains how dynamic lookups work and provides an example mapping configuration.

Uploaded by

Vivek
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
137 views

Informatica Dynamic Lookup Cache

The document discusses dynamic lookup caches in Informatica. A dynamic lookup cache updates in real-time as the underlying source data changes, unlike a static cache which is fixed once built. This allows lookups to always reflect the current state of the source. Dynamic caches are useful when loading duplicate data, updating master tables, or loading dimension and fact tables simultaneously. The document explains how dynamic lookups work and provides an example mapping configuration.

Uploaded by

Vivek
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

7/16/2017 InformaticaDynamicLookupCache

InformaticaDynamicLookupCache
dwbi.org /etl/informatica/138dynamiclookupcache
WrittenbySauravMitra

ALookUpcachedoesnotchangeitsdataoncebuilt.Butwhatiftheunderlyingtableuponwhichlookupwasdone
changesthedataafterthelookupcacheiscreated?Isthereawaysothatthecachealwaysremainuptodate
eveniftheunderlyingtablechanges?

WhydoweneedDynamicLookupCache?

Let'sthinkaboutthisscenario.Youareloadingyourtargettablethroughamapping.Insidethemappingyouhave
aLookupandintheLookup,youareactuallylookingupthesametargettableyouareloading.

Youmayaskme,"So?What'sthebigdeal?Wealldoitquiteoften...".Andyesyouareright.

Thereisno"bigdeal"becauseInformatica(generally)cachesthelookuptableintheverybeginningofthe
mapping,sowhateverrecordgettinginsertedtothetargettablethroughthemapping,willhavenoeffectonthe
Lookupcache.

Thelookupwillstillholdthepreviouslycacheddata,eveniftheunderlyingtargettableischanging.

ButwhatifyouwantyourInformaticaLookupcachetogetupdatedasandwhenthedataintheunderlyingtarget
tablechanges?

Whatifyouwantyourlookupcachetoalwaysshowtheexactsnapshotofthedatainyourtargettableatthat
pointintime?Clearlythisrequirementwillnotbefullfilledincaseyouuseastaticcache.Youwillneedadynamic
cachetohandlethis.

Butinwhichscenariowillsomeoneneedtouseadynamiccache?Tounderstandthis,let'sfirstunderstanda
staticcachescenario.

StaticLookupCacheScenario

Let'ssupposeyourunaretailbusinessandmaintainallyourcustomerinformationinacustomermastertable
(RDBMStable).Everynight,allthecustomersfromyourcustomermastertableisloadedintoaCustomer
Dimensiontableinyourdatawarehouse.Yoursourcecustomertableisatransactionsystemtable,probablyin
3rdnormalform,anddoesnotstorehistory.Meaning,ifacustomerchangeshisaddress,theoldaddressis
updatedwiththenewaddress.

Butyourdatawarehousetablestoresthehistory(maybeintheformofSCDTypeII).Thereisamapthatloads
yourdatawarehousetablefromthesourcetable.TypicallyyoudoaLookupontarget(staticcache)andcheck
witheveryincomingcustomerrecordtodetermineifthecustomerisalreadyexistingintargetornot.Ifthe
customerisnotalreadyexistingintarget,youconcludethecustomerisnewandINSERTtherecordwhereasif
thecustomerisalreadyexisting,youmaywanttoupdatethetargetrecordwiththisnewrecord(iftherecordis
updated).Thisscenariocommonlyknownas'UPSERT'(updateelseinsert)scenarioisillustratedbelow.

AstaticLookupCachetodetermineifasourcerecordisneworupdatable
7/16/2017 InformaticaDynamicLookupCache

Youdon'tneeddynamicLookupcachefortheabovetypeofscenario.

DynamicLookupCacheScenario

NoticeinthepreviousexampleImentionedthatyoursourcetableisanRDBMStable.Generallyspeaking,this
ensuresthatyoursourcetabledoesnothaveanyduplicaterecord.

But,Whatifyouhadaflatfileassourcewithmanyduplicaterecordsinthesamebunchofdatathatyouaretrying
toload?(OrevenaRDBMStablemayalsocontainduplicaterecords)

WouldthescenariobesameifthebunchofdataIamloadingcontainsduplicate?

UnfortunatelyNot.Let'sunderstandwhyfromthebelowillustration.Asyoucanseebelow,thenewcustomer
"Linda"hasbeenenteredtwiceinthesourcesystemmostlikelymistakenly.Thecustomer"Linda"isnotpresent
inyourtargetsystemandhencedoesnotexistinthetargetsidelookupcache.

Whenyoutrytoloadthetargettable,Informaticaprocessesrow3andinsertsittotargetascustomer"Linda"
doesnotexistintarget.ThenInformaticaprocessesrow4andagaininserts"Linda"intotargetsinceInformatica
lookup'sstaticcachecannotdetectthatthecustomer"Linda"hasalreadybeeninserted.Thisresultsinto
duplicaterowsintarget.

Theproblemarisingfromabovescenariocanberesolvedbyusingdynamiclookupcache

Herearesomemoreexampleswhenyoumayconsiderusingdynamiclookup,

Updatingamastercustomertablewithbothnewandupdatedcustomerinformationcomingtogetheras
shownabove
Loadingdataintoaslowlychangingdimensiontableandafacttableatthesametime.Remember,you
typicallylookupthedimensionwhileloadingtofact.Soyouloaddimensiontablebeforeloadingfacttable.
Butusingdynamiclookup,youcanloadbothsimultaneously.
Loadingdatafromafilewithmanyduplicaterecordsandtoeliminateduplicaterecordsintargetby
updatingaduplicaterowi.e.keepingthemostrecentrowortheinitialrow
Loadingthesamedatafrommultiplesourcesusingasinglemapping.JustconsiderthepreviousRetail
businessexample.IfyouhavemorethanoneshopsandLindahasvisitedtwoofyourshopsforthefirst
time,customerrecordLindawillcometwiceduringthesameload.

Howdoesdynamiclookupcachework

Onceyouhaveconfiguredyourlookuptousedynamiccache(wewillseebelowhowtodothat),whenIntegration
Servicereadsarowfromthesource,itupdatesthelookupcachebyperformingoneofthefollowingactions:

Insertstherowintothecache:Iftheincomingrowisnotinthecache,theIntegrationServiceinsertsthe
rowinthecachebasedoninputportsorgeneratedSequenceID.TheIntegrationServiceflagstherowas
insert.
Updatestherowinthecache:Iftherowexistsinthecache,theIntegrationServiceupdatestherowin
thecachebasedontheinputports.TheIntegrationServiceflagstherowasupdate.
7/16/2017 InformaticaDynamicLookupCache

Makesnochangetothecache:Thishappenswhentherowexistsinthecacheandthelookupis
configuredorspecifiedToInsertNewRowsonlyor,therowisnotinthecacheandlookupisconfiguredto
updateexistingrowsonlyor,therowisinthecache,butbasedonthelookupcondition,nothingchanges.
TheIntegrationServiceflagstherowasunchanged.

NoticethatIntegrationServiceactuallyflagstherowsbasedontheabovethreeconditions.

Andthat'sagreatthing,because,ifyouknowtheflagyoucanactuallyreroutetherowtoachievedifferentlogic.

Fortunately,assoonasyoucreateadynamiclookupInformaticaaddsoneextraporttothelookup.Thisnewport
iscalled:

NewLookupRow

Usingthevalueofthisport,therowscanberoutedforinsert,updateortodonothing.Youjustneedtousea
RouterorFiltertransformationfollowedbyanUpdateStrategy.

Oh,forgottotellyoutheactualvaluesthatyoucanexpectinNewLookupRowportare:

0=IntegrationServicedoesnotupdateorinserttherowinthecache.
1=IntegrationServiceinsertstherowintothecache.
2=IntegrationServiceupdatestherowinthecache.

WhentheIntegrationServicereadsarow,itchangesthelookupcachedependingontheresultsofthelookup
queryandtheLookuptransformationpropertiesyoudefine.Itassignsthevalue0,1,or2totheNewLookupRow
porttoindicateifitinsertsorupdatestherowinthecache,ormakesnochange.

ConfiguringaDynamicLookupMappingExample

Ok,IdesignamappingforyoutoshowDynamiclookupimplementation.Ihavegivenafullscreenshotofthe
mapping.Sincethescreenshotisslightlybigger,soIlinkitbelow.Justclicktoexpandtheimage.
7/16/2017 InformaticaDynamicLookupCache

Ifyoucheckthemappingscreenshot,thereIhaveusedaroutertoreroutetheINSERTgroupandUPDATE
group.Therouterscreenshotisalsogivenbelow.NewrecordsareroutedtotheINSERTgroupandexisting
recordsareroutedtotheUPDATEgroup.

DynamicLookupSequenceID

Whileusingadynamiclookupcache,wemustassociateeachlookup/outputportwithaninput/outputportora
sequenceID.TheIntegrationServiceusesthedataintheassociatedporttoinsertorupdaterowsinthelookup
cache.TheDesignerassociatestheinput/outputportswiththelookup/outputportsusedinthelookupcondition.
7/16/2017 InformaticaDynamicLookupCache

WhenweselectSequenceIDintheAssociatedPortcolumn,theIntegrationServicegeneratesasequenceIDfor
eachrowitinsertsintothelookupcache.

WhentheIntegrationServicecreatesthedynamiclookupcache,ittrackstherangeofvaluesinthecache
associatedwithanyportusingasequenceIDanditgeneratesakeyfortheportbyincrementingthegreatest
sequenceIDexistingvaluebyone,whentheinsertinganewrowofdataintothecache.

WhentheIntegrationServicereachesthemaximumnumberforageneratedsequenceID,itstartsoveratone
andincrementseachsequenceIDbyoneuntilitreachesthesmallestexistingvalueminusone.IftheIntegration
ServicerunsoutofuniquesequenceIDnumbers,thesessionfails.

DynamicLookupPorts

Thelookup/outputportoutputvaluedependsonwhetherwechoosetooutputoldornewvalueswhenthe
IntegrationServiceupdatesarow:

Outputoldvaluesonupdate:TheIntegrationServiceoutputsthevaluethatexistedinthecachebefore
itupdatedtherow.
Outputnewvaluesonupdate:TheIntegrationServiceoutputstheupdatedvaluethatitwritesinthe
cache.Thelookup/outputportvaluematchestheinput/outputportvalue.

Note:WecanconfiguretooutputoldornewvaluesusingtheOutputOldValueOnUpdatetransformation
property.

HandlingNULLindynamicLookUp

IftheinputvalueisNULLandweselecttheIgnoreNullinputsforUpdatepropertyfortheassociatedinputport,
theinputvaluedoesnotequalthelookupvalueorthevalueoutoftheinput/outputport.Whenyouselectthe
IgnoreNullproperty,thelookupcacheandthetargettablemightbecomeunsynchronizedifyoupassnullvalues
tothetarget.Youmustverifythatyoudonotpassnullvaluestothetarget.

Whenyouupdateadynamiclookupcacheandtargettable,thesourcedatamightcontainsomenullvalues.The
IntegrationServicecanhandlethenullvaluesinthefollowingways:

Insertnullvalues:TheIntegrationServiceusesnullvaluesfromthesourceandupdatesthelookup
cacheandtargettableusingallvaluesfromthesource.
IgnoreNullinputsforUpdateproperty:TheIntegrationServiceignoresthenullvaluesinthesource
andupdatesthelookupcacheandtargettableusingonlythenotnullvaluesfromthesource.

Ifweknowthesourcedatacontainsnullvalues,andwedonotwanttheIntegrationServicetoupdatethelookup
cacheortargetwithnullvalues,thenweneedtochecktheIgnoreNullpropertyforthecorresponding
lookup/outputport.

WhenwechoosetoignoreNULLs,wemustverifythatweoutputthesamevaluestothetargetthatthe
IntegrationServicewritestothelookupcache.WecanConfigurethemappingbasedonthevaluewewantthe
IntegrationServicetooutputfromthelookup/outputportswhenitupdatesarowinthecache,sothatlookup
cacheandthetargettablemightnotbecomeunsynchronized.

Newvalues.Connectonlylookup/outputportsfromtheLookuptransformationtothetarget.
Oldvalues.AddanExpressiontransformationaftertheLookuptransformationandbeforetheFilteror
Routertransformation.AddoutputportsintheExpressiontransformationforeachportinthetargettable
andcreateexpressionstoensurethatwedonotoutputnullinputvaluestothetarget.

SomeotherdetailsaboutDynamicLookup
7/16/2017 InformaticaDynamicLookupCache

Whenwerunasessionthatusesadynamiclookupcache,theIntegrationServicecomparesthevaluesinall
lookupportswiththevaluesintheirassociatedinputportsbydefault.

Itcomparesthevaluestodeterminewhetherornottoupdatetherowinthelookupcache.Whenavalueinan
inputportdiffersfromthevalueinthelookupport,theIntegrationServiceupdatestherowinthecache.

Butwhatifwedon'twanttocompareallports?

WecanchoosetheportswewanttheIntegrationServicetoignorewhenitcomparesports.TheDesigneronly
enablesthispropertyforlookup/outputportswhentheportisnotusedinthelookupcondition.Wecanimprove
performancebyignoringsomeportsduringcomparison.(Learnhowtoimproveperformanceoflookup
transformationhere)

Wemightwanttodothiswhenthesourcedataincludesacolumnthatindicateswhetherornottherowcontains
dataweneedtoupdate.SelecttheIgnoreinComparisonpropertyforalllookupportsexcepttheportthat
indicateswhetherornottoupdatetherowinthecacheandtargettable.

Note:WemustconfiguretheLookuptransformationtocompareatleastoneportelsetheIntegrationServicefails
thesessionwhenweignoreallports.

You might also like