--- title: "Data Workflow Operators" slug: "data-workflow-operators" updated: 2025-09-26T00:51:00Z published: 2025-09-26T00:51:00Z canonical: "docs.unqork.io/data-workflow-operators" --- > ## 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. # Data Workflow Operators **DWF (Data Workflow) Operators** manipulate data inside the [Data Workflow component](/v1/docs/data-workflow-component). After placing a Data Workflow component on the [Module Builder canvas](/v1/docs/introduction-to-the-module-builder), Creators can add DWF operators to retrieve, map, and manipulate data before sending it to another component. Much like components in a module, DWF operators connect together to perform complex operations. Here are some common use cases for using the Data Workflow component and its operators: - Unwinding complex data structures. - Filtering data to obtain specific items. - Viewing data at different points in the Data Workflow. - Appending data to create new structures. - Applying [formulas](/v1/docs/supported-formulas) to data. The example below displays the [Address Parsing snippet's](/v1/docs/address-parsing-snippet) Data Workflow canvas showing an orchestration of operators. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/dwfPopulateAddress_thumb_0_0(1).jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) The Input operator brings in the data from an [Address Search component](/v1/docs/address-search-component). The [Unwind operator](/v1/docs/unwind-operator) separates the individual data points, and the remaining operators take each data point and output it to different fields. ## Understanding What Operator Ports Do DWF Operators have one or more ports that either receive, modify, or output data to and from the operator. In some cases, an operator can also have more than one input or output port. Below are the ports you'll see associated with a Filter operator: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/AppBuild_Data_Workflow_02_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) Click on the tabs below to learn more about what each operator port does: Input PortArgument PortOutput Port ## Input Port (Left) The **input** port is the entry point into your operator. The previous operator in the Data Workflow connects to the next operator's input port. Some data operations have two inputs. For example, the [Merge operator](/v1/docs/merge-operator) combines two input data sets. In this case, a data set enters Input 1, and another data set enters Input 2. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/inputPort_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) ## Argument Port (Top) **Arguments** add a dynamic aspect to data processing. They can create conditions, rules, and more functionality for an operator. When you bring an input into an operator's top port, you're bringing the input in as an argument. It's important to make a distinction between an argument and an expression. Most operators have an **Expression** or **Key** field that controls what the operator does. For example, say you have a data set of savings accounts and checking accounts. You want to filter the two account types into separate outputs using a Filter operator. Without an argument, your expression might be `account="savings"`. From there, the savings accounts filter output to another operator. Anything that isn't a savings account filters out from the rest. The operator performs a single operation. If you want an operator to always have the same function, there's no need for an argument. Where an argument comes into play is when you want different functions based on dynamic data. Let's use the example of a data set of savings and checking accounts. With an argument, you can make the filter more complex. You could add more filtering operations, like sorting accounts by their size. You could also add logic to your filter, calculating multiple account sizes. Or, you could set up decision based on the accounts your end-user selects. > [!WARNING] > Unqork references an argument as `_arg `in an expression. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/argumentPort_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) ## Output Port (Right) **Outputs** are where you send the final result of the operation. You'll connect one output to the next using the right port. Some data operations have two outputs. For example, the [Filter operator](/v1/docs/filter-operator), which separates data and outputs into multiple locations. Output 1 would be all the expression results that are true, or what you filtered for. Output 2 would be the expression results that are false, or what you do not what to filter for. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/outputPort_thumb_0_0(1).jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) ### Connecting Operators Connect operators to send logic and data between them. Creators connect operators by clicking and holding their mouse on an output port and dragging it to an input or argument port. In the following image, the output port (right) of the **Input** operator connects to the input port (left) of the **Col2Array** operator. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/DW_Col2Array04a_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) ## Grouping Operators Grouping operators can help organize a Data Workflow's canvas. Doing so creates a clear process flow and helps you track your operators' functions. Let's look at the [Address Parsing snippet](/v1/docs/address-parsing-snippet) before grouping, and after grouping the operators: By default, the Address Parsing snippet's Data Workflow canvas looks like the following: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/dwfAddressSnippet2_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) Applying groups to the Address Parsing snippet's Data Workflow canvas looks like the following: ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/dwfAddressSnippetGrouped_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) To group Data Workflow operators: 1. Press and hold the **Shift** key while clicking on the Data Workflow operators you want to group. 2. Press the **Ctrl** + **G** keys (PC) or **Cmd** + **G** keys (Mac). The selected operators group together, then collapse into an expandable frame. > [!TIP] > You can expand or collapse the frame by clicking the **plus** (+) or **minus** (-) sign in the frame's top bar. 3. In the Info window that displays, enter a **Label** for your group of operations. 4. Click **Save Component**. ## Data Workflow Operators The Data Workflow component's operators are organized into six categories, based on the actions they perform. Click the following links to learn more about the various Data Workflow categories: ### [I/O Operators](/v1/docs/iooperators) I/O operators let you input data, create tables and values, and output data to components. They include the Input, Create Table, Output, and Console operators. ### [Gateways Operators](/v1/docs/gateways-operators) [](/v1/docs/gateways-operators)These operators let you introduce decision logic, control Data Workflow pathways, and merge and split branches. They include the Branch Split and Branch Merge, Decision, and Input Switch operators. ### [Table Operators](/v1/docs/table-operators) Table operators let you append and merge tables, create a nested table, and output data as a string or an object. They include the Append, Create Field, Merge, Nest By, and Table2Object operators. ### [Array Operators](/v1/docs/array-operators) These operators let you retrieve data from a data set, add values to a data structure, and join an array of values. They include the Array2Col, Get, Join, and Set operators. ### [Object Operators](/v1/docs/object-operators) These operators let you remove null values, create a table into an object, and merge two objects into one. They include the Clean Object, Diff, Extend, and Has operators. ### [Value/String Operators](/v1/docs/valuestring-operators) These operators let you convert Excel files into JSON, convert a JSON string to a JSON object, and find matching values in a table. They include the Convert Value, Formula, NLP, and Split String operators. ### Frequently Used There is also a frequently-used Data Workflow operator category. Below is a list of these Data Workflow operators with a description of how they work. ![](https://cdn.us.document360.io/15548f06-2fba-434c-b0c1-5df88317dbd7/Images/Documentation/frequentlyUsed_thumb_0_0.jpg?sv=2026-02-06&spr=https&st=2026-11-07T17%3A57%3A39Z&se=2026-11-07T18%3A57%3A39Z&sr=c&sp=r&sig=amWTUaF9oT5Kff9g2hHsHOHIUoic0rkuc9J23aj4BIk%3D) | Operator | Description | | --- | --- | | [Input](/v1/docs/input-operator) | Lets you retrieve data from another component and bring it into your Data Workflow. Use the **Component** drop-down to select an existing component in your module. Set **Required** to `Yes` if a value must exist in the component for the Data Workflow to run. To set up a **Binded Table**, connect a [Data Table](/v1/docs/data-table-component) component to the Input operator and select `Binded Table` from the **Source** setting. | | [Output](/v1/docs/output-operator) | An Output operator marks the end of a Data Workflow path. Use the **Component** setting to select a component in your module to output the data. The **Action** setting applies to the component selected in the **Component** field. This operator is commonly used for outputting data by setting the **Action** field to `Value` or triggering events. > [!TIP] > Some actions require creating a value to trigger the event. For example, a **Value** of `Yes` for an **Action** of `Reset`. You can use a [Create Value](/v1/docs/create-valueoperator) operator and connect it as an input. Or, use a [Set Outputs](/v1/docs/set-outputs-operator) operator instead of an Output operator. The Set Outputs operator lets you create the trigger value using the **setValue** setting. | | [Console](/v1/docs/console-operator) | Watches the progress of data passing through your Data Workflow operators. This operator is useful for monitoring and troubleshooting individual steps in the DevTools Console. > [!NOTE] > It's a best practice to remove Console operators when you finish configuration and testing. | | [Create Field](/v1/docs/create-field-operator) | Creates or updates key/value pairs (fields) in a table. Use the structure key=value or key="value" for strings. The operator also supports conditional expressions and referencing other values. Use the structure `key=IF(condition,valueIfTrue,valueIfFalse)` to create conditional expressions. > [!TIP] > The Create Field operations occur in order, from Field 1 to Field 5. You can reference values created in previous fields. | | [Create Value](/v1/docs/create-valueoperator) | Lets you create a value and pass it into the Data Workflow. This operator can create a number, string, or Boolean value. You can either set the value directly in the **Value/Expression** field or use `_arg` to reference the input connected to the top argument port. This operator is commonly used with an [Output](/v1/docs/output-operator) operator to set values for Post Triggers. | | [Filter](/v1/docs/filter-operator) | Filters table-based data using the criteria specified in the **Expression** field. The operator separates rows that meet the criteria from rows that do not. Matching rows pass through the upper output port while non-matching rows pass through the lower output port. For example, to filter for rows containing the key/value pair "member":"yes", use the **Expression** member="yes". > [!TIP] > The **Expression** field also supports `AND` and `OR` statements and `_arg.` Using `_arg` references data coming into the top argument port. | | [Formula](/v1/docs/formula-operator) | Performs calculations on your data based on the formula defined in the **Formula/Expression** field. You can use an alias of `A` to represent the data coming into the input port. You can also use `_arg` to reference values coming into the top argument port. For example, the expression `=A*12` multiplies your input by 12. The expression `=A*_arg` multiplies your input by the value entered in the argument port. | | [Get](/v1/docs/get-operator) | Retrieves data from your data set based on the value entered in the **Path** field. You can use the operator to retrieve individual values or entire rows of an array. For example, a **Path** of `[0]` retrieves the first row of your data set. A **Path** of `[0].keyName` retrieves the specified key/value pair from the first row of your data set. It's also useful for referencing [Global Variables](/v1/docs/global-variables-administration). > [!TIP] > You can use `_arg` in the **Path** field to reference the input coming into the top argument port. | ## Best Practices - For operators that require fields, like the [Formula](/v1/docs/formula-operator) operator, it is best practice to avoid using symbols and numerical values in the fields. For example, instead of using `Test1Key="value",` use `TestOneKey="value"`. - Data Workflows timeout after five minutes in all environments. Build Data Workflows to complete operations in five minutes to prevent timeouts. - If you don't plan to use disabled components in your application, remove them to ensure optimal performance. Remember to check all active components that connect to disabled components. Ensure active components still function properly after you remove the disabled ones. - Add labels to all Data Workflow operators to describe their function. These labels make it easier to know the purpose of an operator without having to open the Info window. - Select the **Do Not Sanitize** setting in all your operators to improve application performance. - Organize Data Workflow components based on their function in your application. - Use the component's Notes tab to comment on complex data processes. Add notes to explain what components are being triggered, trigger types, and the importance of each component. ## Resources - [An Introduction to Data Workflow](/v1/docs/introduction-to-data-workflow) - [Data Workflow Component](/v1/docs/data-workflow-component) - [Troubleshooting: Simple Data Workflow Errors](/v1/docs/troubleshooting-simple-data-workflow-errors) - [Troubleshooting: Circular Reference Errors in Data Workflow](/v1/docs/troubleshooting-circular-reference-errors-in-data-workflow) A data structure is the design used for organizing, using, and storing data. End-users, also known as Express Users, are the individuals accessing an application through Express View. In most cases, end-users are the customers using the product. The DevTools Console helps you securely store, build, test, and deploy your software.