Skip to content

Plan the next two work streams - #119

Merged
jdatcmd merged 1 commit into
mainfrom
plan/next-two-streams
Jul 24, 2026
Merged

Plan the next two work streams#119
jdatcmd merged 1 commit into
mainfrom
plan/next-two-streams

Conversation

@jdatcmd

@jdatcmd jdatcmd commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Plans written before any code, for the two streams remaining after Phase G.

PARQUET_FOLLOWONS_PLAN.md sequences the three remaining Parquet roadmap items smallest first: INT32/INT64-backed DECIMAL reads, a recursive directory walk, then Hive-style partition pruning which depends on the walk. Two decisions are made explicitly rather than by default:

  • The walk will not descend into symlinked directories. A visited-inode set is more machinery than the rule is worth, and "we do not follow directory symlinks" is something a user can reason about.
  • Partition columns will be declared as a table option rather than inferred from the tree, for the same reason the column definition list is required rather than inferred: a wrong guess silently changes which rows a query returns.

CASCADE_ENCODING_PLAN.md disagrees with the roadmap's "low to medium effort" and says why. The item bundles two independent ideas:

  • Cascading (encode one scheme's output with another) is where the size win is, and it changes the on-disk format. A chunk header must express a chain, which means a chain descriptor, a corrupt-file guard on the chain length, and an explicit decision about old builds reading new files. Recommend a format version bump so that failure is loud.
  • Sampling is a write-throughput optimization whose value depends entirely on what selection costs today, which has never been measured. ColumnarEncodeChunk currently runs every applicable encoder in full and keeps the smallest.

So step 1 is to measure selection cost on the 6M-row bench and let the number decide whether the sampling half is built at all. Finding out it is not worth it is a legitimate outcome, and much cheaper to reach now than after building it.

Design docs only, no code, so no gate.

🤖 Generated with Claude Code

…ding

Written before any code, per the plan-before-code discipline.

PARQUET_FOLLOWONS_PLAN.md sequences the three remaining Parquet roadmap items
smallest first: INT32/INT64-backed DECIMAL reads, a recursive directory walk, and
Hive-style partition pruning, which depends on the walk. Two decisions are made
explicitly rather than by default. The walk will not descend into symlinked
directories, because a visited-inode set is more machinery than the rule is worth
and "we do not follow directory symlinks" is something a user can reason about.
Partition columns will be declared as a table option rather than inferred from
the tree, for the same reason the column definition list is required rather than
inferred: a wrong guess silently changes which rows a query returns.

CASCADE_ENCODING_PLAN.md disagrees with the roadmap's "low to medium effort" and
says why. The roadmap item bundles two independent ideas. Cascading (encode one
scheme's output with another) is where the size win is, and it changes the on-disk
format: a chunk header has to express a chain, which means new codes or a chain
descriptor, a corrupt-file guard on the chain length, and a decision about old
builds reading new files. Sampling is a write-throughput optimization whose value
depends on what selection costs today, which has never been measured. So step 1 is
to measure it on the 6M-row bench and let the number decide whether the sampling
half gets built at all. Finding out it is not worth it is a legitimate and much
cheaper outcome than building it first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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