Repository navigation
feat(hoglake): write zstd-3 parquet by default (HOGLAKE_COMPRESSION) - #155
Merged
Merged
Conversation
pyhoglake's default codec is pyarrow's SNAPPY, ~4x larger than zstd-3 on prod-us events, and objects at or over the 512 MiB compaction target are never rewritten. millpond now always passes a codec: HOGLAKE_COMPRESSION (default zstd) and HOGLAKE_COMPRESSION_LEVEL (default 3 for zstd). `snappy` reproduces the previous bytes. config.load() validates through pyhoglake.parquet_write_options, so a bad value or a pyhoglake too old to take a codec fails the pod at start rather than on its first flush. The codec is logged at startup and recorded as codec= in every snapshot message. Requires pyhoglake 1.4.3.
6 tasks
pyhoglake 1.4.4 carries the parquet codec keywords and parquet_write_options this branch calls. It requires pyarrow>=26, which pyducklake (<26 through 1.0.18) blocked, and pyducklake 1.0.19 moved to duckdb==1.5.6 against millpond's deliberate 1.5.5 pin. Nothing in millpond imports pyducklake; it was only a lockstep canary. Drop it; the DuckLake build stays guarded by test_ducklake_pin.py and the Dockerfile SHA layer. Cross-repo follow-up in #156. pyarrow 23.0.1 -> 26.0.0, pyhoglake 1.4.0 -> 1.4.4, duckdb unchanged.
jghoman
marked this pull request as ready for review
October 23, 2026 17:31
bill-ph
approved these changes
Oct 23, 2026
Contributor
There was a problem hiding this comment.
Reviewed the PR description, full diff, and existing discussion at ba921e2. Checked configuration defaults and validation, codec propagation into parquet preparation and snapshot messages, retry/liveness interactions, dependency and lockfile changes, and unit/integration test coverage. Also checked for overengineering and scope creep. Tests, builds, and linters were not run, as requested.
No issues found.
— Robo Bill v2 (gpt-6.1-sol, high reasoning)
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.
Dependencies
parquet_write_options, pyhoglake: let writers choose the parquet codec (default unchanged: SNAPPY) hoglake#435). Brings pyarrow 23.0.1 → 26.0.0.pyducklake. Nothing imports it; it was a lockstep canary for the duckdb pin. pyducklake ≤ 1.0.18 capped pyarrow < 26, and 1.0.19 moved toduckdb==1.5.6against millpond's deliberate 1.5.5 pin. The DuckLake build stays guarded bytest_ducklake_pin.pyand the Dockerfile SHA layer. DuckDB unchanged at 1.5.5. Cross-repo cleanup: DuckDB/DuckLake version policy across millpond, viaduck, pyducklake, pyhoglake during the DuckLake sunset #156.Why
pyhoglake's default codec is pyarrow's SNAPPY. ~97% of prod-us
ingest.events_rawbytes are SNAPPY (480-object sample). One 413K-row prod-us slice: snappy 1,138 MB, zstd-3 281 MB. Daytime events objects (~560-620 MiB) sit above the 512 MiB compaction target, so their codec is permanent.What
HOGLAKE_COMPRESSION(defaultzstd) andHOGLAKE_COMPRESSION_LEVEL(default3for zstd), passed to everyprepare_append_tables.snappyreproduces the previous bytes (rollback).config.load()validates throughpyhoglake.parquet_write_options, not a copy of its rules: zstd 1-9, snappy, none. Errors name the env vars.codec=in every snapshot message.Rollout notes
events_rawobjects become compaction candidates for the first time. Estimate (unmeasured): +190-380 groups/h on prod-us._PREPARE_ALLOWANCE_S(20 s); the liveness model does not yet charge codec or level.Tests
prepare_append_tablesand the snapshot message; installed-pyhoglake signature guard.codec=.