A data transformation is any operation that cleans, reshapes, combines, or calculates on raw data between extraction and use. In an ETL pipeline, this is the stage where messy source records become something a warehouse, dashboard, or downstream system can actually rely on. DataFuseAI handles this stage through 12 visual transformation nodes across four categories, no SQL required, though the logic underneath is the same logic any data engineer would recognize.

This guide walks through every one of those 12 nodes: what each one does, where it sits in a pipeline, and a worked input-to-output example for each using a single, consistent set of standard sample tables. For a primer on the wider ETL process this fits into, see our earlier piece explaining ETL in simple terms.

Key Takeaways
  1. DataFuseAI organizes transformations into four categories: Reshape (Pivot, Unpivot, Explode), Combine (Join, Union), Filter & Route (Dedupe, Filter, Split, Route), and Compute (Aggregate, Derived, Window).
  2. Filter and Join both support a Fuzzy Match mode, so records don't need identical spelling to combine or qualify, useful for reconciling data entered by hand across systems.
  3. Every node is configured through a double-click dialog on the pipeline canvas, previewed before running, and can be chained to any other node in any order.
  4. Aggregate and Window both compute across groups, but Aggregate collapses rows into summaries while Window keeps every row and adds a calculated column.
  5. Split divides a stream into exactly two branches; Route handles three or more, each with its own condition.

What Is a Data Transformation in an ETL Pipeline?

Extract, Transform, Load breaks into three stages, and transform is the middle one: data has already been pulled from a source, and it isn't in the destination yet. Whatever happens to it in between, cleaning a field, joining it to another table, rolling it up into a summary, counts as transformation.

In DataFuseAI's pipeline builder, this stage is visual rather than scripted. You drag a source node onto the canvas, drag a transformation node next to it, connect the two, and double-click the transformation to configure it. A preview pane shows the effect before you run anything for real, and the output of one transformation connects directly into the input of the next, so a pipeline is really just a chain of these nodes between a source and a sink. That chaining pattern is what section 9 of this guide walks through end to end.

Same building blocks, no code. Every transformation described below maps to an operation a data engineer would otherwise write in SQL or PySpark, DataFuseAI just replaces the script with a configuration dialog and a live preview. If you're pulling data through APIs specifically, our guide on turning API data into insights covers how these same nodes apply to that source type.

The Four Transformation Categories in DataFuseAI

Twelve nodes is a lot to hold in your head at once, so DataFuseAI groups them by what they're for rather than listing them alphabetically.

Category Purpose Nodes
Reshape Change the structure of the data without changing what it means Pivot, Unpivot, Explode
Combine Merge data from more than one source into a single output Join (incl. Fuzzy Match), Union
Filter & Route Select, clean, or direct specific data Filter (incl. Fuzzy Match), Dedupe, Split, Route
Compute Calculate new values, summaries, or rankings Aggregate, Derived, Window

The examples in every section below share one running scenario: a fictional industrial-parts distributor consolidating orders across two point-of-sale systems, a CRM, and an ERP. None of the data is real, and none of it is drawn from an actual DataFuseAI pipeline; it's a standard sample dataset built for this guide.

Reshape: Pivot, Unpivot & Explode

Reshape transformations change the layout of a table, wide to long, long to wide, or nested to flat, without changing any of the underlying values.

Reshape
Pivot

Pivot rotates unique values from one column into separate output columns, aggregating as it goes. It turns long, row-per-period data into a wide table that's easier to scan and chart.

Input — regional_revenue_long (12 rows)

Region Quarter Revenue
North Q1 48,000
North Q2 52,500
North Q3 61,000
North Q4 58,500
South Q1 39,500
South Q2 44,000
South Q3 47,500
South Q4 51,000
East Q1 33,000
East Q2 36,500
East Q3 39,000
East Q4 42,500

Configuration: Pivot Column = Quarter · Aggregation Column = Revenue · Function = sum

Output — 3 rows

Region Q1 Q2 Q3 Q4
North 48,000 52,500 61,000 58,500
South 39,500 44,000 47,500 51,000
East 33,000 36,500 39,000 42,500
Pivot transformation panel in DataFuseAI showing a pivot column, aggregation column, and function used to reshape rows into columns
The same pivot logic configured in DataFuseAI's pipeline builder

Reshape
Unpivot

Unpivot is the reverse: it rotates columns back into rows, which is usually what a BI tool wants instead of a wide, pre-pivoted table.

Input — the pivoted table above (3 rows) · Configuration: Unpivot For = Quarter, Unpivot By = Revenue, columns Q1–Q4 selected

Output — 12 rows (identical to the original long-format table)

Region Quarter Revenue
North Q1 48,000
North Q2 52,500
North Q3 61,000
North Q4 58,500
South Q1 39,500
South Q2 44,000
East Q4 42,500

(all 12 rows shown in the Pivot input table above)

Unpivot transformation panel in DataFuseAI showing wide columns being mapped into key/value output columns
The same unpivot logic configured in DataFuseAI's pipeline builder

Reshape
Explode

Explode flattens an array-type or nested field into one row per element, duplicating every other column for context. It's the node you reach for after an API returns a list inside a single field.

Input — orders_raw, items column (12 orders, array field)

Order ID Region Items (array)
O1001 North Steel Bracket, Hex Bolt Set
O1002 South Industrial Fan
O1003 East Gasket Kit, O-Ring Pack, Sealant Tube
O1004 West Cable Tray
O1005 North Hex Bolt Set
O1006 South Pallet Jack, Shrink Wrap
O1007 East Air Compressor
O1008 East Gasket Kit, Bearing Set
O1009 West Weld Rod Box
O1010 West Cable Tray
O1011 North CNC Blade Set, Coolant Drum
O1012 East Air Compressor, Filter Cartridge

Configuration: Array Column = items · New Column Name = item

Output — 19 rows (one per item, all other columns duplicated)

Order ID Region Item
O1001 North Steel Bracket
O1001 North Hex Bolt Set
O1002 South Industrial Fan
O1003 East Gasket Kit
O1003 East O-Ring Pack
O1003 East Sealant Tube
O1004 West Cable Tray
O1005 North Hex Bolt Set
O1006 South Pallet Jack
O1006 South Shrink Wrap
O1007 East Air Compressor
O1008 East Gasket Kit
O1008 East Bearing Set
O1009 West Weld Rod Box
O1010 West Cable Tray
O1011 North CNC Blade Set
O1011 North Coolant Drum
O1012 East Air Compressor
O1012 East Filter Cartridge
Explode transformation panel in DataFuseAI showing nested fields being flattened into new aliased columns
The same explode logic configured in DataFuseAI's pipeline builder

Combine: Join, Fuzzy Join & Union

Combine transformations bring together data from more than one source, either by matching keys across tables or by stacking rows with the same shape.

Combine
Join

Join merges two sources on a matching key. DataFuseAI supports the standard set of join types, and which one you pick changes exactly which rows survive.

Input A — orders (12 rows, from the Explode example above, customer_id added)

Order ID Customer ID Region Amount Status
O1001 C001 North 420.00 Shipped
O1002 C002 South 1,180.50 Shipped
O1003 C003 East 95.00 Pending
O1004 C004 West 275.00 Shipped
O1005 C001 North 60.00 Cancelled
O1006 C005 South 890.00 Shipped
O1007 C006 East 340.00 Returned
O1008 C003 East 610.00 Shipped
O1009 C007 West 150.00 Shipped
O1010 C004 West 45.00 Pending
O1011 C008 North 1,320.00 Shipped
O1012 C006 East 480.00 Shipped

Input B — customers (10 rows; C009 and C010 have no orders)

