For the complete documentation index, see llms.txt. This page is also available as Markdown.

Data Entity Groups & Domains

Data Entity Groups + the Domain framing — logical containers for related entities, how the Domain flag surfaces them on the Catalog Overview, and the relationship to ML experiments.

A Data Entity Group (DEG) is the platform's logical-grouping primitive — a catalog-level container that gathers related data entities (datasets, transformers, quality tests, consumers) under one umbrella with their own metadata, owners, tags, and terms. A Domain is a particular use of a DEG: a DEG flagged as a domain surfaces in the Catalog Overview home page's Domains section as a top-level discovery surface.

This page covers both framings — DEGs as the underlying primitive, and Domains as the operator-flag use of them.

What a DEG is

Create groups to gather similar entities (datasets, transformers, quality tests, etc.). Each group can be enriched with specific metadata, owners, and terms.

Example. An organisation has ingested metadata related to its finances into the ODD Platform. All the entities are united into the Finance Namespace by default. To categorise entities, one creates Revenue and Payrolls DEGs.

A DEG is itself a Data Entity (of type DATA_ENTITY_GROUP) — it has a detail page, an ODDRN, and participates in lineage (Group lineage returns the union of the group's children's lineage).

The Domain framing

Flagging a DEG as a domain unlocks one extra surface: the Catalog Overview page renders a Domains section listing all domain-flagged DEGs as quick-jump tiles. This makes domain-flagged DEGs the platform's first-class discovery axis on the home page.

Operationally:

  1. Create or open a DEG.

  2. Use the DEG's edit surface to flag it as a domain.

  3. The DEG now appears on the Catalog Overview's Domains section (which is conditional — the section appears only when at least one domain-flagged DEG exists).

The Domains section is also reachable through the Search Groups facet, where domain DEGs participate alongside non-domain DEGs.

DEG metadata

A DEG carries the same metadata model as any other Data Entity — owners, tags, terms, descriptions, statuses — at the group level. The convention is:

  • Owners — set on the DEG to mark domain-stewardship at the group level instead of duplicating per-child.

  • Tags — applied at the DEG level surface the group on Tag-faceted searches.

  • Terms — link glossary terms to the DEG to capture meaning.

  • Description — narrative authoring describing what the group represents.

Children of the DEG keep their own metadata; the DEG-level metadata supplements it rather than replacing it.

Relationship to ML Experiments

In ODD, an ML experiment is a Data Entity Group of class ML_EXPERIMENT that collects the entities produced by a training run — input datasets, feature tables, training jobs, model instances, and resulting model artifacts — into one logical container. Lineage, ownership, tags, and alerts follow through at the experiment level instead of being scattered across each child entity.

ML experiments are DEGs of a particular shape — the same primitive, used for a specific workflow.

ML experiments in ODD are a catalog view over the assets that participated in the run. The platform does not track metrics, compare runs, or select a "best" model — it has no experiment-tracking UI or API of its own. For tracking, keep using MLflow, Weights & Biases, Comet, or your tool of choice, and push the resulting entities (datasets, models, runs) into ODD through a push adapter or the ODD Specification so the experiment and its lineage are browsable alongside the rest of your data platform.

Each experiment's training-run inputs and outputs participate in the catalog-wide lineage graph — an operator opening an ML experiment's Lineage tab sees its dataset / model / run-level edges alongside the rest of the data platform.

Managing DEG Membership

Membership of a manually-created DEG is mutated through two Data Entity controller endpoints; the surface is bound to the child entity, not the parent group.

Method
Path
Permission

POST

/api/dataentities/{data_entity_id}/data_entity_group

DATA_ENTITY_ADD_TO_GROUP

DELETE

/api/dataentities/{data_entity_id}/data_entity_group/{group_id}

DATA_ENTITY_DELETE_FROM_GROUP

Both permissions are scoped against the child data_entity_id in the URL — the platform's authorisation rules do not consult the parent DEG. A caller holding DATA_ENTITY_ADD_TO_GROUP against entity X can place X into any manually-created DEG in the catalog, regardless of who owns that DEG.

A few smaller behaviours worth knowing before scripting DEG membership:

  • The optional data_entity_group_id parameter is not validated. Missing or malformed values produce the generic id null error message rather than a typed BadRequest. Direct API callers should defensively validate the parameter before submitting.

  • Empty DEGs persist after the last member is removed. Deleting the only member of a DEG leaves an empty group entity in the catalog — there is no automatic cleanup. Operators retiring a DEG must explicitly delete it through the DEG's own entity-detail surface after emptying its membership.

  • Under auth.type=DISABLED, both endpoints are reachable anonymously. The membership endpoints inherit the platform's DISABLED-mode no-auth posture (see DISABLED authentication). Don't run DISABLED in production if DEG membership matters for organisational boundaries.

  • The 400 response on POST conflates three failure modes. "Entity already in DEG", "target is not a manually-created DEG", and "invalid request body shape" all produce the same generic 400 with the same human-readable message. Operators debugging a failing POST should check the entity's current membership first (most common cause), then the target's type (must be a manually-created DEG, not an ingested one), then the request body shape.

Group lineage

The dedicated Group lineage endpoint returns the lineage graph for the DEG's children, not the DEG itself. This is what an operator usually wants when reasoning about a domain or pipeline group — "what does the Finance domain depend on, and what depends on it?" is a question about the union of the children's edges.

Where to next

Last updated