Skip to content

feat: generate benchmark datasets into parameter-encoded paths with Parquet layout options - #819

Merged
gabotechs merged 3 commits into
mainfrom
gabrielmusat/benchmark-dataset-layout
Oct 30, 2026
Merged

gabotechs merged 3 commits into
mainfrom
gabrielmusat/benchmark-dataset-layout

Conversation

@gabotechs

@gabotechs gabotechs commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #820, which removes the gen-*.sh scripts; review that first.

Makes benchmark datasets reproducible from their path and adds Parquet layout knobs:

  • dfbench prepare-* writes to <root>/<suite>_parquet/<key>=<value>/..., a path that records every generation parameter (e.g. tpch_parquet/scale_factor=1/max_file_size=134217728/dictionary=pages/sorted=false). --root defaults to the repository's testdata/ and accepts an s3:// prefix.
  • Each TPC-H/TPC-DS table is generated as one ordered stream and split into <table>/N.parquet by --max-file-size (default 128 MiB), replacing --partitions. TPC-DS files now cover contiguous key ranges instead of interleaved rows.
  • --dictionary none|pages|arrow controls Parquet dictionary pages and Arrow dictionary types; --sorted declares sorting_columns, now for TPC-DS as well.
  • Generating a complete dataset again is a no-op (_SUCCESS); any other non-empty destination is rejected. dfbench-iceberg prepare follows the same rule and mirrors the source under <suite>_iceberg/.../target_file_size=N.
  • prepare-* and dfbench-iceberg prepare print only the dataset path on stdout, so DATASET=$(dfbench prepare-tpch) works; a progress bar reports per-table progress on stderr.

Tests and the console example generate into the same layout, so the plan snapshots are regenerated for the new file paths and groupings (most of the diff, in tests/*_plans_test.rs). The ClickBench CI cache moves to testdata/clickbench_parquet/.

Breaking for local usage: --partitions and --output are gone from prepare-*, and existing local datasets under testdata/<suite>/ need regenerating.

🤖 Generated with Claude Code

@gabotechs
gabotechs force-pushed the gabrielmusat/benchmark-dataset-layout branch from f421095 to 129cc62 Compare October 30, 2026 09:29
@gabotechs
gabotechs changed the base branch from main to gabrielmusat/remove-gen-scripts October 30, 2026 09:30
Base automatically changed from gabrielmusat/remove-gen-scripts to main October 30, 2026 09:55
…arquet layout options

The dfbench prepare-* commands now own where and how datasets are generated:

- Datasets are written to <root>/<suite>_parquet/<key>=<value>/..., a path that
  records every generation parameter (e.g.
  tpch_parquet/scale_factor=1/max_file_size=134217728/dictionary=pages/sorted=false).
  --root defaults to the repository's testdata/ and accepts an s3:// prefix.
- Each TPC-H and TPC-DS table is generated as one ordered stream and split into
  <table>/N.parquet files by --max-file-size, replacing --partitions. TPC-DS
  files now cover contiguous key ranges instead of interleaved rows.
- --dictionary none|pages|arrow controls Parquet dictionary pages and Arrow
  dictionary types; --sorted declares sorting_columns, now for TPC-DS too.
- Generating a complete dataset again is a no-op (_SUCCESS); any other
  non-empty destination is rejected. The Iceberg conversion follows the same
  rule and mirrors the source path under <suite>_iceberg/.../target_file_size=N.
- prepare-* and dfbench-iceberg prepare print only the dataset path on stdout,
  so DATASET=$(dfbench prepare-tpch) works; progress goes to stderr.

Tests, the console example and docs use the new layout, and the plan snapshots
are regenerated for the new file paths and groupings.
@gabotechs
gabotechs force-pushed the gabrielmusat/benchmark-dataset-layout branch from 129cc62 to 59e60be Compare October 30, 2026 09:56
@gabotechs
gabotechs merged commit c6c3d25 into main Oct 30, 2026
38 checks passed
@gabotechs
gabotechs deleted the gabrielmusat/benchmark-dataset-layout branch October 30, 2026 10:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant