Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve explain tree formatting for longer lines / word wrap #15019

Closed
Tracked by #14914
alamb opened this issue Mar 5, 2025 · 1 comment · Fixed by #15031
Closed
Tracked by #14914

Improve explain tree formatting for longer lines / word wrap #15019

alamb opened this issue Mar 5, 2025 · 1 comment · Fixed by #15031
Assignees
Labels
enhancement New feature or request

Comments

@alamb
Copy link
Contributor

alamb commented Mar 5, 2025

Is your feature request related to a problem or challenge?

The new tree explain format currently truncates pretty aggressively

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 that the predicate has been truncated):

+---------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| 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.

As @irenjj says in #15001 (comment)

This is a very nice case for // TODO: check every line is less than MAX_LINE_RENDER_SIZE. In DuckDB, we can get the following result:

D explain select * from t1 where c != 'foo' and c != 'bar' and c != 'a really long string constant';

┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌───────────────────────────┐
│         SEQ_SCAN          │
│    ────────────────────   │
│         Table: t1         │
│   Type: Sequential Scan   │
│       Projections: c      │
│                           │
│          Filters:         │
│ c!='foo' AND c!='bar' AND │
│  c!='a really long string │
│          constant'        │
│                           │
│          ~1 Rows          │
└───────────────────────────┘

Describe the solution you'd like

I would like more of the predicate to be visible in the explain plan (there probably needs to still be some limit, but more than one line would be nice)

Describe alternatives you've considered

No response

Additional context

No response

@alamb alamb added the enhancement New feature or request label Mar 5, 2025
@alamb alamb changed the title Improve explain tree formatting for longer lines / word wra Improve explain tree formatting for longer lines / word wrap Mar 5, 2025
@irenjj
Copy link
Contributor

irenjj commented Mar 5, 2025

take

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants