Latest Results
fix: truncate default IOConfig fields in explain() output (#7327)
## Changes Made
`df.explain()` and related plan displays were dumping every IO backend's
full default config (S3, Azure, GCS, HTTP, Unity, Gravitino, HF, TOS,
COS, GooseFS, HDFS, โฆ), which made plans hard to read.
This PR makes IOConfig display **sparse / diff-from-default**:
1. Each backend's `multiline_display` only emits fields that differ from
`Default` (extending the existing GooseFS pattern).
2. `IOConfig::multiline_display` skips empty backend sections entirely.
3. `Display for IOConfig` uses the same sparse view (`IOConfig {}` when
fully default).
4. When a scan knows its URI scheme(s) (e.g. `s3://โฆ`), GlobScanOperator
explain filters to only the relevant backend section(s).
## Before / after
Local parquet explain previously printed a multi-line wall of every
backend's defaults. Now:
```
* GlobScanOperator
| Glob paths = [...]
| IO config = <default>
| Use multithreading = true
```
`url_download` with a non-default `max_connections=32` previously
embedded the full multi-backend `IOConfig` dump; now it shows only:
```
IOConfig:
S3 config = { Max connections = 32 }
```
## Testing
- `cargo test -p common-io-config --lib` (43 passed), including new unit
tests for sparse/default/scheme-aware display
- `cargo check -p daft-scan`
- `cargo fmt -p common-io-config -p daft-scan`
- Reproduced local `read_parquet(...).explain()` against a `make build`
wheel
- Updated
`tests/dataframe/test_morsels.py::test_batch_size_from_udf_propagated_through_ops_to_scan`;
passes under `DAFT_RUNNER=native`
## AI usage disclosure
Developed with an AI coding assistant. I reviewed the diff, verified
explain output locally, and ran the tests above.
## Related Issues
Closes #7308
Made with [Cursor](https://cursor.com)
---------
Co-authored-by: Cursor <cursoragent@cursor.com> Latest Branches
0%
0%
codex/mcap-pushdown-profiling 0%
codex/mcap-native-reader-core ยฉ 2026 CodSpeed Technology