Customer ID Customer Name City Segment
C001 Meridian Traders Ltd Denver Wholesale
C002 Alderbrook Supply Co Columbus Wholesale
C003 Continental Parts Inc Pittsburgh Manufacturing
C004 Blue Ridge Hardware Asheville Retail
C005 Northstar Logistics Memphis Logistics
C006 Coastal Equipment Group Savannah Manufacturing
C007 Prairie Fabricators Omaha Manufacturing
C008 Vantage Metal Works Tulsa Manufacturing
C009 Summit Rail Supply Boise Wholesale
C010 Harbor Fastener Co Portland Retail

Output — Inner Join on Customer ID (12 rows)

Order ID Customer ID Amount Status City Segment
O1001 C001 420.00 Shipped Denver Wholesale
O1002 C002 1,180.50 Shipped Columbus Wholesale
O1003 C003 95.00 Pending Pittsburgh Manufacturing
O1004 C004 275.00 Shipped Asheville Retail
O1005 C001 60.00 Cancelled Denver Wholesale
O1006 C005 890.00 Shipped Memphis Logistics
O1007 C006 340.00 Returned Savannah Manufacturing
O1008 C003 610.00 Shipped Pittsburgh Manufacturing
O1009 C007 150.00 Shipped Omaha Manufacturing
O1010 C004 45.00 Pending Asheville Retail
O1011 C008 1,320.00 Shipped Tulsa Manufacturing
O1012 C006 480.00 Shipped Savannah Manufacturing

How row counts change by join type, on this exact dataset

Join Type Description Row Count Here
Inner Only rows with a match on both sides 12
Left Outer All orders, matched customer data where it exists 12
Right Outer All customers, matched orders where they exist, repeated per order 14
Full Outer Every order and every customer, matched where possible 14
Left Semi Order columns only, for orders with a matching customer 12
Left Anti Orders with no matching customer 0
Cross Every order paired with every customer (cartesian) 120

Right Outer lands at 14 rather than 10 because C001, C003, C004, and C006 each placed two orders, so they appear twice; C009 and C010 still appear once each with null order fields. That's the detail that trips people up when they assume "outer join" just means "add the missing rows."

Join transformation panel in DataFuseAI showing two source structures connected with a configurable join type
The same join logic configured in DataFuseAI's pipeline builder

Combine · Fuzzy Match
Fuzzy Join

Fuzzy Join is the same idea as Join, except the match key doesn't need to be identical on both sides. Instead, DataFuseAI scores how similar two text values are and accepts pairs above a threshold you set, which is what makes it possible to reconcile a CRM's freehand company names against an ERP's canonical customer list. For more on how the scoring itself works, see our dedicated guide to fuzzy matching in ETL pipelines.

Input — crm_contacts (12 rows, freehand company names)

Contact ID Organization City
CR001 Meridian Traders Ltd Denver
CR002 Meridian Trading Ltd Denver
CR003 Meridian Traders LLC Denver
CR004 Meridian Traiders Ltd Denver
CR005 Alderbrook Supply Co Columbus
CR006 Alderbrook Supplies Company Columbus
CR007 Continental Parts Incorporated Pittsburgh
CR008 Continental Part Inc Pittsburgh
CR009 Coastal Equipmnt Group Savannah
CR010 Coastal Equipment Grp Savannah
CR011 Vantage Metal Werks Tulsa
CR012 Harbor Fastener Co Portland

Configuration: Organization ≈ Customer Name · Combined Score ≥ 70%, weighted · matched against the customers table above

Output — 12 rows, every contact resolved to a canonical customer (scores illustrative)

