Skip to content

fix(ingestion): write the raw zone as parquet - #851

Merged
jirhiker merged 1 commit into
stagingfrom
fix/raw-zone-parquet
Aug 19, 2026
Merged

fix(ingestion): write the raw zone as parquet#851
jirhiker merged 1 commit into
stagingfrom
fix/raw-zone-parquet

Conversation

@jirhiker

Copy link
Copy Markdown
Member

The first live materialization worked — data landed date-partitioned in the raw
zone — but as .jsonl.gz, not parquet:

vanessen_locations/year=2026/month=08/day=19/1787120193.080524.d01c205480.jsonl.gz
vanessen_readings/year=2026/month=08/day=19/1787113792.5012527.ee8f58c27b.jsonl.gz

dlt's filesystem destination writes gzipped JSONL unless given a
loader_file_format, and it never was — while the plan, docs/sources/san_acacia.md,
and Mode B replay all assume parquet. pyarrow was already a dependency, added
for exactly this.

Why it matters

Replay reads the raw zone filtered on event time. A columnar format with real
types lets it read a window without decompressing and parsing every record, and
it round-trips the distinction between a null and a missing field more reliably
than JSONL.

Existing objects

Stay JSONL. dlt reads both formats, so they need no migration — but a replay
spanning the boundary reads two formats, which is now noted in the source doc
rather than left to be discovered by whoever writes 4.3.

81 tests pass.

🤖 Generated with Claude Code

The first live materialization landed .jsonl.gz. dlt's filesystem destination
writes gzipped JSONL unless given a loader_file_format, and it never was --
while the plan, the source doc, and Mode B replay all assume parquet.

Replay reads the raw zone filtered on event time. A columnar format with real
types lets it read a window without decompressing and parsing every record, and
it round-trips the difference between a null and a missing field more reliably
than JSONL. pyarrow was already a dependency, added for this.

Objects already written stay JSONL. dlt reads both, so they need no migration,
but a replay spanning the boundary reads two formats -- noted in the source doc
rather than left to be discovered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Coverage

79.83% total — gate is 75%.

Coverage for the Python files changed in this PR
Name Stmts Miss Cover Missing
automated_ingestion/sources/san_acacia/dlt_pipeline.py 43 0 100%
automated_ingestion/sources/san_acacia/ingest.py 34 24 29% 34-36, 45-58, 75-105, 118-125
TOTAL 77 24 69%

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Your pull request is automatically being deployed to Dagster Cloud.

Location Status Link Updated
ocotillo-automated-ingestion View in Cloud Aug 19, 2026 at 06:29 AM (UTC)

@jirhiker
jirhiker merged commit 9aa0eac into staging Aug 19, 2026
10 checks passed
@jirhiker
jirhiker deleted the fix/raw-zone-parquet branch August 19, 2026 06:28
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