Repository navigation
Conversation
christianeu-db
left a comment
There was a problem hiding this comment.
Thanks for this - the mapping looks correct, and the defensive reverse path (duplicate/malformed extension handling) and sort_keys serialization are nice.
My main concern is the test dependency. dbt-duckdb==1.11.0 pulls the full dbt Core tree into the lockfile (~700 lines, 37 packages) and gates the PR on a pending dev@ approval - all to drive one round-trip assertion. Could we drop the dependency and the real-dbt E2E, and cover the round-trip with fixtures? That removes the whole lock diff and the approval gate.
Worth noting #378 fixes the same issue (#303) with that fixture-based approach, no new dependencies. Since both PRs are converging on the same DBT custom-extension mechanism, it might be worth you and @georgea-tk coordinating on a single version - #615's validation and docs plus #378's lighter footprint would make a strong combined PR.
Summary
Preserve non-empty dbt
config.metawhen converting between dbt MetricFlow semantic manifests and Ossie documents. The converter stores each metadata object in aDBTcustom extension on its matching dataset, field, or metric, and restores it during reverse conversion. Empty metadata is omitted; malformed or duplicateDBTextensions are rejected with clear errors.The default dbt converter test suite includes a real-dbt E2E: it runs
dbt parse, reads the generated semantic manifest, invokes theossie-dbtCLI, and verifies metadata through reverse conversion. The test uses the DuckDB adapter and needs no credentials or external database.Related Issues
Fixes apache/ossie-converters#42
Verification
uv run --frozen dbt --version— dbt Core 1.12.6, DuckDB adapter 1.11.0uv run --frozen pytest -q— 181 passed, 5 snapshots passed, 0 skippeduv lock --checkandgit diff --check— passedChecklist
dbt-duckdb==1.11.0— requested via[email protected]on 2026-10-20; approval is pendingSpec, ontology, validation package, examples, and contributor workflow are unchanged. No third-party source code is vendored.