Conversation
Unity Catalog Delta column-mapped struct fields carry ':' inside the field name itself (e.g. `baselineproportions:1:...:bigint`), which broke ColumnTypeParser._parse_struct_fields_string because it required each field to split into exactly name:type. Split on the last top-level ':' instead: a field type never contains a top-level colon (colons only appear inside bracketed types, which the split protects), so the last segment is the type and the rest is the name. Fixes #29996 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
Code Review ✅ ApprovedUpdates OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
🟡 Playwright Results — all passed (28 flaky)✅ 4525 passed · ❌ 0 failed · 🟡 28 flaky · ⏭️ 95 skipped
🟡 28 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
|
) Unity Catalog Delta column-mapped struct fields carry ':' inside the field name itself (e.g. `baselineproportions:1:...:bigint`), which broke ColumnTypeParser._parse_struct_fields_string because it required each field to split into exactly name:type. Split on the last top-level ':' instead: a field type never contains a top-level colon (colons only appear inside bracketed types, which the split protects), so the last segment is the type and the rest is the name. Fixes #29996 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>



Describe your changes:
Fixes #29996
I fixed
ColumnTypeParser._parse_struct_fields_stringso it splits each struct field on the last top-level:instead of requiring exactlyname:type, because Unity Catalog Delta column-mapped struct fields carry:inside the field name itself (e.g.struct<baselineproportions:1:behavioral_segment_search_for_dm:bigint>) and previously crashed ingestion with aValueError. A field type never contains a top-level colon (colons only appear inside bracketed types, which the split already protects), so the last segment is unambiguously the type and everything before it is the name.Type of change:
High-level design:
N/A — small change.
Tests:
Use cases covered
expected format is: 'field_name:field_type'.Unit tests
ingestion/tests/unit/test_column_type_parser.py— the exact issue string, backtick-quoted colon names, mixed/nested fields, and a negative no-colon case.Backend integration tests
Ingestion integration tests
Playwright (UI) tests
Manual testing performed
events STRUCT<+""+baselineproportions:1:behavioral_segment_search_for_dm+""+: BIGINT>.ValueError(exit 1); after the fix both columns parse cleanly (exit 0).make-equivalent unit run:pytest ingestion/tests/unit/test_column_type_parser.py→ 8 passed;ruff check/ruff formatclean.UI screen recording / screenshots:
Not applicable.
Checklist:
Fixes <issue-number>: <short explanation>Fixes #<issue-number>above.Greptile Summary
This PR allows Delta struct field names to contain colons. The main changes are:
Confidence Score: 5/5
This looks safe to merge.
Important Files Changed
Reviews (1): Last reviewed commit: "fix(ingestion): parse Delta struct field..." | Re-trigger Greptile
Context used (3)