ODIExperts.com.

ODIExperts.com.

Bloggen for Oracle Data Integrator (ODI)

Jython & # 8217; s Beginners Guide for ODI.

Det er noen dager at vi ikke har nye innlegg her og & # 8230; Vi er ganske opptatt i virksomheten i de siste dagene.

Men her er vi med et nytt innlegg som vi personlig tror vil v re veldig nyttig for de som liker «dype» programmering i ODI.

Jeg haper dere alle nyter det!

Nar det kommer til ODI for eller senere, ma vi kanskje handtere Jython, og en som har brukt Java, vil finne det enkelt, men ikke for alle. Tatt i betraktning at vi tenkte pa a skrive dette innlegget i a forsta hvordan a handtere Jython i forhold til ODI. Vi skal ikke l re deg Jython

Vanligvis bruker mesteparten av bruken av Jython i ODI enten a fange opp og oke feil i operatoren, kjore OS-kommandoen og gjore det passende hvis og ellers tilstand, lese og behandle poster for RDBMS, Filbehandling basert pa forskjellig logikk og sa videre.

Nar vi bruker jython som java, ma vi importere forskjellige moduler, eksempel.

Vi kan ogsa importere Java-biblioteker noe som om du har sett noen av de siste kodene.

importer java.lang.sql som sql.

importer java.lang.io som io.

La oss se pa fa koder som vi kanskje bruker mer og mer.

Lese, skrive, skrive pa nytt.

Det er forskjellig format i dittthon a behandle filer, men vi personlig liker dette formatet.

Her i ovenstaende syntaks kan vi endre parametrene til filen av.

r & # 8211; bare for lesing.

r + & # 8211; skriv inn i samme fil igjen.

w & # 8211; skriver til en ny fil.

Nar vi bruker W (skriving) pa en eksisterende fil blir hele filen skyllet eller ryddet ut, sa v r forsiktig nar du peker pa en fil.

Det er igjen et annet format for a lese linjene i filene enten komplette eller linje for linje.

Vi kan skrive koder ved hjelp av listformatet for a behandle poster i minnet, men hvis vi handterer mange millioner av poster som ringer og lagrer til minne og behandling, kan det kaste minnefeil noe som java.lang.memory unntak. Nar vi husker det, skriver vi koder for a lese linje for linje og behandle tilsvarende.

Leser linje etter linje.

Denne maten nar vi trenger a lese bare en linje vi kan bruke til a lese () kommandoen. Pekeren pa linjen fortsetter a flytte en linje til neste linje.

La oss si om vi vil fortsette a lese alle linjene.

Dette over enkle programmet leser hele linjen en av og okes i for hver linje den leser, slik at vi til sist ogsa skriver ut verdien av «I», og angir antall linjer i Fil.

La meg dekke trinn for trinn.

Leser alle linjene i ett skudd.

Her er alle linjene i filene lest en liste og lagret i minnet feil, sa hvis vi har stor plate kan det kaste minne. A lose enten ga til Record ved rekordbehandling som kan v re litt tidkrevende eller oke Java-minnet for a handtere behandlingen.

Her leser linjene () alle linjene i kildefilen og lagrer seg i form av array og sender den til variable linjer.

Skriver dataene til File.

Det finnes forskjellige mater vi kan skrive inn i filene.

Hvis du skriver en streng, kan du bruke skrivestrengen til a skrive inn i filen.

I tilfelle du planlegger a skrive flere linjer, si array eller liste, kan du bruke writelines ()

Du kan ogsa bruke java BufferedWriter.

En av de raskeste matene a skrive inn i File er a lagre data i Variabel og skrive dem en gang i stedet for en stund eller for sloyfe, slik at den totale tiden reduseres. Denne ideen er flott nar du kjorer koder i Server, og da vi har hoyt minne til a behandle og lagre storre poster.

Hvis du noen gang vil ga til forste linje i filen, bruk sok (0) kommandoen, sa i det ovennevnte programmet hvis jeg vil ga til forste linje, blir det.

t Flytter pekeren til a inkludere en tabplassplass.

n Flytt pekeren til neste linje.

Sammenkoble strenger.

Ved hjelp av + kan vi sammenkoble to strenger.

Arsak er at vi ikke kan sammenkoble streng og et nummer.

losning 1 – definer tall i formatet av streng sa – str2 = ’25 ‘

losning 2 – Konverter den til streng mens du skriver ut – str (str2), sa skriv ut str1 + str (str2)

a konvertere fra noe til streng bruk str () funksjon.

a erstatte en hvilken som helst streng eller et tegn med en annen streng eller et tegn.

Arrays er morsom mate a handtere streng og tall. For a erkl re null-array, bruk denne syntaksen.

A erkl re noe som null-array til denne str1 = []

Konvertere arrayer til streng.

Konvertering av streng til array.

Konvertere tegn til Array.

Denne delte kommandoen er nyttig nar du onsker a dele strengen i ord og hente den nodvendige pa som det passer.

Raise er en god kommando for a opprette en feil, og vi kan bruke heve til a publisere den nodvendige feilen i Operator.Example.

heve «Dette er folgende feil», streng.

Fangstposisjon i streng.

Stringsok.

Det er noen flotte hoyt niva sok vi kan bruke regex, men her vil jeg vise deg her enkel sokemetode ved hjelp string.find.

nar string.find, finner den spesifikke strengen i den, refererer til stillingen, og det er grunnen til at jeg bruker & gt; 0.

Et annet enkelt og effektivt sok bruker Regular Expression (re).

Vennligst se pa lenken for mer mate a handtere enkle og komplette uttrykksmetoder og funksjoner pa.

os-modulen hjelper oss a gjore operativsystembasert aktivitet, enten i Windows eller Unix.

os.system kjorer et operativsystem kommando henter feilen hvis den mislykkes. Hvis prosessen er vellykket, sa 0 ellers den nodvendige feilmeldingen.

ODI har OS Command og OdiOSCommand a gjore stort sett det samme arbeidet uten a skrive noe duthon.

La oss ta et annet eksempel.

For os.system er 0 (null) alltid preget av suksess og resten av returkoderne ved feil eller feil.

AND og OR tilstand.

For og tilstand bruk denne & amp; (og symbol)

IF-betingelse.

