Repository navigation
Store the raw corpus types in the ClickBench fixture - #102
Merged
Merged
Conversation
The fixture built its Arrow schema out of the DuckDB create statement, which is what the table looks like after a load rather than what the file holds. So it wrote EventDate as a date and three columns as microsecond timestamps, all four of them already converted, and then handed that to every driver with no projection. That is why all forty three queries passed here on every push while seven of them failed the first time the workload was pointed at the real fourteen gigabyte corpus. The fixture was a miniature of what the corpus becomes, not of the corpus, and the queries that did not fail were quietly answering a different question from the ones that would run for real. The fixture now stores EventDate as an unsigned sixteen bit count of days and the three time columns as plain Unix seconds in a signed sixty four bit integer with no logical type, which is what the published Parquet file actually holds, and each driver is given the projection its own published setup applies. The new test is the reason to believe any of that. It loads DataFusion against the fixture with no projection and asserts that exactly q36 through q42 fail, which are exactly the seven that failed on the corpus. A fixture that drifts back to storing the converted types stops finding them and says so here rather than in a run somebody paid two minutes of a workstation for.
7 of 8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The fixture in
crates/bench-run/tests/clickbench.rsbuilt its Arrow schema out of the DuckDB create statement. That statement is what the table looks like after a load, not what the Parquet file holds, so the fixture wroteEventDateas a date andEventTime,ClientEventTimeandLocalEventTimeas microsecond timestamps, all four already converted, and then handed that table to every driver with no projection at all.That is why all forty three queries passed here on every push while seven of them failed the first time the workload was pointed at the real fourteen gigabyte corpus, which is #97. The fixture was a miniature of what the corpus becomes rather than a miniature of the corpus. The queries that did not fail were not a comfort either, because they were answering a different question from the one that would run for real.
The corpus footer says
EventDateis aUInt16count of days and the three time columns are plain Unix seconds in anInt64with no logical type on them. The fixture now stores exactly that, and each driver is handed the projection its own published setup applies, which is the thing #99 made available.The new test is the reason to believe any of it.
without_the_published_setup_the_seven_date_queries_failloads DataFusion against the fixture withprojection: Noneand asserts that the failures are exactly q36 through q42, which are exactly the seven that failed on the corpus. It is the counterpart of the mutation test already in the file, and it is there for the same reason: a fixture that always passes and a fixture that cannot fail read the same way from the outside.No numbers are in this PR. It is test code only, and no crate outside
bench-run's test target changed.Local gate green: fmt, clippy, discipline, discipline tests, workspace tests, doc tests, rustdoc, and a locked check.