Stewardship and data quality

What AWS Glue Data Quality measures and where it stops, and the data steward application that has no managed equivalent — its screens, its decision store, and how overrides survive reprocessing.

markdownexamplev197E8-77RAstage: buildtrust: officialservice: glueservice: auroraservice: opensearchservice: step-functionsservice: lambdaservice: eventbridgeinterface: architectureAWS Glue Data Quality DQDL rulesdata quality score and anomaly detectionquarantine of failing recordsdata steward console designmerge unmerge and override replaysteward decision storematch quality measurementreference data management gap

Created 21 Oct 2026 · Modified 23 Oct 2026 · 1 version

Data quality and stewardship are the two halves of governance. AWS supplies a capable managed service for the first and nothing for the second. This document covers what Glue Data Quality measures, precisely where it stops, and the shape of the steward application you must build.

AWS Glue Data Quality

AWS describes it as a service that "allows you to measure and monitor the quality of your data so that you can make good business decisions. Built on top of the open-source DeeQu [sic] framework, AWS Glue Data Quality provides a managed, serverless experience." Rules are written in DQDL, "a domain specific language that you use to define data quality rules", with "25+ out-of-the-box DQ rules to start from".

The quality score is defined simply: "The percentage of data quality rules that pass (result in true) when you evaluate a ruleset." That gives a single trackable number per source per load, which is the metric a steward actually manages.

The two entry points differ, and the difference decides your design

"There are two entry points for AWS Glue Data Quality: the AWS Glue Data Catalog and AWS Glue ETL jobs." They are not equivalent, and the asymmetry is the single most practical thing to know:

FeatureData Catalog entry pointETL jobs entry point
Data Quality rule recommendationsSupportedNot supported
Author and run DQDL rulesSupportedSupported
Identifying records that failed checksNot supportedSupported
Auto scalingNot supportedSupported
ML-based anomaly detectionSupportedSupported
EventBridge and CloudWatch integrationSupportedSupported
Incremental data qualityPushdown predicatesGlue bookmarks

Read rows one and three together. Recommendations come from the catalog; the identity of failing rows comes from ETL. So the sensible pattern is to use the catalog entry point once, at design time, to have AWS propose a starting ruleset — "AWS Glue Data Quality quickly analyzes your data and creates data quality rules for you" — then move those rules into the ETL job, where you can quarantine the rows that failed. AWS's own framing supports this: the ETL entry point "lets you perform proactive data quality tasks. Proactive tasks help you identify and filter out bad data before you load a data set into your data lake."

Rules that matter for a healthcare master

DQDL rule types are the enforcement point for everything matching depends on. The ones that earn their place here:

ConcernRule shapeWhy it protects matching
Identifier completenessCompleteness on MRN and assigning-system columnsA null system URI gives false links
Identifier formatColumnValues matching an NPI or MRN patternMalformed identifiers match nothing
Uniqueness within sourceUniqueness on the source primary keyDuplicate Unique IDs are rejected
Birth date plausibilityColumnValues within a sane date rangeA default date becomes a mass false match
Referential integrityReferential integrity between two datasetsOrphan provider references
Volume sanityRowCount, or a dynamic rule on a trailing averageA truncated feed shrinks the master
FreshnessFileFreshness on the landed objectsA stalled feed looks like deletions

Two capabilities worth naming. Anomaly detection is ML-based and generally available — the release notes record "Anomaly Detection and Dynamic Rules are now generally available" in August 2024 — and dynamic rules allow thresholds relative to history, such as a row count compared with an average of the last ten runs. That is the right tool for "this feed looks wrong today" without hand-maintained thresholds.

The limits, stated

  • "Data quality rules can't evaluate nested or list-type data sources." FHIR-shaped data is deeply

nested, so flatten before evaluating. This is a real pipeline stage, not a footnote.

  • 2,000 rules per ruleset; 65 KB per ruleset. Split by entity and source.
  • "there is a limit of 100,000 statistics per account, and these statistics will be retained for a

maximum of two years." Long-horizon quality trending needs your own store.

  • Billing is per DPU-hour at $0.44, with recommendation and evaluation tasks "provisioned with ... 2

DPUs with a 1 minute minimum billing duration", and anomaly detection at "1 DPU per statistic". Quality checks inside an ETL job carry no separate charge beyond the job's runtime.

What Glue Data Quality does not do

It measures and reports. It does not remediate, it does not route an exception to a human, and it does not track whether anyone acted. It emits to EventBridge and CloudWatch, which is the hook — but the queue, the assignment, the resolution and the audit of resolution are yours.

The steward application

This is the largest single gap in the pattern and the honest answer to why licensed MDM products still sell. No service cited in this set provides a steward workbench. Built properly it is months of work, and it is a PHI-handling application with its own authentication, authorisation and audit obligations.

Why a human is unavoidable

Both matchers produce assertions that need adjudication. Entity Resolution's ML matching returns match groups with "an associated confidence score of 0.0-1.0", which is precisely an invitation to a threshold and a review band. HealthLake's resource matching is explicit that review is the intended workflow: "Because matching is non-destructive, you review the resulting links and decide how to act on them." And it "does not apply priority ordering or conflict resolution between identifiers: any shared, non-placeholder identifier is enough to link two resources" — so a shared placeholder-like identifier that slipped past filtering produces links only a human will catch.

In healthcare the asymmetry of error is severe. A false merge joins two patients' clinical histories and is a patient-safety event. A false split is a care-coordination failure. Neither should be decided by a threshold alone.

The screens

ScreenPurpose
Review queueCandidate matches in the uncertainty band, prioritised by risk
Side-by-side compareTwo or more candidates, attribute by attribute, with source and date
Attribute overridePick a winning value per attribute, with a mandatory rationale
Merge and unmergeJoin or split masters; unmerge must be a first-class operation
SearchFind a master or source record by identifier, name or demographic
Quality exceptionsRows quarantined by Glue Data Quality, with assignment and resolution
Decision historyEvery decision on this master, by whom, when and why
Match tuningEffect of a proposed rule change against a labelled set, before deployment

Unmerge deserves emphasis because it is routinely under-built. A merge is easy; reversing one after six months of downstream propagation requires that you kept the pre-merge state and that every consumer can handle a master identifier splitting in two. Design the split event into the publish contract from the start.

Amazon OpenSearch Service is the right engine behind the search and queue screens: steward search is fuzzy, multi-field and latency-sensitive, which is not what Aurora is for. Treat it as what it is — a second full copy of patient demographics, in scope for the BAA, with its own encryption, fine-grained access control and snapshot obligations, and a requirement that merges, splits and amendments propagate into the index rather than leaving a stale name searchable. Lake Formation governs what a steward sees in the curated zone, with permissions "enforced using granular controls at the column, row, and cell-levels"; the console enforces its own row scoping on the master.

The decision store, and why it is an input

The critical design property: a steward decision must be an input to the next pipeline run, not a log of the last one. Bulk processing "re-processes all data for any new matches and updates to existing matches", and a steward's verdict is not part of that job's state. Without replay, the next run silently reverses human judgement — and in a clinical setting, re-merging two patients a clinician separated is an incident.

So the resolve stage runs in a fixed order:

  match output (S3)        steward_decision (Aurora)      survivorship rules (Aurora)
         |                          |                              |
         v                          v                              v
  +-------------------------------------------------------------------------+
  | 1. load match groups and match IDs                                      |
  | 2. resolve match IDs to master_id via the crosswalk                     |
  | 3. APPLY OVERRIDES: reject_match, merge, split   <- human wins          |
  | 4. evaluate survivorship per attribute on what remains                  |
  | 5. write master_attribute versions; bump master_entity.version          |
  | 6. emit change events to EventBridge                                    |
  +-------------------------------------------------------------------------+

Step 3 before step 4, always. The whole stage must be deterministic and idempotent: the same match output plus the same decision store must produce the same master, so that reprocessing is safe and a disputed value can be explained from stored inputs rather than from a log.

Measuring match quality

You cannot tune what you do not measure, and no service measures this for you. Build a labelled evaluation set — a few thousand record pairs adjudicated by humans — and run it on every rule change, reporting precision, recall and the volume landing in the review band. Be clear about what that set is: real patient pairs, so the evaluation harness is a PHI workload. It and the match tuning screen belong in the Data OU under production controls, not in a lower environment; only synthetic data goes to non-production. This is the artefact that makes a rule change a decision rather than a guess, and in healthcare it is also the evidence that the matching configuration was validated. Keep it versioned next to the rules.

Two levers the documentation hands you for the tuning itself. Rule order matters, because the default waterfall means "records matched at a higher rule level are excluded from subsequent rules", and AWS advises you "order your rules to find more precise matches first". And rule-based output carries the rule number, so "the rule number can demonstrate the precision of each match group such that rule one is more precise than rule two" — which lets you set a review threshold per rule rather than one threshold for everything.

The reference data gap

One further absence. A healthcare master depends on code sets that change on a published schedule: ICD-10-CM, SNOMED CT, RxNorm, NPI registry extracts, state licence files, postal reference data. Comprehend Medical links to some of these — and pins a version, naming "the 2021 version" of ICD-10-CM on its page — but nothing cited here manages the lifecycle of your own reference data: versioning, effective dating, approval and the re-evaluation of golden records when a code is retired. That is a modest but real build, and it is the kind of thing that is forgotten until the first annual code update breaks a survivorship rule.

Read this document as markdown — the same bytes an agent receives.