data.join
data.join combines two tables by matching rows on key fields. It takes two Table inputs (left and right ports) and produces one Table output containing columns from both sides.
Input: Table (left port), Table (right port) Output: Table
Basic config
Section titled “Basic config”nodes: orders-with-customers: type: data.join config: join_type: left left_key: customer_id right_key: idConfig reference
Section titled “Config reference”| Field | Type | Required | Description |
|---|---|---|---|
join_type | string | no | Join type: inner, left, right, full (default: inner) |
left_key | string | yes | Column name on the left table to join on |
right_key | string | yes | Column name on the right table to join on |
right_prefix | string | no | Prefix for right-side columns to avoid name collisions |
Output schema
Section titled “Output schema”The output contains all columns from the left table plus all columns from the right table (excluding the right join key, which would duplicate the left key). When both tables share a column name, use right_prefix to disambiguate.
nodes: merged: type: data.join config: join_type: inner left_key: id right_key: order_id right_prefix: "order_"With right_prefix: "order_", right-side columns status and total become order_status and order_total in the output.
Join types
Section titled “Join types”Inner join
Section titled “Inner join”Returns only rows with matching keys on both sides.
nodes: matched-orders: type: data.join config: join_type: inner left_key: id right_key: customer_id
edges: - customers.output -> matched-orders.left - orders.output -> matched-orders.rightLeft join
Section titled “Left join”Returns all rows from the left table. Right-side columns are null when no match exists.
nodes: all-customers: type: data.join config: join_type: left left_key: id right_key: customer_idRight join
Section titled “Right join”Returns all rows from the right table. Left-side columns are null when no match exists.
nodes: all-orders: type: data.join config: join_type: right left_key: id right_key: customer_idFull join
Section titled “Full join”Returns all rows from both tables. Columns are null on the side where no match exists.
nodes: full-merge: type: data.join config: join_type: full left_key: email right_key: emailPipeline example
Section titled “Pipeline example”nodes: load-orders: type: file.csv config: path: orders.csv
load-products: type: file.csv config: path: products.csv
orders-enriched: type: data.join config: join_type: left left_key: product_id right_key: id right_prefix: "product_"
summary: type: data.map config: include_original: true fields: line_total: "{{ quantity * product_price }}"
edges: - load-orders.output -> orders-enriched.left - load-products.output -> orders-enriched.right - orders-enriched.output -> summary.inputThis pipeline joins orders with product data, then computes a line total using the product price from the right table.