Contact ID Organization (CRM) Matched Customer Score
CR001 Meridian Traders Ltd C001 — Meridian Traders Ltd 100%
CR002 Meridian Trading Ltd C001 — Meridian Traders Ltd 82%
CR003 Meridian Traders LLC C001 — Meridian Traders Ltd 78%
CR004 Meridian Traiders Ltd C001 — Meridian Traders Ltd 88%
CR005 Alderbrook Supply Co C002 — Alderbrook Supply Co 100%
CR006 Alderbrook Supplies Company C002 — Alderbrook Supply Co 84%
CR007 Continental Parts Incorporated C003 — Continental Parts Inc 89%
CR008 Continental Part Inc C003 — Continental Parts Inc 92%
CR009 Coastal Equipmnt Group C006 — Coastal Equipment Group 90%
CR010 Coastal Equipment Grp C006 — Coastal Equipment Group 93%
CR011 Vantage Metal Werks C008 — Vantage Metal Works 91%
CR012 Harbor Fastener Co C010 — Harbor Fastener Co 100%
Fuzzy Join scoring configuration in DataFuseAI's Join transformation, showing weighted field pairs and a combined match-score threshold
Combined-score configuration for the fuzzy join above
Fuzzy Join field-mapping view in DataFuseAI, showing two source column lists connected through fuzzy-match pairs
Field mapping between the two sources for the fuzzy join above

Combine
Union

Union stacks rows from two or more sources that share the same schema. It doesn't match on a key, it simply appends, which makes it the right tool when two systems produce the same kind of record rather than related records.

Input A — orders_store_a, legacy POS (10 rows)

Customer Name Region Amount Status
Meridian Traders Ltd North 420.00 Shipped
Continental Parts Inc East 95.00 Pending
Coastal Equipment Group East 340.00 Returned
Vantage Metal Works North 1,320.00 Shipped
Continental Parts Inc East 610.00 Shipped
Coastal Equipment Group East 480.00 Shipped
Meridian Traders Ltd North 60.00 Cancelled
Summit Rail Supply North 220.00 Shipped
Continental Parts Inc East 75.00 Pending
Vantage Metal Works North 990.00 Shipped

Input B — orders_store_b, cloud POS (10 rows; rows 7 & 8 duplicate Input A)

Customer Name Region Amount Status
Alderbrook Supply Co South 1,180.50 Shipped
Northstar Logistics South 890.00 Shipped
Blue Ridge Hardware West 275.00 Shipped
Prairie Fabricators West 150.00 Shipped
Blue Ridge Hardware West 45.00 Pending
Harbor Fastener Co West 310.00 Shipped
Vantage Metal Works North 1,320.00 Shipped
Meridian Traders Ltd North 420.00 Shipped
Northstar Logistics South 500.00 Pending
Alderbrook Supply Co South 90.00 Cancelled

Highlighted rows are exact duplicates of two rows in Input A

Union All (duplicates retained): 20 rows. Union Distinct (Remove Duplicates checked): 18 rows, the two highlighted duplicate rows collapse into one each. This is also where multi-source data conflicts tend to surface, since union only catches duplicates that are byte-for-byte identical; near-duplicates need Dedupe or Fuzzy Match instead.

Union transformation panel in DataFuseAI showing two source column structures mapped to a single output, with union-by-name and duplicate-removal options
The same union logic configured in DataFuseAI's pipeline builder

Filtering & Deduplication: Filter, Fuzzy Filter & Dedupe

These three nodes are about what stays in the dataset: rows that meet a condition, rows that approximately match a value, and rows that aren't repeats of something already there.

Filter & Route
Filter

Filter keeps only the rows that satisfy an expression, built from available fields, comparison operators, and logical operators, similar to a SQL WHERE clause.

Input — clean_orders (12 rows, the deduped set from below)

Order ID Region Status Amount
O1001 North Shipped 420.00
O1002 South Shipped 1,180.50
O1003 East Pending 95.00
O1004 West Shipped 275.00
O1005 North Cancelled 60.00
O1006 South Shipped 890.00
O1007 East Returned 340.00
O1008 East Shipped 610.00
O1009 West Shipped 150.00
O1010 West Pending 45.00
O1011 North Shipped 1,320.00
O1012 East Shipped 480.00

Expression: status == 'Shipped' AND amount >= 300

Output — 6 rows

