--- title: "Merge Operator" slug: "merge-operator" updated: 2025-09-26T06:11:30Z published: 2025-09-26T06:11:30Z canonical: "docs.unqork.io/merge-operator" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.unqork.io/llms.txt > Use this file to discover all available pages before exploring further. # Merge Operator UDesignerClassic Designer ## Overview The Data Workflow **Merge operator** lets you combine or separate data from two data tables using key/value pairs. Controlling how data merges depends on the chosen feature and how you use the operator's two input ports. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/mergeOperator_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) The Merger operator supports the following features: - **Intersection**: Combines all table values that share the same key. - **Inner**: Combines all table values that share the same key, adding one table's values to the other table. - **Outer**: Separates out values from one table that do not share the same key as the other table. You'll find the Merge operator under the [Table](/v1/docs/tableoperators) group to the left of the [Data Workflow](/v1/docs/data-workflow-component) canvas. ## About the Info Window Learn more about each setting in the Merge operator's Info window: | Info | | --- | | **Category** | Grayed-out and non-adjustable setting indicating the operation type. | | **Label** | Sets the label for your operator, displaying below the operator on your Data Workflow canvas. This field is optional, but set a label if you use more than one of the same operator type. A label helps you identify your operators without opening any Info windows. | | **Keep Flag** | This indicator displays in the DevTools Console for each row merged. Selecting True creates a flag that describes how you chose to merge the information. If True, a _merge_flag displays in the merged row. > [!TIP] > Left refers to the data table connected to the upper input port. Right refers to the data table connected to the lower input port. | | **Merge Type** | This drop-down lets you select how you want your data sets to merge. - **Inner**: Merges rows from the lower input table into the upper input table. The values merged must share the same key. - **Outer**: Separates all values from the upper input table whose key does not match the lower input table. - **Intersection**: Combines all values whose keys match. > [!TIP] > You can use the Intersection option like a filter. You can filter a key to help you find matching values from both tables. | | **Merge Key** | The reference key of the data you want to merge. This key can be the heading of a column in your data tables. | | **Renaming** | This drop-down lets you rename, replace, or combine merged data. - **Rename**: Adds a suffix of _r to the merged data. If you perform an Inner merge, the upper input's values remain the same, but the lower input's values get the _r suffix. - **Replace**: Overwrites one of the table’s values with the other table's values. If you perform an Inner merge, the lower input's values replace the upper input's values. - **Push**: Combines values of both tables into an array. If you perform an Inner merge, the lower input's values combine with the upper input's values in an array. The resulting push is nameUpperValue,nameLowerValue. | | **Rows to Keep** | This drop-down lets you pick which values you want to keep from your data tables. This setting is important when the values you want have more than one match. - **First**: Keeps the first row that matches in both tables. - **Last**: Keeps the last row that matches in both tables. - **All**: Keeps every row of both tables and combines them into a single array. | | **Merge Key** | This is the reference key of the data you want to merge. This key can be the heading of a column in your data tables. | ## Adding a Merge Operator For this example, create two [Data Table](/v1/docs/data-table-component) components that store a list of annuitants and date of births in first table, and list of annuitants and their premiums in the second table. Then, set up a [Data Workflow](/v1/docs/data-workflow-component) component to perform an intersection on the two data tables. ### Configure the First Data Table Component First, set up a [Data Table](/v1/docs/data-table-component) component with a list of annuitants and their dates of birth. 1. In the Module Builder, drag and drop a **D****ata Table** component onto your canvas. 2. In the Property ID field, enter **dtAnnuitant**. 3. In the data table, enter the following: | | A | B | | --- | --- | --- | | 1 | annuitant | dob | | 2 | Kris Marrier | 01/01/1990 | | 3 | Mattie Poquette | 12/12/1989 | | 4 | Ezekiel Chui | 04/05/1980 | 4. Click **Save Component**. ### Configure the Second Data Table Component Next, set up a [Data Table](/v1/docs/data-table-component) component with another list of annuitants and their insurance policy premiums. 1. Drag and drop a **D****ata Table** component onto your canvas, placing it below the **dtAnnuitant** **D****ata Table**component. 2. In the Property ID field, enter **dtPremiums**. 3. In the data table, enter the following: | | A | B | | --- | --- | --- | | 1 | annuitant | premium | | 2 | Kris Marrier | 50000 | | 3 | Mattie Poquette | 25000 | | 4 | Willow Kusko | 20000 | ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_05_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) 4. Click **Save Component**. ### Configure the Data Workflow Component Next, configure a [Data Workflow](/v1/docs/data-workflow-component) component to merge the data table values based on a key. Then, add a Console operator to view the merged data in the DevTools Console. 1. Drag and drop a **D****ata Workflow** component onto your canvas, placing it below your your **dtPremium** **D****ata Table** component. 2. In the Property ID and Canvas Label Text fields, enter **dwfMergeIntersection**. #### Configure the First Input Operator 1. Drag and drop an **I****nput** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Info | | --- | | Category | Input | | Component | dtAnnuitant | | Required | Yes | | Source | Default | #### Configure the Second Input Operator 1. Drag and drop another **I****nput** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Info | | --- | | Category | Input | | Component | dtPremiums | | Required | Yes | | Source | Default | #### Configure the Merge Operator 1. Drag and drop a **M****erge** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Info | | --- | | Category | Merge | | label | Merge Intersection | | Merge Type | Intersection | | Keep Flag | False | | Renaming | Replace | | Rows to Keep | First | | Merge Key | Annuitant | 3. Connect the output port (right) of the **dtAnnuitant** **I****nput** operator to the upper input port (left) of the **M****erge** operator. 4. Connect the output port (right) of the **dtPremiums** **I****nput** operator to the lower input port (left) of the **M****erge** operator. #### Configure the Console Operator Add a [Console](/v1/docs/console-operator) operator as an output to the Merge operator so you can review the results in the DevTools Console. 1. Drag and drop a **C****onsole** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Info | | --- | | Category | Console | | Label | Intersection Result | 3. Connect the output port (right) of the **M****erge** operator to the input port (left) of the **C****onsole** operator. 4. Click **Save Component**. Here's how the completed Data Workflow looks: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_06_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) ### Configure the Button Component Lastly, configure a [Button](/v1/docs/button-component) component to trigger the Data Workflow. 1. Drag and drop a **Button** component onto your canvas, placing it below the **D****ata Workflow** component. 2. In the Property ID, enter **btnMergeIntersection**. 3. In the Label Text, enter `Intersection Merge`. 4. From the **Action Type** drop-down, select **Event**. 5. From the **On Click** drop-down, select **dwfMergeIntersection**. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_07_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) 6. Click **Save Component**. 7. Save your module. Here's how the completed use case looks in the Module Builder: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_02_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) Now you can test out your Data Workflow. **Preview** your module in Express View and open the DevTools Console. Then, click the button to see the results of the intersection function. The Data Workflow combines Kris Marrier and Mattie Poquette with their birthdates and insurance premiums, as expected. Ezekiel Chui and Willow Kusko do not share information between tables, so they do not merge or display in the new table. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_38_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) ## Overview The Data Workflow **Merge operator** lets you combine or separate data from two data tables using key/value pairs. Controlling how data merges depends on the chosen feature and how you use the operator's two input ports. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/mergeOperator_thumb_0_0(1).jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) The Merger operator supports the following features: - **Intersection**: Combines all table values that share the same key. - **Inner**: Combines all table values that share the same key, adding one table's values to the other table. - **Outer**: Separates out values from one table that do not share the same key as the other table. You'll find the Merge operator under the Table group to the left of your canvas. ## About the Info Window Learn more about each setting in the Merge operator's Info window: | **Setting** | Description | | --- | --- | | **Category** | Grayed-out and non-adjustable setting indicating the operation type. | | **Label** | Sets the label for your operator, displaying below the operator on your Data Workflow canvas. This field is optional, but set a label if you use more than one of the same operator type. A label helps you identify your operators without opening any Info windows. | | **Merge Type** | This drop-down lets you select how you want your data sets to merge. - **Inner**: Merges rows from the lower input table into the upper input table. The values merged must share the same key. - **Outer**: Separates all values from the upper input table whose key does not match the lower input table. - **Intersection**: Combines all values whose keys match. > [!TIP] > You can use the Intersection option like a filter. You can filter a key to help you find matching values from both tables. | | **Keep Flag** | This indicator displays in the DevTools Console for each row merged. Selecting True creates a flag that describes how you chose to merge the information. If True, a _merge_flag displays in the merged row. > [!TIP] > Left refers to the data table connected to the upper input port. Right refers to the data table connected to the lower input port. | | **Renaming** | This drop-down lets you rename, replace, or combine merged data. - **Rename**: Adds a suffix of `_r` to the merged data. If you perform an Inner merge, the upper input's values remain the same, but the lower input's values get the _r suffix. - **Replace**: Overwrites one of the table’s values with the other table's values. If you perform an Inner merge, the lower input's values replace the upper input's values. - **Push**: Combines values of both tables into an array. If you perform an Inner merge, the lower input's values combine with the upper input's values in an array. The resulting push is `nameUpperValue,nameLowerValue`. | | **Rows to Keep** | This drop-down lets you pick which values you want to keep from your data tables. This setting is important when the values you want have more than one match. - **First**: Keeps the first row that matches in both tables. - **Last**: Keeps the last row that matches in both tables. - **All**: Keeps every row of both tables and combines them into a single array. | | **Merge Key** | This is the reference key of the data you want to merge. This key can be the heading of a column in your data tables. | ## Adding a Merge Operator For this example, create two [Data Table](/v1/docs/data-table-component) components that store a list of annuitants and date of births in first table, and list of annuitants and their premiums in the second table. Then, set up a [Data Workflow](/v1/docs/data-workflow-component) component to perform an intersection on the two data tables. ### Configure the First Data Table Component First, set up a [Data Table](/v1/docs/data-table-component) component with a list of annuitants and their dates of birth. 1. In the Module Builder, drag and drop a **D****ata Table** component onto your canvas. 2. In the Label Text and Property ID, enter **dtAnnuitant**. 3. In the data table, enter the following: | annuitant | dob | | --- | --- | | Kris Marrier | 01/01/1990 | | Mattie Poquette | 12/12/1989 | | Ezekiel Chui | 04/05/1980 | ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_classic_01_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) 4. Click **Save**. ### Configure the Second Data Table Component Next, set up a [Data Table](/v1/docs/data-table-component) component with another list of annuitants and their insurance policy premiums. 1. Drag and drop another **D****ata Table** component onto your canvas. 2. In the Label Text and Property ID, enter **dtPremiums**. 3. In the data table, enter the following: | annuitant | premium | | --- | --- | | Kris Marrier | 50000 | | Mattie Poquette | 25000 | | Willow Kusko | 20000 | ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_classic_02_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) 4. Click **Save**. ### Configure the Data Workflow Component Next, configure a [Data Workflow](/v1/docs/data-workflow-component) component to merge the data table values based on a key. Then, add a Console operator to view the merged data in the DevTools Console. 1. Drag and drop a **D****ata Workflow** onto your canvas, placing it below your **D****ata Table** component. 2. In the Canvas Label Text and Property ID fields, enter `dwfMergeIntersection`. #### Configure the First Input Operator 1. Drag and drop an **I****nput** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Setting | Value | | --- | --- | | Category | Input | | Component | dtAnnuitant | | Required | Yes | | Source | Default | #### Configure the Second Input Operator 1. Drag and drop another **I****nput** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Setting | Value | | --- | --- | | Category | Input | | Component | dtPremiums | | Required | Yes | | Source | Default | #### Configure the Merge Operator 1. Drag and drop a **M****erge** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Setting | Value | | --- | --- | | Category | Merge | | Label | Merge Intersection | | Merge Type | Intersection | | Keep Flag | False | | Renaming | Replace | | Rows to Keep | First | | Merge Key | annuitant | 3. Connect the output port (right) of the **dtAnnuitant** **I****nput** operator to the upper input port (left) of the **M****erge** operator. 4. Connect the output port (right) of the **dtPremiums** **I****nput**operator to the lower input port (left) of the **M****erge** operator. #### Configure the Console Operator Add a Console operator as an output to the Merge operator. This lets you see the result of the merge. 1. Drag and drop a **C****onsole** operator onto your **D****ata Workflow** canvas. 2. Configure the operator's **Info** window as follows: | Setting | Value | | --- | --- | | Category | Console | | Label | Intersection Result | 3. Connect the output port (right) of the **M****erge** operator to the input port (left) of the **C****onsole** operator. 4. Click **Save**. Here's how the completed Data Workflow looks: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_classic_03_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) ### Configure the Button Component Lastly, configure a [Button](/v1/docs/button-component) component to trigger the Data Workflow. 1. Drag and drop a **Button** component onto your canvas, placing it below the **D****ata Workflow** component. 2. In the Property ID, enter **btnMergeIntersection**. 3. In the Label Text, enter `Intersection Merge`. 4. From the **Action Type** drop-down, select **Event**. 5. From the **On Click** drop-down, select **dwfMergeIntersection**. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_classic_04_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) 6. Click **Save**. 7. Save your module. Here's how the completed use case looks in the Module Builder: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_classic_05_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) Now you can test out your Data Workflow. **Preview** your module in Express View and open the DevTools Console. Then, click the button to see the results of the intersection function. The Data Workflow combines Kris Marrier and Mattie Poquette with their birthdates and insurance premiums, as expected. Ezekiel Chui and Willow Kusko do not share information between tables, so they do not merge or display in the new table. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DWF_Merge_38_thumb_0_0(1).jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A45Z&se=2026-11-07T18%3A57%3A45Z&sr=c&sp=r&sig=kOjymUBOFAt%2FujjbrqDV28Pm6f3feJOVmWIsT7Q7R10%3D) ## Resources - [Table Operators](/v1/docs/introduction-to-data-workflow-table-operators) - [Modify the Merge operator](/v1/docs/modifying-data-workflow-operators). - [Introduction to Data Workflow](/v1/docs/introduction-to-data-workflow) - [Introduction to Data Workflow Operators](/v1/docs/data-workflow-operators) - [Input Output Operators](/v1/docs/introduction-to-data-workflow-io-operators) - [Gateway Operators](/v1/docs/introduction-to-data-workflow-gateways-operators) --- The DevTools Console helps you securely store, build, test, and deploy your software. An array is a type of object that stores one or more data types. Data types supported in arrays include numbers, strings, and objects. A Property ID is the unique field ID used by Unqork to track and link components in your module. Canvas Label Text indicates the purpose of the corresponding field or component. For non-input components, the Canvas Label Text isn't end-user facing, and only appears in the . Label Text conveys what the input component is and what information it displays. Enter the purpose of the corresponding component or field. Express View is how your end-user views your application. Express View also lets you preview your applications to test your configuration and view the styling. This is also the view your end-users will see when interacting with your application. After configuring a module, click Preview in the Module Builder to interact with the module in Express View.