feat(converters): add Ataccama ONE → OSI catalog importer#174
Open
carabaestlein wants to merge 4 commits into
Open
feat(converters): add Ataccama ONE → OSI catalog importer#174carabaestlein wants to merge 4 commits into
carabaestlein wants to merge 4 commits into
Conversation
Import selected Ataccama ONE catalog items into an OSI semantic model via the public Catalog REST API (OAuth2 client-credentials auth, cursor pagination). - CatalogItem -> dataset; CatalogAttribute -> field (quoted ANSI_SQL identifier) - business terms -> ai_context; governance/DQ/source URNs -> ATACCAMA custom_extensions - rich-text descriptions flattened to plain text; is_time inferred from DATE/DATETIME - CLI `ataccama-to-osi`, scoped by explicit catalog-item URNs - import-only: the public Catalog API cannot create catalog items/attributes, so OSI -> Ataccama export is out of scope (documented in the README) - tests run offline against a sanitized fixture and validate output against the OSI schema vendor_name is a free-form string per the spec, so no core-spec changes are required. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fetch the latest DQ results (each item's primary monitor) and attach them to the ATACCAMA custom extensions: - dataset level: overall + per-dimension quality (passed/failed + derived pass_rate_pct) plus the DQ results link - field level: per-attribute quality DQ is fetched by default; `--no-dq` skips the calls. `pass_rate_pct` is derived from the raw passed/failed counts and is not presented as Ataccama's official score (the Data Trust Score/Index is not exposed by the public APIs). Rebuilds the test fixture around BANK_TRANSACTIONS + aggregation (both carry DQ results), with all tenant, host, URN, and personal identifiers sanitized to synthetic values. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…t-in AI warnings - Add the monitor's overall DQ threshold to the dataset dq block as `threshold_pct` + `below_threshold` (the pass/fail bar shown in Ataccama), fetched from the monitor-config endpoint; omitted when no threshold is configured. - Always report `active_findings` (0 = no open findings) so the clean state is explicit. - Opt-in `--dq-ai-warnings`: append a plain-language DQ caveat to `ai_context.instructions` for datasets Ataccama flags as below quality — below its configured threshold or with active findings. Ataccama is the sole source of truth: the converter never applies a threshold of its own, so items without a configured threshold (and columns) are never flagged. - Reword `pass_rate_pct`: it is Ataccama's `overallQuality` as a percentage (the API returns counts, not a preformatted score), not a custom "derived" metric. - README: clarify DQ lives inside the single ATACCAMA extension's `data`, document the threshold/findings fields and the opt-in warnings. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jbonofre
self-requested a review
July 14, 2026 18:44
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.
Summary
Adds a new converter under
converters/ataccama/that imports metadata from Ataccama ONE into an OSI semantic model, using Ataccama's public Catalog and Data Quality REST APIs.Given one or more catalog items (selected by URN), it produces a single OSI semantic model: each catalog item becomes a dataset, each catalog attribute becomes a field, business terms become
ai_context, and data-quality results plus other governance metadata are attached asATACCAMAcustom extensions.What it does
ataccama-to-osi, scoped by explicit catalog-item URNs (--urnrepeatable, or--urns-file), since Ataccama catalogs hold tens of thousands of items and many are BI artifacts rather than tables.--no-dqskips.--dq-ai-warningsappends a plain-language caveat toai_contextfor datasets Ataccama flags as below quality.ataccama_to_osi(bundles, ...)returns an OSI document dict.Mapping
CatalogItemdataset(name de-duplicated if repeated)CatalogItem.locations+ namedataset.source(best-effort dotted namespace)CatalogItem.description(rich text)dataset.description(flattened to plain text)Termsai_context(synonyms+instructions)CatalogAttributefield(name → quotedANSI_SQLidentifier)dataType∈ {DATE, DATETIME, TIMESTAMP, TIME}field.dimension.is_time = true(inferred)custom_extensions(vendor_name: ATACCAMA) →data.dqcustom_extensions(vendor_name: ATACCAMA) →data.dqdataType,columnType, connection/source/stewardship/monitorcustom_extensions(vendor_name: ATACCAMA) →dataEvery dataset and field carries a single
ATACCAMAcustom extension;dq,attribute_urn, etc. are keys inside itsdataJSON string.Data quality
DQ results (from the DQ API's latest processing on each item's primary monitor) are included by default:
passed/failed,pass_rate_pct,threshold_pct+below_threshold(the monitor's configured bar),active_findings(0 = none open), per-dimension breakdown, and the DQ results link.passed/failed/pass_rate_pct.Opt-in warnings (
--dq-ai-warnings): appends a caveat to a dataset'sai_contextso any OSI consumer (not just tools that parse the vendor extension) is told to treat low-quality data with caution.Scope & intentional deviations from the converter guide
Ataccama's APIs are a catalog/governance/DQ surface, while OSI is an analytics semantic
model, so this converter differs from
converters/index.mdin three deliberate ways:PATCHdescription/stewardship/aliases on existing items — it cannot create items, attributes, or relationships — so a faithful OSI → Ataccama export isn't possible.vendor_nameis a free-form string percore-spec/spec.md, soATACCAMAvalidates without touching the spec. This keeps the PR tooling-only.Known limitations (see README)
source— only a folder hierarchy +originPathare available, notdatabase.schema.table;sourceis a best-effort dotted namespace, with the authoritative connection/source URNs preserved in extensions.Testing
core-spec/osi-schema.jsonplus unique-name and sqlglot SQL-parse checks.cd converters/ataccama uv sync --group dev uv run pytest