Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions datafusion/sql/src/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,9 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
group_by_expr,
planner_context,
),
PipeOperator::Join(join) => {
self.parse_relation_join(plan, join, planner_context)
}

x => not_impl_err!("`{x}` pipe operator is not supported yet"),
}
Expand Down
2 changes: 1 addition & 1 deletion datafusion/sql/src/relation/join.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
Ok(left)
}

fn parse_relation_join(
pub(crate) fn parse_relation_join(
&self,
left: LogicalPlan,
join: Join,
Expand Down
18 changes: 18 additions & 0 deletions datafusion/sqllogictest/test_files/pipe_operator.slt
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,21 @@ query TII rowsort
|> WHERE num_items > 1;
----
apples 2 9

# JOIN pipe
query TII
(
SELECT 'apples' AS item, 2 AS sales
UNION ALL
SELECT 'bananas' AS item, 5 AS sales
)
|> AS produce_sales
|> LEFT JOIN
(
SELECT "apples" AS item, 123 AS id
) AS produce_data
ON produce_sales.item = produce_data.item
|> SELECT produce_sales.item, sales, id;
----
apples 2 123
bananas 5 NULL
26 changes: 26 additions & 0 deletions docs/source/user-guide/sql/select.md
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ DataFusion currently supports the following pipe operators:
- [INTERSECT](#pipe_intersect)
- [EXCEPT](#pipe_except)
- [AGGREGATE](#pipe_aggregate)
- [JOIN](#pipe_join)

(pipe_where)=

Expand Down Expand Up @@ -514,3 +515,28 @@ select * from range(0,3)
| 3 |
+-------+
```

(pipe_join)=

### JOIN

```sql
(
SELECT 'apples' AS item, 2 AS sales
UNION ALL
SELECT 'bananas' AS item, 5 AS sales
)
|> AS produce_sales
|> LEFT JOIN
(
SELECT 'apples' AS item, 123 AS id
) AS produce_data
ON produce_sales.item = produce_data.item
|> SELECT produce_sales.item, sales, id;
+--------+-------+------+
| item | sales | id |
+--------+-------+------+
| apples | 2 | 123 |
| bananas| 5 | NULL |
+--------+-------+------+
```