[Note & # 8211; det er alltid en tabplassplass etter om tilstanden]

Mens tilstand.

Mens tilstanden er god nar vi trenger a behandle noe en etter en og utfore noe til slutten.

[Note & # 8211; det er alltid en tabplassplass nar tilstanden er til tilstanden er fullfort]

Jython + SQL.

Vi bruker ogsa Jython til a spille med SQL og skrive resultatet enten i File, Operator etc. For a bruke SQL bruker vi Java-bibliotekene.

importer java.lang. * som lang.

importer java.sql. * som sql.

Nar det gjelder Jython + SQL, er logikken, formatet stort sett det samme som Java, sa hvis du finner et eksempel med Java, kan du endre med fa enkle syntaksforandringer og skrive koder for Jython.

Den mest effektive maten er a bruke sunopsis API getJDBCConnection for a koble til Source system ved hjelp av Java eller Jython. Pa den maten ma vi ikke bekymre oss om a gi driverparametrene eller hardkoding dem, siden de kan forandre seg fra miljo til miljo. I tilfelle hvis du noen gang trenger a fa bestemt info om driver, bruker eller bruker du kan bruke API getInfo ()

Opprett opprinnelig tilkoblingen til Source System.

sourceConnection = odiRef.getJDBCConnection («SRC»)

Her i kommando pa kilde velger vi den nodvendige teknologien og tilhorende skjema.

Neste trinn er a lage setningen for utforelse.

sqlstmt = «SELECT» Feilet grensesnitt t ‘| | SUBSTR (ORIGIN, INSTR (ORIGIN,’) ‘) + 1,

LENGDE (ORIGIN)) || ‘Feilmelding tt-‘ || ERR_MESS || ‘nNo av feilmeldinger t’ ||

ERR_COUNT AS OUTPUT FRA ODI_TEMP.SNP_CHECK_TAB HVOR TRUNC (CHECK_DATE) = TRUNC (SYSDATE) »

I sqlstmt definerer vi komplett velg, sett inn, oppdater streng og send det til denne variabelen. Pa denne maten kan vi ringe det flere ganger, og hvis vi ma endre, kan vi endre det pa ett sted.

Her har vi brukt t for a fa mellomrom mellom kolonne og utgang og n for a fa neste resultat i andre linje, slik at resultatet kan bli mer organisert. For et utgangseksempel Vennligst besok denne lenken & # 8211; http://odiexperts.com/error-records-log.

For a utfore en valgt sok bruk executeQuery (sqlstmt) og sett inn / oppdater foresporselsbruk executeUpdate (sqlstmt).

For at du kan lese og behandle utvalgssporsmalet, pleier vi a lese det med en stundsloyfe og til slutt kan du bruke getInt, getString og hente de nodvendige postene. Vennligst se pa Java-dokumentasjonen for andre APIer.

Du kan ogsa andre lignende eksempel relatert til Jython + SQL.

Leter etter redaktor for a l re og praktisere Jython.

1. Eclipse [Plugins som Pydev, JyDT]

Jython Kilder og dokumentasjon.

Hvis du er pa utkikk etter Dokumentasjon pa Jython, ville den beste ressursen v re a se pa offisiell dokumentasjon av jython.

[Merk: Lenkene er for Jython 2.5, og sa kan du finne funksjoner og metoder som kanskje ikke stottes enda, siden ODI 10g er pa 2.1]

Ogsa du finner kanskje ikke sa mange koder eller eksempler for Jython, men du kan ogsa se Python dokumentasjon og eksempel ogsa, som Jython er Java + Python.

Du finner Python dokumentasjon her http://python.org/doc/

Jython anerkjenner ikke Windows 7 som NT.

Handtering av mellomrom i sti.

Mens passerer OS-systembanen, spesielt i Windows, har vi problemer med mellomrom som forarsaker feilen Path eksisterer ikke, eller filen ikke funnet, etc. For a lose det, Vennligst ha mellomrom mellom mappenavnet mellom to parenteser. Si for eksempel.

Programfilen er & # 8211; Program & # 8221; & # 8220; Fil (Program & lt; double_quote & gt; & lt; space & gt; & lt; double_quote & gt; Fil).

Microsoft SQL Server er Microsoft & # 8221; & # 8220; SQL & # 8221; & # 8220; Server.

\ i Windows-banen.

Det er godt a bruke de to skrastreket i Windows-banen, og det er grunnen til at noen av kombinasjonene gir verdier som Jethon forstar forskjellig, sier for eksempel.

I dette eksempelet vil n og t bli forstatt av Jython som neste linje og tabspapel som forarsaker a lese linjen feil og ville kaste feil som fil ikke funnet eller banen eksisterer ikke etc, sa den riktige maten a skrive er (dvs. a bruke dobbel skrastrek)

Haper dette burde gi nybegynnere en guide til verdenen til Jython + ODI.

Vi har dekket noen koder fra Jython og kan oppdatere dette innlegget i fremtiden ogsa, slik at vi har konsolidert Jython guide pa ett sted.

[Merk: Det er mange andre mater a gjore de ovennevnte koder pa en annen mate, du kan utforske mer ved a se pa Jython boker og dokumentasjon. ]

Fortsett a se pa odiexperts for flere tips og triks.

Skrevet dato: 5. november 2010.

Forfatter: Cezar Santos.

30 kommentarer.

Jeg bruker ogsa jython i mitt nav rende prosjekt som er i ODI 12c. Jeg har observert at noen ganger er duthon-koden skrevet i ODI-prosedyrene lagret i feil format som all koden i en enkelt linje. Pa grunn av hvilken prosedyren mislykkes.

Er det en feil i ODI, eller er det uansett a overvinne dette problemet?

Er det noen mate a fange responsverdien inn i ODI-variabelen?

Jeg har problemer nar jeg bruker dinthon.

jeg vil pakke ut filen med dinthon kode, men jeg finner ikke en god oppl ring om det ..

sa, hvis du finner los pa det eller har du en klar oppl ring, kan jeg se den?

Tusen takk.

Jeg bruker duthon prosedyre i ODI for a lese listen over filer jeg har i noen katalog i min pc.

Alt fungerer fint mens jeg utforer det som en prosedyre. Liste over filer er generert og.

Jeg lagrer filnavnene i databasen.

Men nar jeg genererer et scenario og planlegger det pa et bestemt.

tid, det mislykkes og gir meg & # 8220; Filen ikke funnet feil mens du leser banen i hjemmekatalogen.

Har noen noen gang mott dette problemet?

Eventuell hjelp vil bli veldig forvitret.

Kan du hjelpe meg med a lese folgende eksempel & # 8216; feil & # 8217; fil ved hjelp av ODI Jython Prosedyre, der hvis den finner & # 8216; FEIL & # 8217; den skal & # 8216; RAISE & # 8217; og feil.

FEIL-1003065 & # 8211; Data load stream inneholder [815] null og [1] #MISSING celler.

ADVARSEL & # 8211; 1003065 & # 8211; Data load stream inneholder [815] null og [1] #MISSING celler.

ADVARSEL & # 8211; 1241114 & # 8211; Det var feil, se i DMdata.err.

Tusen takk for din tid pa dette.

Jeg har nettopp begynt a bruke Jython.

Som koden gitt ovenfor for a fa antall rader i en fil og skrive den ut.

Jeg har nettopp kopiert limt inn og kjorte koden. Det skriver ikke ut noe; ikke engang strengdelen, men det gir ingen feil.

importer java.lang sa lang.

importer java.sql som jsql.

1 & gt; Filplassering er korrekt.

2 & gt; Filen har noen soppelpost uten noen avgrensning.

3 & gt; I operator kan jeg ikke se meldingen Totalt antall linjer, i.

Beklager, jeg har provd med underkoden forst for a fa antall rader i filen ..

Skriv ut & # 8216; Totalt antall linjer & # 8217 ;, i.

Jeg vil sende en ODI-post basert pa tellingen til en darlig fil. Jeg har skrevet en prosedyre i dittthon for a finne tellingen av darlig fil. Men.

er det mulig a utlose odiSendMail-verktoyet fra en egen prosedyre?

Jeg antar at du skrev det i ODI Prosedyre, ikke sant?

La meg foresla en annen tiln rming:

1) bruk http://odiexperts.com/how-to-refresh-odi-variables-from-file-part-2-getting-all-lines-once-at-time/ post for a lese antall rader i den darlige filen (jeg antar at det er en .bad-fil med flere linjer, er det riktig)

