orionbelt converter: dimension round-trip fidelity (name restoration, N-per-column)#223
Open
ralfbecher wants to merge 1 commit into
Open
orionbelt converter: dimension round-trip fidelity (name restoration, N-per-column)#223ralfbecher wants to merge 1 commit into
ralfbecher wants to merge 1 commit into
Conversation
Mirrors two further canonical converter fixes on top of apache#206 (round-trip robustness): - ralforion/orionbelt-semantic-layer#228: restore the OBML dimension name across the round trip. The OSI field name is the physical column code, so a round trip renamed every dimension to its code and could trip the collision fallback for names unique in the source. The name is preserved in an obml_dimension_name extension and restored on import, making the collision fallback (the space-qualified key from apache#206) genuinely foreign-OSI only. Non-string values are ignored so a foreign payload cannot crash the converter on an unhashable key. - ralforion/orionbelt-semantic-layer#229: preserve N dimensions over one column. OBML allows many dimensions on one column (grain variants, role playing); OSI is field-centric. Extras are preserved in an obml_extra_dimensions list extension with a fidelity warning (warn, not raise) and rebuilt on import. Both primary and extra dimensions carry their own synonyms and vendor extensions, with shape guards on the opaque extension data. Also adds the ASF license header to test_osi_converter_roundtrip_robustness.py, which was missing it. 177 converter tests pass; ruff clean.
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.
Follow-up to #206. Mirrors two further canonical converter fixes from ralfbecher/orionbelt-semantic-layer into
converters/orionbelt/. Both build on #206's_extract_dimensionswork, which is why they land now that #206 has merged.Restore the OBML dimension name (canonical #228)
The OSI field name is the physical column code, so a round trip renamed every dimension to its code and could trip #206's collision fallback for names that were unique in the source. The name is now preserved in an
obml_dimension_nameextension and restored on import, so the space-qualified collision fallback is genuinely foreign-OSI only - for an OBML-origin model it no longer fires (this is the concern @khush-bhatia raised on #206). Non-string values are ignored so a foreign payload cannot crash the converter on an unhashable dict key.Preserve N dimensions over one column (canonical #229)
OBML allows many dimensions on one column (grain variants, role-playing); OSI is field-centric (one dimension per field). The converter used to drop every dimension past the first, silently. Extras are now preserved in an
obml_extra_dimensionslist extension with a fidelity warning (warn, not raise) and rebuilt on import. Both primary and extra dimensions carry their own synonyms and vendor extensions, with shape guards on the opaque extension data.Also
Adds the ASF license header to
test_osi_converter_roundtrip_robustness.py, which was missing it (the sibling converter files have it).Tests
tests/test_osi_converter_roundtrip_robustness.py(dimension name restoration, N-per-column, synonym/extension preservation, malformed-payload guards) plus updatedtest_osi_converter_properties.py. 177 converter tests pass; ruff clean.Canonical changes: ralforion/orionbelt-semantic-layer#228, #229 (both merged).