Expression Tranformation in ODI
Hi,
I am trying to develop an existing informatica mapping in ODI.
my informatica ETL mapping design is like this:
Source Qualifier ----------->1st Exp Tranformation ---------------->2nd exp trnsf --------> lookup ------> insert/update
in the above design how can i implement 1st exp and 2nd exp transformations in ODI.
Thanks
Hi,
Thanks for the reply.
Yes,i used expression editor in one of my mappings.
in my question you can see 2 expression tranfrmations.
when i open target table expression editor i can apply the 1st exp transformations then how about 2nd exp tranformation which uses calculations from 1st.
Thanks
Similar Messages
-
What is the use of lookup tranformation in odi
Hi Experts,
What is the use of lookup transformation in ODI.
In ODI we use different kinds of joins, so my doubt is what is the difference between lookup transformation joins and normal joins we use in ODI.
Please let me know with your valueable information.
Thx,
Sahadeva.Use the SIM card to connect to the cell carrier 3G network when there is no wifi available.
To set it up, see this -> http://support.apple.com/kb/HT4157 -
Java BeanShell expression in ODI
hi experts,
i am working on ODI 11 g (11.1.1)
i have found java beanshell expression in standard ODI KM (IKM "IKM Oracle Slowly Changing Dimension", step 192 "Analyze integration table"):
<%=odiRef.getTable("L","INT_NAME","A").replaceAll("","").replaceAll("..>",".replaceAll(odiRef.getInfo( \\u0022DEST_WORK_SCHEMA\\u0022 )+\\u0022.\\u0022,\\u0022\\u0022)?>")%>
It translates, for example, "DWH_ETL.I$_SC_INTERMEDIARY" to "I$_SC_INTERMEDIARY"
Please explain in detail how it works?
specifically, i don't understand how works the expression:
replaceAll("..>",".replaceAll(odiRef.getInfo( \\u0022DEST_WORK_SCHEMA\\u0022 )+\\u0022.\\u0022,\\u0022\\u0022)?>")
Java function "replaceAll" (http://download.oracle.com/javase/6/docs/api/):
public String replaceAll(String regex,
String replacement)
replaces each substring of this string that matches the given regular expression with the given replacement.
What does mean the expression "..>" in this calling replaceAll?
it looks like a nested call to the substitution API (http://www.business-intelligence-quotient.com/?p=812)
thanks in advanceHI,
I have re configured as mentioned in your blog . But still getting same exception . Something I missed in my previous thread is below.
<Sep 19, 2012 3:34:46 PM EDT> <Error> <HTTP> <BEA-101216> <Servlet: "AgentServlet" failed to preload on startup in Web application: "trellisagent".
ODI-1400: Agent trellisagent start failure: JDBC connection error occurs while connecting to the master repository.
Caused by: java.security.AccessControlException: access denied (oracle.security.jps.service.credstore.CredentialAccessPermission context=SYSTEM,mapName=oracle.odi.credmap,keyName=SUPERVISOR read)
at oracle.odi.runtime.agent.servlet.AgentServlet.startup(AgentServlet.java:318)
at oracle.odi.runtime.agent.servlet.AgentServlet.init(AgentServlet.java:226)
at javax.servlet.GenericServlet.init(GenericServlet.java:242)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
I am stuck in asituation here :(
Ashish -
ODI JMS to SQL MESSAGESELECTOR
Hi,
Anybody had successful experience using ODI with JMS to SQL technology trying to consume messages from Weblogic Topic with MESSAGESELECTOR option? Having trouble that ODI consumed all messages from Topic indiscriminately whenever there was a MESSAGESELECTOR expression present from ODI Interface. Any suggestion/idea are welcome.
ALThere is definitely a message selector defined in the message. I am using Message Selector and ClientID (Subscriber ID) in LKM. It turns out that the subscriber needs to be configured with same message selector expression. Otherwise when ODI hit the subscriber, it behaves as if it is setting the message selector on the subscriber in Weblogic, and the setting operation will reset all messages.
Not sure if this is documented anywhere ( ODI or Weblogic ).
Thanks
Albert -
Exception while trying to insert data into Target Table
Hi ,
Im trying pick data from a table A which is in DB1 and trying to insert table B which is in DB2 .Below are the steps which I did.But im getting the exception
*"Caused By: java.sql.SQLSyntaxErrorException: ORA-02019: connection description for remote database not found:"* .Can some one help me with this .
Note : The DB that im using is Oracle 10g Express Edition and ODI studio is ODI 11.1.1.5.0
1.Created a two Data Server -one for each Data base (DB1 and DB2)
2.Created two Physical Schema under the respective Data Server
3.Created two Logical Schema referring respective Physical Schema
4.Created a two Models for each Logical schema and did Reverse Engineer
5.Created an Interface , imported the Knowledge models and did the mapping between the Source and Target Data Source
KM's used :
Source data store-Staging Area-LKM Oracle to Oracle (DBLink)
Target Properies-IKM Oracle Incremental Update
I unchecked Stagin Area Different from Target .
Thanks
JohnHi John,
I think you need to create public database link then create public synonym
After creating that, please check it from DB side it is working or not, then check from ODi end and go thru below URL hope this will helps you.
https://forums.oracle.com/forums/thread.jspa?threadID=530074
Thanks,
Phani -
Using pl/sql functions for transformation
How can I use pl/sql functions in the transformation mapping field for my interface?
I have a name field where firstname and lastname are concatenated via a space-character and I would like to extract this 'name' field to 2 separate database attributes.
This means that I need to use a function that uses SUBSTRING and INSTR to be able to get the firstname and lastname separatly out of the name-field.
The INSTR-function isn't known inside the expression editor in ODI so I'm wondering how I can use my own function?Hi Romanna,
Are you sure? Where did you do your transformation?
-Source, Staging area or Target
I try this on Oracle target...
FIRST_NAME = substr(MYTABLE.FIRST_LASTNAME, 1, instr(MYTABLE.FIRST_LASTNAME, ' ')-1)
LAST_NAME = substr(MYTABLE.FIRST_LASTNAME,instr(MYTABLE.FIRST_LASTNAME, ' ')+1) -
Not able to estabish connection with SQLServer2005 from the Topology Manage
I have installed Oracle Data Integrator 10.1.3.4.0 and and Microsoft Sqlserver 2005 Management Studio Express in my windows system and created repository in Oracle Database 11g. I have also downloaded Microsoft SQL Server 2005 JDBC Driver Version 1.0 and placed the jar file in the <odi_home>/drivers Folder.
I have to do a migration POC from Oracle DB 8i to Sqlserver(2005 express Edition) using ODI. In the Topology manager ,in the Physical Architecture
I give the connections details : UserName :sa Password:sa that is the user of Sqlserver.
Now in the JDBC Properties i give under jdbc Driver
com.microsoft.sqlserver.jdbc.SQLServerDriver
and jdbc URL
jdbc:microsoft:sqlserver://10.177.62.148:1084
The jdbc driver is not listed in the dropdown. I hardcode with com.microsoft.sqlserver.jdbc.SQLServerDriver which i found in ODI discussion forum.
But I am getting the error ava.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
Can anybody point me where I would be going wrong or is there any extra configuration I have to do.Hi Again,
I have followed whatever you all have suggested. But could not succeed. Then I decided to use SQLServer 2000 express edition. Installed this in SQL authentication mode and I am able to connect from the management studio with the user sa and also from the command prompt. But again from ODI in the Topology manager I am facing the same problem.
Now I select the default driver for sqlserver 2000 ie driver:com.microsoft.jdbc.sqlserver.SQLServerDriver
and URL: jdbc:microsoft:sqlserver://10.177.62.148:1433
or jdbc:microsoft:sqlserver://10.177.62.148:1433;SelectMethod=cursor
gives me error javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
and unknown source at many places.
I am using ODI 10.1.3.4 . Has anyone tested with the new release? -
I Have the following interface in oracle data integrator
http://i44.tinypic.com/2mrsmxt.png
# it execute successfully before inserting the following expression
In the mapping I insert the following SQL expression to get the average when the quantity is 0
AVG(
CASE WHEN TEST.QUN = 0 THEN
(SELECT TEST.QUN FROM TEST
WHERE TEST1.PRUDU=TEST.PRUDU
AND TEST1.FLOW=TEST.UNIT
AND TEST1.UNIT=TEST.UNIT
AND to_char(TEST.DATEDDD,'MON')= to_char(TEST1.DATEDDD,'MON')
AND TEST1.DATEDDD !=TEST.DATEDDD
GROUP BY TEST.QUN
ELSE TEST.QUN
END)
when I check this expression in ODI ..
# the sql expression is correct for this RDMS
when I executed the interface i get this error
Caused By: java.sql.SQLSyntaxErrorException: ORA-00937: not a single-group group function
any idea ?I changed the code a little ..
CASE WHEN TEST.QUN = 0 THEN
(SELECT AVG(TEST.QUN) FROM TEST
WHERE TEST1.PRUDU=TEST.PRUDU
AND TEST1.FLOW=TEST.FLOW
AND TEST1.UNIT=TEST.UNIT
AND to_char(TEST.DATEDDD,'MON')= to_char(TEST1.DATEDDD,'MON')
AND to_char(TEST.DATEDDD,'YYYY')!= to_char(TEST1.DATEDDD,'YYYY')
ELSE TEST.QUN
END
And I get this error ..
ORA-01427: single-row subquery returns more than one row tips.
The TEST Table from the source and TEST1 is a lookup table because I couldn't do the alais in ODI
In sql developer I did the following code that will do the same thing and work successfully ..
update test B
set B.qun=
(SELECT AVG(TEST.QUN) FROM TEST
WHERE TEST.FLOW=B.UNIT
AND TEST.UNIT=B.UNIT
AND TEST.PRUDU=b.prudu
AND TEST.FLOW=b.flow
AND to_char(TEST.DATEDDD,'MON')= to_char(B.DATEDDD,'MON')
AND to_char(TEST.DATEDDD,'YYYY')!= to_char(B.DATEDDD,'YYYY')
where B.qun=0;
any help ?
thanksssss
naif .. -
Unable to See the Technology Function in The Expression Editor- ODI 11G
Hi,
I am developing Interface whereas i am unable to see the Technology functions in the Expression Editor where i am trying to do some transformation .
Secondly in the Header it is showing Default language in place of SQL(Oracle)
any fix please..
Thanks,
KPI fixed it myself- thanks
Below was the step i did which resolved the issue. hope this will help others
Go to ODI Studio
In Topology- Expand Language
Import New Language
import in synonym INSERT_UPDATE mode
The Language definitions from $ODI_HOME/oracledi/xml-reference/LANG_SQL.xml
click OK
close ODI Studio and Open again. that fixed my issue.
Thanks, -
Tranforming a Preference in Expression builder expression
Hi there.
I have a BPEL processo Preferecence populated with something like: concat('this is a test: ', bpws:getVariableData('inputVariable','payload','/client:TesteDescriptoresProcessRequest/client:input'))
And when I do the ora:getPreference('TestPreference') I get a string with the expression that I whant to run/execute and assign to a variable.
<result>
concat('this is a test: ', bpws:getVariableData('inputVariable','payload','/client:TesteDescriptoresProcessRequest/client:input'))
</result>
But I want the result to be:
*<result>*
this is a test: 123
*</result>*
Someone knows how to tranform a string set in Prefereces to expression where i can use BPEL Expressions to assing values of variables ???
I already tryed to do ora:ParseEscapedXML(ora:getPreference('TestPreference')) but isn't working.
Thank you in advance.I'm still having that problem.
Someone can help me ? -
SQL Error : missing expression - Creating XML file with ODI
Hi,
I saw threads about errors like this and read that maybe it can come from how I chose the staging area. I still can't see where the problem is. I'm trying to create an xml file from data stored in a Oracle database. The interface which execution fails select data from tables and create a tag in the XML file. Here are information about it :
The staging area is diferent from the target and is an oracle database schema. (I guess it creates temporary tables in that schema ?)
In the flow tab, the LKM is LKM SQL to SQL, the option delete temporary objects is set to yes.
The IKM choice for the target is IKM SQL Control Append and options are as following :
- insert : yes
- commit : yes
- flow contreol : no
- recycle errors : no
- static control : no
- truncate : no
- delete all : no
- create target table : yes
- delete temporary objects : yes
Columns mapping in the target are the following :
WKID > THEADER.WKID
EXTID > THEADER.EXTID
ORDER > THEADER.ORDER
INSTFK > THEADER.INSTFK
For every column in the target :
- Run on source
- Updating : insert, update and ud4 are checked
no update key is defined
In the operator, the step failing when running the interface is the loading data in the work table.
If you need the SQL request in the execution plan, or anything else, please tell me.
Thank you in advance for any help on this.
MarieIt would help if you provide error message and its stack trace.
Please also look at the documentation (If not already done so) for creating xml file XML Files - 11g Release 1 (11.1.1) -
Hi All,
I am in the process of developing complex interfaces(mappings) using ODI.i did lot of development using other etl tool informatica.
since i am in the initial stages....could you please help me in finding ways implement following transformations in ODI.
1) Lookup tranformation
2) Insert/update Transformation
3) router transformation. etc...,
and also suggest some good reference materials on the above topics.
ThanksHi,
You have to work out your transformations in ODI designer .. "Diagram" and in "Flow" tabs.
Now to do
1. Lookup -- bring up the lookup tables in the datastore by reversing(same like ur source and target tables/views) and drag in the designer along with ur source for transformations. do ur txfm by either drag n drop or post ur query in the "Expression Editor" by selecting the target column.
2. Insert/Update- will be controlled by ur ODI IKM`s (Incrementel Update)
3. I dont know about router Txmf.
Visit : http://www.oracle.com/technology/products/oracle-data-integrator/10.1.3/htdocs/1013_support.html for ODI docs
Thanks -
Aggregator Transformation in ODI
Hi,
How do i implement aggragation using ODI interfaces...
transform the data accoridng to aggregator functions like
MIN
MAX
AVG
COUNT
FIRST
LAST
MEDIAN
PERCENTILE
STDDEV
SUM
VARIANCE
where do i specify the columns to be included in the group by function....
for example in informatica we have aggreagator tranformation wherein we can specify the columns to be cinsodered in group by...
ThanksHi Ace2,
When i use the aggregator function in the expression editor of the target column....i can see the group by function in the SQL in operator...
but group by has all the other columns...
say i have 10columns in my table....when i applicaed sum(coln1) then it is generationg the4 SQL as
select sun(coln1)
from table
gorup by coln2 thru coln10
i wqould like to specify only some of the columns in the group by clause....
Thanks
Is there any option to attach the screenshots here in this discussion forum.
Edited by: user4315565 on Mar 22, 2010 3:51 PM -
Help using oracle syntax "SUM(col1) over (order by col2)" using ODI
Hi all
I want to load data from oracle to ESSBASE using ODI, and I know oracle have such syntax sum(col1) over (order by col2,col3) which can get the accumulation data, e.g
Oracle data table
col1, col2, value
A 2009-1 10
A 2009-2 10
A 2009-3 10
And the essbase need
col1 col2 value
A 2009-1 10
A 2009-2 20
A 2009-3 30
However after i try this in ODI, error occur:
org.apache.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<string>", line 32, in ?
java.sql.SQLException: ORA-00979: not a GROUP BY expression
and the original generated SQl by ODI :
select 'HSP_InputValue' "HSP_Rates",MAP_KMDZ_TABLE.BUD_DYKM "Account",MAP_MONTH.ESS_MONTH "Period",MAP_YEAR.ESS_YEAR "Year",'Actual' "Scenario",'Draft' "Version",TEMP_LIRUN.CURRENCY "Currency",MAP_COMPANYCODE.ESS_COMPCODE "Entity",substr(MAP_KMDZ_TABLE.BUD_BUSINESSOBJECT,1,80) "BusinessObject",'Route_NoRoute' "Route",MAP_TRANSPORT.ESS_TRANSPORT "Transport",substr(MAP_KMDZ_TABLE.BUD_BUSINESSACTIVITY,1,80) "BusinessActivity",substr(MAP_KMDZ_TABLE.BUD_CHANNEL,1,80) "Source",'NoCounterparty' "Counterparty",sum(TEMP_LIRUN.DATAVALUE) over (order by MAP_KMDZ_TABLE.BUD_DYKM,MAP_YEAR.ESS_YEAR,MAP_MONTH.ESS_MONTH,TEMP_LIRUN.CURRENCY,MAP_COMPANYCODE.ESS_COMPCODE,MAP_TRANSPORT.ESS_TRANSPORT,MAP_KMDZ_TABLE.BUD_BUSINESSACTIVITY,MAP_KMDZ_TABLE.BUD_BUSINESSOBJECT,MAP_KMDZ_TABLE.BUD_CHANNEL) "Data" from ETL_DEV.TEMP_LIRUN TEMP_LIRUN, ETL_DEV.MAP_KMDZ_TABLE MAP_KMDZ_TABLE, ETL_DEV.MAP_MONTH MAP_MONTH, ETL_DEV.MAP_YEAR MAP_YEAR, ETL_DEV.MAP_COMPANYCODE MAP_COMPANYCODE, ETL_DEV.MAP_TRANSPORT MAP_TRANSPORT where (1=1) And (TEMP_LIRUN.COSTELMNT=MAP_KMDZ_TABLE.SAP_ZZKM)
AND (TEMP_LIRUN.FISCYEAR=MAP_YEAR.SAP_YEAR)
AND (TEMP_LIRUN.FISCPER3=MAP_MONTH.SAP_MONTH)
AND (TEMP_LIRUN.COMP_CODE=MAP_COMPANYCODE.SAP_COMPCODE)
AND (TEMP_LIRUN.WWHC=MAP_TRANSPORT.SAP_WWHC) Group By MAP_KMDZ_TABLE.BUD_DYKM,
MAP_MONTH.ESS_MONTH,
MAP_YEAR.ESS_YEAR,
TEMP_LIRUN.CURRENCY,
MAP_COMPANYCODE.ESS_COMPCODE,
substr(MAP_KMDZ_TABLE.BUD_BUSINESSOBJECT,1,80),
MAP_TRANSPORT.ESS_TRANSPORT,
substr(MAP_KMDZ_TABLE.BUD_BUSINESSACTIVITY,1,80),
substr(MAP_KMDZ_TABLE.BUD_CHANNEL,1,80)
I know ODI think sum.. over must append group by , however it's not! How to solve this problem.
Thank All for your attention
SOS!
EthanHi Ethan,
In my exeprnc I faced a similar kind of situation.
Two work arounds.
1. Write one procedure and execute the same using ODI procedure.
2. Customize a Km and use that KM in your interface.
I guess in your query Group by function is not needed. (if this is the case you can achive this by a smple customization step in KM)
for example : your current KM will generate a query like this:-
select x,y, sum(x) over (order by y) as sumx FROM TestTable group by x, y
and you need a query like this
select x,y, sum(x) over (order by y) as sumx FROM TestTable
go to your KM (duplicate the KM which you are using and rename _withoutGroup )
remove the group by function from select query
(remove the API function <%=snpRef.getGrpBy()%> from insert into i$ table step)
please let me know if you need more help on this
regards,
Rathish -
Hi All,
I am trying to import source gl_balances table to target table w_gl_balances.
In this target table I have created new column called BUDGET. Other columns are auto mapped to the target table.
BUDGET column mapping expression is DECODE(GL_BALANCES.ACTUAL_FLAG,'B', GL_BALANCES.PERIOD_NET_DR-GL_BALANCES.PERIOD_NET_CR, 0)
While running this interface I am getting error like ora-00904 "BUDGET": Invalid identifier.
Kindly advice regarding this.
Thanks in advance.Do you have FLOW Control enabled - CKM being used ?
Then most likely, the E$ table that was created with earlier version of the target table still exists and doesnt contain the BUDGET column and hence you get the error of invalid identifier.
Drop the E$ table and ODI will recreate that table with the updated definition.
Maybe you are looking for
-
Not able to print on Purchase order whatever we fill in item text
not able to print on Purchase order whatever we fill in item text, from where can we link to get printed item text on purchase order
-
I've been having some epic graphics issues with my tx2500z. I get a bunch of random colorful boxes that appear all over my screen and then my computer becomes unresponsive and needs to be shut down forcibly. Sometimes it blue screens as well. I have
-
Accessing the "outcome" value used in the navigation case
I would like to dynamically create a view based on the outcome value used in the navigation case. How can I reference the outcome value from a backing bean? For example assume that a page (mypage.faces) can be accessed via outcomeA and outcomeB. I wa
-
I have did to run this servlet but thereis an odd thing. This servlet query a service to database server to perform login mechanism. But the output always LoginFailed.jsp whenever i typed the user and password. Anyone wants to help.Please.Thanks in a
-
Dear we have a scenario batch pricing,in that we have requirement thatif price is not picked from the batch i should not allow to do invoice .Is it possible to do the customisation please help regards Damodhar