2) variabelen #vLineNumber kan brukes i et ODISendEmail-verktoy i en hvilken som helst pakke som du onsker.

Pa denne maten trenger du ikke jhyton-koden.

Jeg prover a bruke erstatningsstrengen for a kunne endre writePictureTo filnavnet, sa jeg kan endre innspillet og filnavnet endres automatisk.

Eventuell assistanse vil bli appriciated,

Hei jeg prover a importere tilfeldig klasse som under eclipse.

fra java.util import tilfeldig.

men jeg far en feil som & # 8220; Uopplost import: Tilfeldig & # 8221;

vennligst gi meg beskjed om hvilken innstilling jeg trenger for a gjore inorder for a fa det til a fungere.

Prov i dette formatet a importere java.util.random som tilfeldig og se om dette hjelper.

Jeg ma skrive feiltabeller (E $) til filer (en fil for hvert feiltabell). Jeg tenkte at det ville v re interessant a skrive en Jython-kommando med en loop som detererer for hvert generert feiltabell. I hver iterasjon ville jeg ringe OdiSqlUnload odi verktoy, men & # 8230; det er mulig a ringe en odi-kommando fra Jython?

Ogsa, jeg vil skrive feiltabellene pa disse filene.

Hvordan ville du n rme deg dette problemet?

Takk pa forhand.

Se om du vil ha med overskriften, ville den enkle maten v re.

Kommando pa kilde.

Velg tabellnavn fra all_tables hvor tabellnavn som & # 8216; E $ _% & # 8217;

Kommando pa mal & # 8211; Sunopsis API.

OdiSqlUnload (nodvendig alternativ) & # 8211; sporring = velg * fra #table_name.

Problem med denne losningen kan du ikke generere header.

Kommando pa mal & # 8211; Sunopsis API.

OdiSqlUnload Velg * fra.

Du kan ogsa bruke Jython for OdiSqlUnload, sa du ma kanskje generere startcmd-setning for hver setning og fortsette a ringe den.

Gi meg beskjed hvis du trenger mer hjelp.

Jeg har ODI 11g og jdk 1.6 i min maskin.

Jeg prover a kjore egendefinert klasse metode fra ODI, for det jeg opprettet en klasse, gjorde krukke for klassen og kopierte den deretter til stedet «C: oracle11.1.0ODIoraclediagentdrivers & # 8221;

som gitt pa & # 8220; http: //www.business-intelligence-quotient.com/? p = 941 & # 8243; omradet ogsa.

Deretter opprettet en prosedyre i ODI.

bruker Java Bean Shell som teknologi og.

bruker Jython som teknologi.

men i begge tilfellene far jeg litt unntak.

1. i Jython-saken

org.apache.bsf.BSFException: BeanShell skriptfeil: Parse error pa linje 1, kolonne 8. Oppdaget: Hei BSF info: Kommando 0 pa linje: 0 kolonne: columnNo.

pa bsh.util.BeanShellBSFEngine.eval (Ukjent kilde)

pa bsh.util.BeanShellBSFEngine.exec (Ukjent kilde)

2. i Java Bean Shell Case.

java.lang.Exception: BeanShell skriptfeil: Sourced file: inline evaluering av: & # 8220; importere Hello; Hei h = ny Hello (); h.ShowHello (); ; & # 8221; : Typet variabel deklarasjon: Klasse: Hei ikke funnet i navneomrade: pa linje: 6: i fil: inline evaluering av: & # 8220; importere Hello; Hei h = ny Hello (); h.ShowHello (); ; & # 8221; : Hallo.

BSF info: Kommando 0 pa linje: 0 kolonne: columnNo.