Order ID Region Status Amount
O1001 North Shipped 420.00
O1002 South Shipped 1,180.50
O1006 South Shipped 890.00
O1008 East Shipped 610.00
O1011 North Shipped 1,320.00
O1012 East Shipped 480.00
Filter transformation panel in DataFuseAI showing a multi-condition expression built from available fields and operators
The same filter logic configured in DataFuseAI's pipeline builder

Filter & Route · Fuzzy Match
Fuzzy Filter

Fuzzy Filter applies the same similarity scoring as Fuzzy Join, but as a standalone condition rather than a merge, useful for isolating records that probably refer to one specific entity without an exact-match key.

Input — crm_contacts (same 12 rows as the Fuzzy Join example)

Condition: Organization fuzzy-matches "Meridian Traders Ltd" · Score ≥ 65% (scores illustrative)

Contact ID Organization Similarity Score Result
CR001 Meridian Traders Ltd 100% Pass
CR002 Meridian Trading Ltd 82% Pass
CR003 Meridian Traders LLC 78% Pass
CR004 Meridian Traiders Ltd 88% Pass
CR005 Alderbrook Supply Co 12% Fail
CR006 Alderbrook Supplies Company 15% Fail
CR007 Continental Parts Incorporated 8% Fail
CR008 Continental Part Inc 9% Fail
CR009 Coastal Equipmnt Group 6% Fail
CR010 Coastal Equipment Grp 7% Fail
CR011 Vantage Metal Werks 5% Fail
CR012 Harbor Fastener Co 4% Fail

Output: 4 rows (CR001–CR004). For a closer look at how similarity scoring, thresholds, and weighting actually work under the hood, our fuzzy matching guide covers the algorithms directly.

Fuzzy Filter configuration in DataFuseAI, showing a similarity threshold set on a text field within the Filter transformation
The same fuzzy filter logic configured in DataFuseAI's pipeline builder

Filter & Route
Dedupe

Dedupe removes duplicate rows, either across every column or a chosen subset, keeping the first occurrence of each unique combination. It's usually one of the first nodes in a pipeline, since it's hard to trust anything downstream if the same record entered twice.

Input — orders_raw (14 rows; two exact duplicates highlighted)

Order ID Customer Name Region Status Amount
O1001 Meridian Traders Ltd North Shipped 420.00
O1002 Alderbrook Supply Co South Shipped 1,180.50
O1003 Continental Parts Inc East Pending 95.00
O1004 Blue Ridge Hardware West Shipped 275.00
O1005 Meridian Traders Ltd North Cancelled 60.00
O1006 Northstar Logistics South Shipped 890.00
O1002 Alderbrook Supply Co South Shipped 1,180.50
O1007 Coastal Equipment Group East Returned 340.00
O1008 Continental Parts Inc East Shipped 610.00
O1009 Prairie Fabricators West Shipped 150.00
O1006 Northstar Logistics South Shipped 890.00
O1010 Blue Ridge Hardware West Pending 45.00
O1011 Vantage Metal Works North Shipped 1,320.00
O1012 Coastal Equipment Group East Shipped 480.00

Configuration: Dedupe on all columns · Output — 12 rows (this is the clean_orders table used throughout this guide)

Every node from here forward, Filter, Split, Route, Aggregate, Derived, and Window, uses this same 12-row deduped table as its input, the way a real pipeline would chain them. For a broader look at catching this kind of issue before it reaches a warehouse, see data quality validation in ETL pipelines.

Dedupe transformation panel in DataFuseAI showing column selection used to identify duplicate records
The same dedupe logic configured in DataFuseAI's pipeline builder

Routing & Splitting: Split & Route

Split and Route both divide one stream into multiple branches. The difference is how many branches they support.

Filter & Route
Split

Split evaluates one condition and sends every row down one of exactly two paths: a true branch and a false branch. Both outputs keep the full original schema.

Input — clean_orders (12 rows) · Condition: amount >= 300

Order ID Region Amount Branch
O1001 North 420.00 Output 1 (≥ 300)
O1002 South 1,180.50 Output 1 (≥ 300)
O1003 East 95.00 Output 2 (< 300)
O1004 West 275.00 Output 2 (< 300)
O1005 North 60.00 Output 2 (< 300)
O1006 South 890.00 Output 1 (≥ 300)
O1007 East 340.00 Output 1 (≥ 300)
O1008 East 610.00 Output 1 (≥ 300)
O1009 West 150.00 Output 2 (< 300)
O1010 West 45.00 Output 2 (< 300)
O1011 North 1,320.00 Output 1 (≥ 300)
O1012 East 480.00 Output 1 (≥ 300)

Output 1: 7 rows. Output 2: 5 rows. Both branches typically feed different sinks or different downstream transformations.

Split transformation panel in DataFuseAI showing a condition that divides a data stream into two output branches on the canvas
The same split logic configured in DataFuseAI's pipeline builder

Filter & Route
Route

Route works like Split but supports any number of conditional branches, each defined independently, which is what you need once "yes or no" isn't enough categories.

Input — clean_orders (12 rows) · Routes: LOW (<100), MEDIUM (100–499), HIGH (500–999), CRITICAL (≥1000)

Order ID Amount Route
O1001 420.00 MEDIUM
O1002 1,180.50 CRITICAL
O1003 95.00 LOW
O1004 275.00 MEDIUM
O1005 60.00 LOW
O1006 890.00 HIGH
O1007 340.00 MEDIUM
O1008 610.00 HIGH
O1009 150.00 MEDIUM
O1010 45.00 LOW
O1011 1,320.00 CRITICAL
O1012 480.00 MEDIUM

Route summary

Route Order Count
LOW 3
MEDIUM 5
HIGH 2
CRITICAL 2
Route transformation panel in DataFuseAI showing multiple saved routing conditions directing records to different output branches on the pipeline canvas
The same routing logic configured in DataFuseAI's pipeline builder

Compute: Aggregate, Derived & Window

Compute transformations don't change which rows exist, well, Aggregate does, they calculate. The distinction between the three comes down to whether rows collapse, whether a new column gets added, and whether the calculation looks across other rows at all.

Compute
Aggregate

Aggregate groups rows by one or more columns and collapses each group into a single summary row.

Input — clean_orders (12 rows) · Group By: Region · Functions: sum, count, avg, max, min on Amount

Output — 4 rows

Region Total Revenue Order Count Avg Order Max Order Min Order
North 1,800.00 3 600.00 1,320.00 60.00
South 2,070.50 2 1,035.25 1,180.50 890.00
East 1,525.00 4 381.25 610.00 95.00
West 470.00 3 156.67 275.00 45.00

Aggregation functions available (selected reference)

Function Description
count / count distinct Row count, or count of unique values
sum / sum distinct Total, or total of unique values only
avg / mean Arithmetic average
min / max Smallest or largest value in the group
first / last First or last value encountered in the group
stddev / stddev_pop Sample or population standard deviation
variance / var_pop Sample or population variance
skewness / kurtosis Distribution shape statistics
approx_count_distinct Fast, approximate distinct count for large groups
collect_list / collect_set All values, or all unique values, returned as an array
Aggregate transformation panel in DataFuseAI showing column-level aggregation type selection on a drag-and-drop canvas
The same aggregation logic configured in DataFuseAI's pipeline builder

Compute
Derived

Derived adds new columns calculated from existing ones, string, numeric, date, or conditional logic, without touching row count.

Input — clean_orders (12 rows) · New columns: total_with_tax = amount × 1.08, order_year = YEAR(order_date), customer_tier = CASE WHEN amount ≥ 1000 THEN 'VIP' WHEN amount ≥ 300 THEN 'Standard' ELSE 'Occasional'

Order ID Amount Total w/ Tax Order Year Customer Tier
O1001 420.00 453.60 2025 Standard
O1002 1,180.50 1,275.06 2026 VIP
O1003 95.00 102.60 2026 Occasional
O1004 275.00 297.00 2026 Occasional
O1005 60.00 64.80 2025 Occasional
O1006 890.00 961.20 2026 Standard
O1007 340.00 367.20 2026 Standard
O1008 610.00 658.80 2026 Standard
O1009 150.00 162.00 2026 Occasional
O1010 45.00 48.60 2026 Occasional
O1011 1,320.00 1,425.60 2026 VIP
O1012 480.00 518.40 2026 Standard

Supported function categories (selected reference)

Category Example Functions Typical Use
String concat, trim, upper/lower, replace, split, substring Cleaning and combining text fields
Numeric round, abs, ceil, floor, sqrt, pow Calculated financial or measurement fields
Date & Time year, month, day, date_add, date_format, now Extracting periods, calculating durations
Conditional when / otherwise (CASE WHEN), coalesce, isNull Tiering, flagging, and defaulting missing values
Derived transformation panel in DataFuseAI showing a conditional CASE WHEN expression used to compute a new column
The same derived-column logic configured in DataFuseAI's pipeline builder

Compute
Window

Window functions calculate across a group of related rows, a rank, a running total, a prior-row comparison, without collapsing anything. Every input row still appears in the output, just with extra columns attached.

Input — clean_orders (12 rows) · Partition By: Region · Order By: Order Date · Functions: rank() by amount desc, running total of amount

Order ID Region Amount Rank in Region Running Total
O1001 North 420.00 2 420.00
O1005 North 60.00 3 480.00
O1011 North 1,320.00 1 1,800.00
O1002 South 1,180.50 1 1,180.50
O1006 South 890.00 2 2,070.50
O1003 East 95.00 4 95.00
O1007 East 340.00 3 435.00
O1008 East 610.00 1 1,045.00
O1012 East 480.00 2 1,525.00
O1004 West 275.00 1 275.00
O1009 West 150.00 2 425.00
O1010 West 45.00 3 470.00

Window function types available (selected reference)

Type Functions What They're For
Ranking row_number, rank, dense_rank, percent_rank, ntile Ordering rows within a partition, with or without gaps for ties
Analytic lag, lead, cume_dist Comparing a row to the one before or after it
Aggregate-in-window sum, avg, min, max, count, stddev Group-level stats attached to every row instead of collapsing them
Window transformation panel in DataFuseAI showing partition, order-by, and window function configuration for ranking and running calculations
The same window logic configured in DataFuseAI's pipeline builder

Quick Reference: All 12 Transformation Nodes

One table covering everything above, for whenever you already know which problem you're solving and just need the node name.

Category Node What It Does Typical Trigger
Reshape Pivot Rotates unique row values into columns Long-format data needs to become wide for reporting
Reshape Unpivot Rotates columns back into rows Wide tables need to become long for a BI tool
Reshape Explode Flattens an array field into one row per element An API or JSON source returns list-valued fields
Combine Join Merges two sources on a matching key Related data lives in separate tables
Combine Join (Fuzzy Match) Merges sources on an approximate text match Keys don't match exactly across systems
Combine Union Stacks rows from sources with the same schema Multiple systems produce the same record type
Filter & Route Filter Keeps only rows meeting a condition Records need to be scoped by a rule
Filter & Route Filter (Fuzzy Match) Keeps rows whose text approximately matches a value Free-text fields have inconsistent spelling
Filter & Route Dedupe Removes duplicate rows The same record entered a pipeline more than once
Filter & Route Split Divides one stream into two branches Two record types need different downstream handling
Filter & Route Route Divides one stream into 3+ conditional branches Records need to go to more than two destinations
Compute Aggregate Rolls detail rows into group-level summaries Dashboards need totals, not transaction-level detail
Compute Derived Calculates a new column from existing ones A value should exist as a field instead of being recalculated downstream
Compute Window Computes ranks or running values without collapsing rows Rankings, running totals, period-over-period comparisons

Chaining Transformations Into a Real Pipeline

No single node does the whole job. A real pipeline connects several of them in sequence, and the output row count changes at every step. Here's the Union example from earlier, extended through Filter, Join, Derived, and Aggregate to land at a single regional revenue summary.

Step Node Operation Rows In Rows Out
1 Sources orders_store_a + orders_store_b 10 + 10
2 Union Combine, remove exact duplicates 20 18
3 Filter status == 'Shipped' 18 11
4 Join Enrich with customer city & segment 11 11
5 Derived Add tax total & customer tier 11 11
6 Aggregate Sum revenue by region 11 4

Each node in that chain does exactly one job: Union combines two systems into one stream, Filter scopes it down to what matters, Join adds context that wasn't in the original records, Derived calculates fields the business actually asked for, and Aggregate turns 11 transaction rows into 4 numbers a dashboard can show. That's the same design principle behind keeping change data capture pipelines incremental rather than reprocessing everything on every run.

Where Transformation Logic Breaks in Production

Every node above works correctly in a preview pane. The failures that matter show up once real, messy volume hits the pipeline.

Join keys that don't quite match

Without a check

A standard Join silently drops any row whose key has a typo, trailing space, or naming variant on either side. Row counts look fine because nothing errors.

With a check

A Fuzzy Join or Fuzzy Filter step upstream reconciles near-matches to a canonical key first, so the standard Join downstream has something reliable to match against.

Union hiding near-duplicates

Without a check

Union Distinct only removes rows that are identical across every selected column. A one-character difference in a customer name means the "duplicate" survives twice.

With a check

Dedupe on a narrower column set, or a Fuzzy Filter pass, catches near-duplicates that exact-match dedup logic is structurally unable to see.

Catching this kind of gap usually comes down to whether anyone is watching row counts at each step of the chain, not whether any single node was configured incorrectly. See our guide on pipeline observability for how to monitor that across a full pipeline rather than one node at a time.

Data Transformation Best Practices

Practice Why It Matters
Dedupe before anything else touches the data Every downstream node inherits whatever count is wrong at the start
Preview every node before running the full pipeline Catches a wrong join type or misconfigured expression before it processes real volume
Use Fuzzy Match only where an exact key genuinely doesn't exist Fuzzy scoring is probabilistic; reserve it for free-text fields, not IDs
Keep each node doing one job A Derived node with ten unrelated calculations is harder to debug than five focused ones
Name nodes descriptively on the canvas "Filter — Shipped Orders Only" tells the next person what broke without opening the config

None of the 12 nodes above is complicated in isolation. What makes a pipeline reliable is sequencing them correctly, deduplicate before filtering, join before aggregating, and previewing at every step so a bad assumption gets caught while it's still cheap to fix.

Frequently Asked Questions

DataFuseAI ships 12 transformation nodes across four categories: Reshape (Pivot, Unpivot, Explode), Combine (Join, Union), Filter & Route (Dedupe, Filter, Split, Route), and Compute (Aggregate, Derived, Window). Filter and Join also support a Fuzzy Match mode for approximate text matching.

Split divides one stream into exactly two branches based on a single condition: a true branch and a false branch. Route supports any number of branches, each with its own condition, which makes it the right choice once you need more than two destinations for the same stream.

A standard Join or Filter requires an exact value match. Fuzzy Match scores how similar two text values are and accepts anything above a configured threshold, which is what lets "Meridian Traders Ltd" and "Meridian Traiders Ltd" resolve to the same record instead of being treated as unrelated.

Yes. Transformation nodes connect output to input on the canvas in any order, and each node's output becomes the next node's input. A common chain is Union, then Filter, then Join, then Derived, then Aggregate, feeding a single sink at the end.

Aggregate collapses detail rows into one row per group, so row count drops. Window does the opposite: it calculates a value like a rank or running total for every row without merging any of them, so the row count going in matches the row count coming out.