Skip to content

Do not print logical plans in tree explain format #15020

@alamb

Description

@alamb

Is your feature request related to a problem or challenge?

We are working on a new user focused explain format

The current explain format has a logical plan and a physical plan. This split is important for people developing DataFusion but not as much for users.

For example, the query like this

set datafusion.explain.format = "tree";

 create table  table1 (
  int_col INT,
  string_col TEXT,
  bigint_col BIGINT,
  date_col DATE
) as VALUES (1, 'foo', 1, '2023-01-01'), (2, 'bar', 2, '2023-01-02'), (3, 'baz', 3, '2023-01-03');
0 row(s) fetched.

explain SELECT int_col FROM table1
WHERE string_col != 'foo' AND string_col != 'bar' AND string_col != 'a really long string constant'

The output looks like this (note the logical_plan line that is very wide)

+---------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type     | plan                                                                                                                                           |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| logical_plan  | Projection: table1.int_col                                                                                                                     |
|               |   Filter: table1.string_col != Utf8("foo") AND table1.string_col != Utf8("bar") AND table1.string_col != Utf8("a really long string constant") |
|               |     TableScan: table1 projection=[int_col, string_col]                                                                                         |
| physical_plan | ┌───────────────────────────┐                                                                                                                  |
|               | │    CoalesceBatchesExec    │                                                                                                                  |
|               | └─────────────┬─────────────┘                                                                                                                  |
|               | ┌─────────────┴─────────────┐                                                                                                                  |
|               | │         FilterExec        │                                                                                                                  |
|               | │    --------------------   │                                                                                                                  |
|               | │         predicate:        │                                                                                                                  |
|               | │string_col@1 != foo AND ...│                                                                                                                  |
|               | └─────────────┬─────────────┘                                                                                                                  |
|               | ┌─────────────┴─────────────┐                                                                                                                  |
|               | │       DataSourceExec      │                                                                                                                  |
|               | │    --------------------   │                                                                                                                  |
|               | │    partition_sizes: [1]   │                                                                                                                  |
|               | │       partitions: 1       │                                                                                                                  |
|               | └───────────────────────────┘                                                                                                                  |
|               |                                                                                                                                                |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------+
2 row(s) fetched.

Describe the solution you'd like

I would like to hide the logical plan in tree mode.

So for the example above, that would look something like

+---------------+---------------------------------------+
| plan_type     | plan                                                                                                                                           |
+---------------+---------------------------------------+
| physical_plan | ┌───────────────────────────┐                                                                                                                  |
|               | │    CoalesceBatchesExec    │                                                                                                                  |
|               | └─────────────┬─────────────┘                                                                                                                  |
|               | ┌─────────────┴─────────────┐                                                                                                                  |
|               | │         FilterExec        │                                                                                                                  |
|               | │    --------------------   │                                                                                                                  |
|               | │         predicate:        │                                                                                                                  |
|               | │string_col@1 != foo AND ...│                                                                                                                  |
|               | └─────────────┬─────────────┘                                                                                                                  |
|               | ┌─────────────┴─────────────┐                                                                                                                  |
|               | │       DataSourceExec      │                                                                                                                  |
|               | │    --------------------   │                                                                                                                  |
|               | │    partition_sizes: [1]   │                                                                                                                  |
|               | │       partitions: 1       │                                                                                                                  |
|               | └───────────────────────────┘                                                                                                                  |
|               |                                                                                                                                                |
+---------------+--------------------------------------+

Describe alternatives you've considered

No response

Additional context

I think this is a fairly straightforward issue and there are existing tests so marking as a good first issue

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions