OR
(How to load all Employees data based upon Deptno in different target file through single Target Instance and Single Mapping.)
Ex: If Deptno=10 then create Target file as DEPT10.txt
If Deptno=20 then create Target file as DEPT20.txt
If Deptno=30 then create Target file as DEPT30.txt
Theory/Analysis:
First we need to use FileName column. Then sort data based upon deptno and compare it. If new record deptno and old record deptno is not equal then raise a flag(Condition A). Now we need to group all same deptno altogether so, we need to develop one more condition like if (Condition A) flag is 'Y' and new record deptno and old record deptno is equal then set flag 'Y' (Condition B). Hard code file name like DEPT||DEPTNO||.txt for file name column. In Transaction Control Transformation develop expression like if Condition B is false then TC_Commit_After else TC_Continue_Transaction. (Phewwww :-) I know it's confusing let's do it practically)
Practically:
Step 1
Target Designer
Select Your Target-->Edit-->Column Tab--> In Right Corner you will see an Icon to create FileName Column. (Near Up Arrow/Down Arrow you can see this)
Note: As I am taking Relation Source so, I am overriding SQL in Source Qualifier.
SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, EMP.MGR, EMP.HIREDATE, EMP.SAL, EMP.COMM, EMP.DEPTNO
FROM EMP
ORDER BY EMP.DEPTNO
Instead of this you can also use Sorter Transformation
Note: As I am taking Relation Source so, I am overriding SQL in Source Qualifier.
SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, EMP.MGR, EMP.HIREDATE, EMP.SAL, EMP.COMM, EMP.DEPTNO
FROM EMP
ORDER BY EMP.DEPTNO
Instead of this you can also use Sorter Transformation
Step 2
Expression
Create Six Ports
COMPARE_DEPT (Variable Port) = IIF(DEPTNO != OLD_DEPTNO, DEPTNO, OLD_DEPTNO)
COMPARE_DEPT_TC (Variable Port) = IIF(DEPTNO != OLD_DEPTNO, 1,0)
NEW_DEPT (Variable Port) = IIF(DEPTNO = OLD_DEPTNO AND COMPARE_DEPT_TC=1, 1, 0)
OLD_DEPTNO (Varibale Port) = COMPARE_DEPT
NEXT_FILE (Output Port)=NEW_DEPT
File_Name (Output Port) = 'DEPT'||DEPTNO||'.txt'
Step 3
Transaction Control Transformation
Transaction Control Condition=IIF(NEXT_FILE=0, TC_COMMIT_AFTER,TC_CONTINUE_TRANSACTION)
BINGO!!!
isn't it simple :-)
Feel free to post your doubt in comment section.
Due to limitation, I can't attach exported .xml file which you can Import in your repository and see or analyse. (Feel free to mail me if you need .xml file with Scenario number and Question.)
If you like the approach and solution feel free to share with others.
Thanks.
hpandey.harsh@gmail.com
Hi harsha...here in the step 3, that is Transaction control Tr....How you have assigned NEXT_File=0, as this is variable port..how u can call in TCT? I am not able to do this? Can u please explain me
ReplyDeleteThis comment has been removed by the author.
DeleteI am extremely sorry Lakshman Reddy.
ReplyDeleteI usualy do proof reading after publishing but this error I missed :-(
NEXT_FILE is an Output Port it's not a Variable Port. We are using NEXT_FILE port to take the value of NEW_DEPT port which is variable port.
Convert NEXT_FILE to Output Port and you are good to go..
Let me know if you are still getting any error.
It's a request to all my dear readers, If you found any error or my solution does not work please let me know. I will rectify those errors immediately.
Thanks once again.
Hi Harsha,
ReplyDeleteThank you for your valuable reply, I got the output but here i have a problem....In DEPT10.txt.20 or 30 only one employee details are being displayed not all the employees who are in dept 10,20 or 30 are displaying....Can i know wt error i may have done?
Thank You in Advance
According to Error: Mistake could be at Transaction Control Transformation, instead of writing NEXT_FILE=0 may be you have written as NEXT_FILE=1.
DeleteKindly verify it and let me know if its still not working. I will send .xml file for you which you can Import in your repository and analyse. Kindly drop me a mail @ hpandey.harsh@gmail.com if you are still getting error.
Thanks
Hi Harsh,
ReplyDeleteI am trying to load data via simple mapping.The source has 14 records.
SQ is nt reading any records at all bcz of which no transformation is happening and no records in target..what can be the possible reason behind this..please help.
Hi, Sumit
DeleteAre you getting error as well? Check you logs for error.
If your connection is pointing to right schema and you have table as well then it should read the data.
Second Check: Have you override your default SQL in Source Qualifier, If yes then have you put any condition as well. Copy the Query run it at database directly.. are you able to fetch the data?
Hope this two check list will be helpful. If not then could you please send me you mapping I will look into it and send you back after correction, if it is required.
Thanks.
Thanks for the suggestion Harsh.
ReplyDeleteNo i am not getting any error.
I have a query.In connection details at session level, do i need to provide User DSN values or the one i created in relational connection?
I have attached the session log and problem statement on informatica communities page.
Request you to please check:
https://community.informatica.com/message/108751#108751
Hi, Sumit
DeleteDSN connection is used to read metadata whereas Relational Connection is used to read/load actual Data. You have to use relational connection at Session level.
After seeing your log now only one possibility... Whatever relational connection you are using in that schema also source table is there but there won't be any data over there. Verify your Relational Connection and make sure those are pointing to correct schema. Second Check.. Try with load type NORMAL.... (Have you tried creating another mapping with same source and target and logic?) If not then give a try..
Hi Harsh
ReplyDeletehow are the files name gettins assigned to the text files , are you assigning the names to any parameter and same is passed as name in session level ?
Hi, Neer
DeleteAs it's a blog for learning with practical approach so, please always try to implement it practically. you will have minimum doubt. (SORRY FOR HARD WORDS IF ANY)
Now Answer for you question... I am not passing Target file name through parameter. Just read STEP 1 and STEP 2 and implement it.... you will have idea how we are passing Target File name.
Feel free to mail me if you stuck in implementation.
Thanks
i am using the same code and a java transformation to generate the lines without any space between the records. workflow monitor shows source 20 target 20 rejected 0. but when i open the out file it has only 4 records. there is a expression between tc and target and session log shows 20 records in that expression . still only 4 records inserted.
ReplyDeleteYour error point is ""there is a expression between tc and target"""
DeleteThere should not be any transformation between TARGET and TC.
Hi Harsha,
ReplyDeleteCan u please send the .xml file for these scinaro at b.radharapu@gmail.com.
thanks in advance
Our Informatica Trainers are working professionals with minimum 10+ Years of Expertise in Informatica Domain and provide training with real-time projects.
ReplyDeleteFor More Info: Informatica Training in Gurgaon