Skip to content
cccskills
FreePublished on GitHub

add-benchmarks

Design or extend DataFusion benchmarks using SQL where practical. Select representative workload variations, keep unrelated processing lightweight, and integrate runs with bench.sh so measurements reflect useful execution paths and remain practical to run.

OriginalShow the original description

Guidelines for designing or extending DataFusion benchmarks.

See how to install

Good for

  • Add SQL benchmarks for DataFusion operators
  • Select representative input sizes and filter conditions
  • Reduce unrelated processing overhead in measurements
  • Integrate benchmark preparation and execution with bench.sh

Files included (1)

  • SKILL.md2.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Benchmark Design

Follow these guidelines when designing or adding a new benchmark.

Design principles

Use the highest-level interface

Use the highest-level interface possible, preferably SQL, while keeping the work around the operator being measured as cheap as possible. When benchmarking a function, exercise its evaluation path instead of benchmarking internal utility functions in isolation.

This makes benchmarks easier to maintain and helps assess how much an optimization matters to end-to-end runtime. It also helps avoid spending time optimizing code that accounts for only a small fraction of the total runtime.

Practical criteria for choosing SQL or Rust benchmarks: Try implementing the benchmark in SQL first. If a Rust microbenchmark still seems like a better fit, use Criterion.

Vary the key workload axes

First identify the key axes to vary. For example, for a join benchmark:

  • Input size on each side.
  • Join-filter selectivity.
  • ...

Then choose benchmark cases that exercise representative variations. Full combinatorial coverage is unnecessary; focus on typical workloads that reflect real use cases.

When adding benchmark queries, simply tag each query with the decision made for every axis. For example, for a join benchmark with input sizes/filter selectivity to tune:

-- Q1: Small left input, large right input; 0.1% of pairs match.
SELECT *
FROM generate_series(1, 100) AS l
JOIN generate_series(1, 100000) AS r
  ON (l.value + r.value) % 1000 = 0;

-- Q2: Medium inputs on both sides; no filter.
SELECT *
FROM generate_series(1, 1000) AS l
CROSS JOIN generate_series(1, 1000) AS r;

SQL benchmarks

For implementation details, see the SQL benchmark README.

  1. Keep other operators cheap.

    When a SQL benchmark targets a specific operator, keep the work done by other operators as lightweight as possible. For example, use a data source such as generate_series() instead of a Parquet scan so scan overhead does not dominate the measurement. See the nlj benchmark for examples.

  2. Integrate with the top-level benchmark script.

    Ensure the benchmark can be prepared and run through bench.sh:

    # Run from the benchmarks directory.
    
    # Generate any required dataset.
    ./bench.sh data new_bench
    
    # Run the benchmark.
    ./bench.sh run new_bench
    
  3. Keep query runtimes practical.

    Tune the workload so each query takes roughly a few seconds per execution. This helps reduce the relative impact of timing noise while keeping the suite practical to run.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Audit one datafusion-spark function against Apache Spark 4.2.0. Compare source code, accepted types, and edge cases, verify expected results with PySpark, then fix differences and record remaining gaps as issues and disabled tests.

  • Auditing a function for Spark compatibility
  • Checking NULL, overflow, and ANSI mode behavior
  • Finding missing SQL test coverage
apache/datafusion9.5KUpdated Oct 19, 2026

datafusion-ffi

FreeSummary

Guide changes and reviews in datafusion-ffi, which connects separately compiled libraries. Check binary compatibility, memory ownership, and method coverage, and choose unit and cross-library tests for new wrappers, trait extensions, or codec changes.

  • Add FFI wrappers for DataFusion traits
  • Check that default method overrides cross the FFI boundary
  • Review binary compatibility and memory ownership in pull requests
apache/datafusion9.5KUpdated Oct 19, 2026

pr_review

FreeSummary

Review Apache DataFusion pull requests using the project's review guide. Gather the proposed changes, discussion, and automated check results, or apply the same review criteria to your own changes before submitting a pull request.

  • Reviewing an Apache DataFusion pull request
  • Checking your changes before submitting a pull request
  • Reviewing changes alongside discussion and automated check results
apache/datafusion9.5KUpdated Oct 19, 2026

See all skills by apache

Report a problem with this skill