Joiner Transformation in Informatica with EXAMPLE

⚡ Smart Summary

Joiner transformation in Informatica is the active, connected object that joins two heterogeneous sources on a matching condition, caching the master pipeline in memory while the detail pipeline streams through it.

  • 🧩 Master and detail: Two input pipelines feed the transformation, and the Ports tab decides which one acts as master.
  • 💾 Master is cached: The master pipeline is always built into an index and data cache, so the smaller source belongs there.
  • 🔗 Four join types: Normal, Master Outer, Detail Outer and Full Outer decide which unmatched rows survive the join.
  • 🧪 Worked example: EMP and DEPT are joined on deptno with a normal join and loaded into EMP_DEPTNAME.
  • ⚖️ Equality only: A join condition compares ports with the equals operator, and both ports must share one datatype.
  • Sorted input: Presorting both pipelines on the condition ports cuts disk input and output during the session.

Joiner Transformation in Informatica

What is Joiner Transformation?

Joiner transformation is an active and connected transformation that provides you the option to create joins in Informatica. The joins created using Joiner transformation are similar to the joins in databases. The advantage of Joiner transformation is that joins can be created for heterogeneous systems (different databases).

In Joiner transformation, there are two sources which we are going to use for joins. These two sources are called

  • Master Source
  • Detail Source

In the properties of Joiner transformation, you can select which data source can be master and which source can be the detail source.

During execution, the master source is cached into the memory for joining purpose. So it is recommended to select the source with fewer records as the master source. The master pipeline is held in two caches: an index cache for the values used in the join condition and a data cache for the rest of the row data.

Types of Joins in Joiner Transformation

The Join Type property on the Properties tab decides what happens to rows that find no match. The following joins can be created using Joiner transformation.

  1. Master outer join – In a master outer join, all records from the detail source are returned by the join and only matching rows from the master source are returned.
  2. Detail outer join – In a detail outer join, only matching rows are returned from the detail source, and all rows from the master source are returned.
  3. Full outer join – In a full outer join, all records from both the sources are returned.
  4. Normal join – In a normal join, only matching rows are returned from both the sources.

Master outer and detail outer joins are equivalent to left outer joins in SQL: each one keeps every row of one source and only the matches from the other. The table below lines the four types up against their SQL equivalents.

Join type Rows kept from master Rows kept from detail SQL equivalent
Normal join Matching only Matching only Inner join
Master outer join Matching only All rows Left outer join on the detail source
Detail outer join All rows Matching only Left outer join on the master source
Full outer join All rows All rows Full outer join

The join type is a property, not a structural choice, so it can be changed later without rebuilding the mapping or relinking any ports.

How to Use Joiner Transformation in Informatica

In this example, we will join the emp and dept tables using Joiner transformation. Work through the eight steps below in the Mapping Designer.

Step 1) Create a new target table EMP_DEPTNAME in the database using the script below and import the table in Informatica targets.

Download the above emp_deptname.sql File

Step 2) Create a new mapping and import source tables “EMP” and “DEPT” and the target table which we created in the previous step. All three definitions now sit on the canvas, as shown below.

Mapping Designer canvas with the EMP and DEPT sources and the EMP_DEPTNAME target definition

Step 3) From the Transformation menu, select the Create option. Then in the Create Transformation window shown below,

  1. Select joiner transformation
  2. Enter transformation name “jnr_emp_dept”
  3. Select create option

Create Transformation window with Joiner selected and the name jnr_emp_dept entered

Step 4) Drag and drop all the columns from both the Source Qualifiers to the Joiner transformation. Both pipelines are now linked into jnr_emp_dept, as the screenshot shows.

Columns from both Source Qualifiers dragged into the jnr_emp_dept Joiner transformation

Step 5) Double click on the Joiner transformation, then in the Edit Transformations window

  1. Select condition tab
  2. Click on add new condition icon
  3. Select deptno in master and detail columns list

The Condition tab now holds the single join condition on deptno.

Condition tab of the Joiner transformation with deptno chosen in the master and detail columns

Step 6) Then in the same window

  1. Select properties tab
  2. Select Normal Join as join type
  3. Select the OK button

The Properties tab with the join type set is shown next.

Properties tab of the Joiner transformation with the join type set to Normal Join

