All nodes/Data/DataFrame Ops
DF Concat
SQL UNION ALL / column-stack: concatenates two DataFrames by rows or by columns.
Type in the graph: df_concat
Exec
An error branch can be enabled (expose_error_output) to handle failures on their own path.
Ports can be split into separate execution and data handles.
Try it
Minimal working workflow
- Execute + Data
Runs as pasted
When to use it
Puts two tables together: either one below the other (SQL UNION ALL) or side by side. Reach for it when the tables mean the same thing — exports for two months, answers from two sources. Joining on a shared key is df_merge.
The inputs mirror the join node: “Left” starts the node and brings a value, “Right” brings a value only. The branch that prepares the right-hand table has to finish earlier along the execution path, otherwise the node fails, reporting that its input is not a table.
How it works
“Axis” = rows appends the right table’s rows after the left table’s. Columns are matched by
name, not by position; a column missing from one side is filled with blanks for its rows. Unlike
SQL UNION, the column sets do not have to match.
“Axis” = columns places the tables next to each other and lines them up by row number, not
by value.
“Ignore source index” renumbers the result from zero. On the columns axis the toggle is
hidden: there the row numbering is exactly what the tables are aligned by, so it must stay.
Common mistakes
- Stacking by columns after a filter. df_query preserves the original row numbering, while df_sort and df_drop_duplicates rewrite it. Line up two tables with different numbering and the rows drift apart, leaving blanks. Matching by value is what df_merge is for.
- Expecting the stack to remove repeats. This is UNION ALL: identical rows both survive. Put df_drop_duplicates after it.
- The same field named differently.
emailandEmailon therowsaxis produce two half-empty columns. Normalise the names with df_select first.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Leftleft | Execute + Dataexecute_data | dataframe | |
Rightright | Datadata | dataframe |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Successoutput | Execute + Dataexecute_data | dataframe | |
Erroron_error | Execute + Dataexecute_data | — | shown when expose_error_output = true |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Axisaxis | string | rows | ``rows`` = append A then B (UNION ALL); ``columns`` = side-by-side join by index. Options: |
Ignore source indexignore_index | boolean | true | Renumber the rows 0..n-1 instead of keeping each source's index. shown when axis = rows |
Shared fields
Every node has these three — the platform adds them, not the node author.
expose_error_output— When enabled, show an execution output to connect nodes that run if this step fails.split_ports_in— Show separate execution and data input handles instead of one combined port.split_ports_out— Show separate execution and data output handles instead of one combined port.