Forarsaget av: org.apache.bsf.BSFException: BeanShell skriptfeil: Sourced file: inline evaluering av: & # 8220; importere Hello; Hei h = ny Hello (); h.ShowHello (); ; & # 8221; : Typet variabel deklarasjon: Klasse: Hei ikke funnet i navneomrade: pa linje: 6: i fil: inline evaluering av: & # 8220; importere Hello; Hei h = ny Hello (); h.ShowHello (); ; & # 8221; : Hallo.

BSF info: Kommando 0 pa linje: 0 kolonne: columnNo.

pa bsh.util.BeanShellBSFEngine.eval (Ukjent kilde)

pa bsh.util.BeanShellBSFEngine.exec (Ukjent kilde)

Vennligst vis hva som er problemet i dette. Har jeg gatt glipp av noe ??

startet du om igjen agenten etter a ha plassert jarfilen.

Ok, jeg vil importere ODI-objekter i depotet.

Na kan jeg lese katalog og i mens jeg utforer noe slikt:

command = & # 8217; startcmd.bat OdiImportScen & # 8220; -FILE_NAME = & # 8217; full_file_name ‘& # 8221; & # 8220; -IMPORT_MODE = SYNONYM_INSERT_UPDATE & # 8221; & # 8216;

hvis os.system (kommando) 0:

Men jeg vil utfore.

OdiImportScen ikke som ekstern OS-kommando, men direkte som ODI API-funksjon.

Ha teknologien som Sunopsis API og skriv inn Import-kommandoen og se om det hjelper.

Men hvis du prover a hente verdien gjennom et program, prov Java i stedet for Jython.

Kommandoen pa malet.

Teknologi & # 8211; Sunopsis API.

OdiImportScen & # 8220; -FILE_NAME = & # 8221; & # 8220; -IMPORT_MODE = SYNONYM_INSERT_UPDATE & # 8221; & # 8216;

Eller kan det v re en annen mate:

utfor Jyton-koden som & # 8220; Kommando pa kilde & # 8221; og mens du kjorer, kjorer du Odi Api som & # 8220; Command on Target & # 8221 ;.

Jeg tviler pa Command on Source med Jython og ODI Api i malet., Kan du prove hva du prover a oppna?

Er det mulig a ringe odi api funksjon fra Jyton kode?

Ikke via startcmd, men & # 8220; direkte & # 8221 ;.

mens du tester & # 8220; Konvertering av arrayer til streng & # 8221; Del, jeg mislyktes. Ma jeg importere noen java-klasser for dette?

bare importer modulstrengen.

haper dette hjelper.

Takk for svaret ditt, men.

1 & # 8211; hvor jeg satte duthonet?

2 & # 8211; Og hvis jeg folger deg, i variablen V_MA_variable b.

I Refresh-fanen jeg legger.

velg & # 8221; fra dual.

takk pa forhand.

Ga med Java og bruk den nodvendige kommandoen i Java, hent denne verdien os.path.getsize («/ path / MyFile.txt») til en javavarible og ring deretter inn ODI-variabelen med velg & # 8221; fra dual.

Bruke Jython kan du ikke kalle det utenfor prosedyresesjonen, sa det er ikke mulig a hente jython-variabelen utenfor i ODI-variabelen, sa v r sa snill a ga til Java-koder.

Juste ett sporsmal om Jython og ODI Variable.

Hvordan kan jeg sette en variabel verdi med resultatet av Jython-koden?

Jeg vil vite filstorrelsen eller opprettingsdatoen fra en fil:

Men jeg vet ikke hvordan du kan pavirke en variabel med dinthon-kode.

Ga til Java og ring java variabelen i ODI variabel som denne velg & # 8221; fra dual og ring den i pakken i oppdateringsmodus.

Er det mulig a fa arraylister eller andre data fra andre komplekse strukturer fra jarfiler?

Hvis ikke, hvilken er den beste maten a fa data fra jar-filer?

hvor uli har opprettet en jar-fil og deretter importerer og leser den.

Na med hensyn til a lage arraylistene, bor det ikke v re et problem du kan lage en dummy listevariabel og deretter legge til den eller finne en annen metode, enten fra Jython dokumentasjon eller til og med se etter python eksempel siden syntaksen er det samme for begge, og du kan finne flere eksempler pa pythonen.

Haper dette hjelper.

Hei folkens. Flott arbeid som alltid.

Jeg vil foresla a lage en PDF fra den: ODI Jython juksark. Jeg kan ogsa distribuere gjennom bloggen min. For storre distribusjon.


Vil du spille i det beste kasinoet? Vi fant det for deg. Spill her nå!