For performance optimization, we assign the master source to the source table pipeline which is having fewer records. To perform this task:

Step 7) Double click on the Joiner transformation to open the Edit Transformations window, and then

  1. Select ports tab
  2. Select any column of a particular source which you want to make a master
  3. Select OK

The Ports tab marks the chosen pipeline as the master, as shown below.

Ports tab of the Joiner transformation with the master flag set against one source pipeline

Step 8) Link the relevant columns from Joiner transformation to the target table. The mapping now runs from both sources through the join into EMP_DEPTNAME.

Joined columns linked from jnr_emp_dept to the EMP_DEPTNAME target table

Now save the mapping and execute it after creating a session and workflow for it. The join will be created using the Informatica Joiner, and relevant details will be fetched from both the tables.

Joiner Transformation Properties

The Properties tab carries more than the join type. The settings below control how much memory the join uses and where the cache files are written.

Setting What it controls
Join Type Normal, Master Outer, Detail Outer or Full Outer. Decides which unmatched rows are kept.
Join Condition The list of master-to-detail port pairs compared with the equals operator. Several conditions are combined with AND.
Sorted Input Declares that both pipelines already arrive sorted by the condition ports, which lets the Integration Service minimise disk input and output.
Master Sort Order The sort order of the master source data, used together with sorted input.
Cache Directory Directory in which the index and data cache files are created. The default is the $PMCacheDir process variable.
Joiner Data Cache Size Size of the data cache holding the master row data. The default is Auto, which lets the Integration Service size it.
Joiner Index Cache Size Size of the index cache holding the master condition values. The default is Auto.
Transformation Scope Applies the join to each transaction, to all incoming data, or to a row-level scope.

Sorted input is the setting worth reaching for first. When both pipelines arrive ordered by the condition ports, the Integration Service does not have to hold the whole master source before matching begins, which is the same principle applied during performance tuning of other cached transformations.

Joiner Transformation Rules and Limitations

Some restrictions only surface when the mapping is validated, so it is cheaper to know them before the ports are linked.

  • Equality only. A join condition compares ports with the equals operator. Comparison operators such as greater than, less than or not equal to are not accepted in the condition.
  • Matching datatypes. Both ports in a condition must have the same datatype. The Designer validates this, so mismatched columns have to be converted first, usually in an Expression transformation.
  • No Update Strategy upstream. A Joiner transformation cannot be used when either input pipeline contains an Update Strategy transformation.
  • No Sequence Generator directly before it. Connecting a Sequence Generator transformation immediately upstream of the Joiner is not supported.
  • Caching cannot be switched off. The master pipeline is always cached, which is why the smaller source belongs on the master side and why cache sizing matters on large joins.

Joining three sources needs two Joiner transformations chained together, because each one accepts exactly one master and one detail pipeline. Where the second source is a small reference table read row by row instead, a Lookup transformation is often the simpler design.

FAQs

Two. Each Joiner accepts one master and one detail pipeline, so joining three sources means chaining two of them: the output of the first becomes an input pipeline of the second. In general, n sources need n minus one.

When both tables live in the same relational database. The Source Qualifier pushes that join down to the database, which avoids caching entirely. Reach for the Joiner only when the two sources are heterogeneous or already in separate pipelines.

The index cache stores the master port values named in the join condition, and the data cache stores the remaining master row data returned by the join. Both are built from the master pipeline only, never from the detail pipeline.

No. A null in either port makes the condition fail, exactly as it does in SQL, so those rows are treated as unmatched. Replace nulls with a default value upstream when they are supposed to join.

Yes. Add the source definition to the mapping twice so that two separate pipelines exist, then feed one into the master side and one into the detail side. This is the usual way to resolve a manager column back to an employee name.

Yes, and that heterogeneous case is the main reason the transformation exists. A flat file pipeline and a relational pipeline join on matching ports just as two database tables would, because the join happens inside the Integration Service.

AI assistants profile both sources to suggest candidate join keys, estimate row counts so the smaller side is chosen as master, and flag skewed or high-null columns that would explode the result set. Machine learning based advisors also rank cache sizing options.

Copilot drafts the equivalent SQL and the datatype conversions quickly, which shortens the work of preparing ports. It cannot see your cache sizes or row counts, so verify every suggestion against the mapping before saving it.

Summarize this post with: