The Ancestry_matchDetail table holds a small set of supplemental per-match facts that come from a match’s detail/compare page rather than from the match list: the number of shared DNA segments, the year the match became a member, and the user ID of the account that administers the match’s test. There is one row per testGuid + matchGuid pair (the kit you are viewing from, and the match).
Ancestry_matchGroups. It is read by the report and export queries as a fallback source — sharedSegments is used only when matchGroups.sharedSegment is missing, and matchTestAdminUcdmId is used to build the match’s profile URL when no managed user id is available from Ancestry_MatchProfile. Older databases are the main place these rows are found.| Column | Type | Source | Description |
|---|---|---|---|
| Id | int (PK) | Auto | Auto-incrementing primary key |
| testGuid | string | Match Compare | The test kit GUID (your kit). Uppercased during migration. |
| matchGuid | string | Match Compare | The matched person’s GUID. Uppercased during migration. A unique index covers testGuid + matchGuid. |
| sharedSegments | int | Match Compare | Number of shared DNA segments for this match. Used in reports as a fallback when matchGroups.sharedSegment is 0. |
| matchMemberSinceYear | string | Match Compare | Year the match became an A* member. Exported as the “member since” value. |
| matchTestAdminUcdmId | string | Match Compare | User ID of the account that administers the match’s test. Used to build the match’s profile URL when no managed user id is present in Ancestry_MatchProfile. |
| created_date | string | App | When the row was created |
| sync | string | App | Sync status flag. Set to “0” on insert. |
Rows are written by the match-detail insert routine, which is fed from a match’s detail/compare page. The write is insert-once: before inserting, it checks whether a row already exists for the same testGuid + matchGuid pair, and if one does it returns without writing. A new row is given sync = “0” and inserted. Existing rows are therefore never updated in place by this routine — the first value captured for a match is the value that stays.
Ancestry_matchGroups.sharedSegment from the relationship data, so this table is most useful for older databases where the segment count and member-since year were stored here. The report queries account for both cases by reading from matchGroups first and falling back to matchDetail.testGuid + matchGuid; its sharedSegment takes precedence over this table’s sharedSegments.managedUcdmid takes precedence over this table’s matchTestAdminUcdmId when building the profile URL.