• Home
  • Blog
  • Talend
  • Returning Codes and Passing Parameters to a Child Job - TALEND

Returning Codes and Passing Parameters to a Child Job - TALEND

Returning a value from a child Job to the Parent Job

You may need to return a value or rows from a child Job to the parent Job for certain use. Let us see the best practice of how to pass a value with a tBufferOutput component from a child Job to the parent Job. 

If you would like to Enrich your career with a Talend certified professional, then visit Mindmajix - A Global online training platform: “Talend Certification Course”. This course will help you to achieve excellence in this domain.

Procedure

Here, you will create two Jobs: a parent Job and a child Job. The child Job will read data from a text file, populate the total number of rows and pass the rows to the parent Job. 

The input file, named in.txt, is as follows:

id;name
1;Shong
2;Elise
3;Sabrina

Create demo Jobs

  • Create a Job and name it childJob. It should look as in the following screenshot.

Create demo

  • To create the first subjob, add a tFileInputDelimited in the design workspace, to read data from a text file and a tLogRow to print it in the console.
  • To create the second subjob, add a tFixedFlowInput in the design workspace, to populate the total number of rows read by the tFileInputDelimited and buffer it with a tBufferOutput.
  • Configure the tFileInputDelimited as in the following screenshot.
  • Configure the tFixedFlowInput as in the following screenshot.
  • Configure the tBufferOutput schema as follows.
  • Create another Job named parentJob. The Job should look as in the following screenshot.

MindMajix Youtube Channel

This parentJob is created to call the childJob Job with a tRunJob component, get the value buffered by tBufferOutput in the child Job and pass it to a tJavaRow.

  • Configure the tJavaRow as follows.
  • Type in the following code in the Code box:
System.out.println("The total number of rows is:"+input_row.nb_line);

Checkout Talend Tutorial

Execute the Jobs

Execute the parentJob .The results is printed in the console:

Starting job parentJob at 14:37 16/06/2013.
 
[statistics] connecting to socket on port 3801
[statistics] connected
1|Shong
2|Elise
3|Sabrina
The total number of rows is:3
[statistics] disconnected
Job parentJob ended at 14:37 16/06/2013. [exit code=0]

Frequently Asked TALEND Interview Questions & Answers

Returning codes from a child job without tDie

In this recipe, we will see how RETURN CODES can be set in a child job and used in a parent, without having to kill the child process.

Getting ready

Open the job jo_cook_ch11_0060_childReturnCodesNoDie. This job is the end state of the previous recipe.

How to do it…

The first thing we need to do is add the return code value to a buffer for the parent job to pick up.

Buffering the return code

  • Open task_1 and replace the tDie component with a tFixedFlowInput component.
  • Add an Integer column to the tFixedFlowInput component called returnCode
  • Set the value to 4.
  • Add a tBufferOutput component and add a flow from the tFixedFlowInput component to it.

Capturing and storing the return code in the parent

  • Return to the parent job.
  • Add a tJavaRow component to the job.
  • Create a flow from the tRunJob component for task 1 to the tJavaRow
  • Open the tRunJob component, and click on Copy Child JobSchema, as shown in the next screenshot:
  • Open the tJavaRow component, and insert the following code:
globalMap.put("returnCode", input_row.returnCode);
  • Change the tJava component and the two If links to use returnCode instead of
tRunJob_1_CHILD_RETURN_CODE.
  • Run the job.

How it works…

The tBufferOut component is used to transmit data from a child job to a parent, and we can easily access the schema of the child job (as set in the tBufferOut component) using the Copy Child Job Schema option in the tRunJob component.

When the parent picks up the code, it stores it in a globalMap variable for use by the If conditions.

Passing parameters to a child job

Talend provides us a very good way of inter-component communication using parameters. We can easily pass the context parameters from one job to another. This feature is very handy as we can create all the parameters in the main job and as per requirement, pass the values of parameters to the sub jobs.

First, create a child job :

  1. Define three context variables and do not provide any default values.
  2. Drag the tJava component and print the values of the context variables.
  3. Execute the child Job. As we have not provided any values to context variables in child job, It does not display any values in the output. Now, it’s time to create the Main job and pass the values to the subjob.
  4. Create a Main job. Using tFileInputDelimited component, read the delimited Input file and Drag the child job to the Job designer.

Input File:

EMP_ID;EMP_NAME;EMP_SALARY
101;Mark THomas;20,000
102;William Crow;53,000
103;Ramanujan K.;89,000
104;Stacy Wind;24,000

     5. Open the settings of the child subjob and pass the values of the context variables defined in child job. Take the values of the fields from row2 link and pass it to context variables.

     6. Main job is complete. It’s time to execute it.

Explore TALEND Sample Resumes! Download & Edit, Get Noticed by Top Employers!Download Now!
Course Schedule
NameDates
Talend TrainingOct 12 to Oct 27View Details
Talend TrainingOct 15 to Oct 30View Details
Talend TrainingOct 19 to Nov 03View Details
Talend TrainingOct 22 to Nov 06View Details
Last updated: 03 Apr 2023
About Author

Ravindra Savaram is a Technical Lead at Mindmajix.com. His passion lies in writing articles on the most popular IT platforms including Machine learning, DevOps, Data Science, Artificial Intelligence, RPA, Deep Learning, and so on. You can stay up to date on all these technologies by following him on LinkedIn and Twitter.

read less
  1. Share: