Overview
After an identity graph runs, Identity Resolution writes a set of output tables to your data warehouse. These tables represent the current state of your identity graph and are designed for downstream use across analytics, activation, and Customer Studio.
Your marketing team can use these tables for paid campaigns, your sales team for deduplicating outreach efforts, and your data science team for fraud detection.
Where identity outputs live
Identity Resolution writes output tables to your warehouse, typically in the hightouch_planner schema (or a schema override configured for your source).
These tables act as stable integration points. You can use them to:
- Query them directly in SQL
- Register them as dbt sources
- Use them to build analytics models or views
- Use them as the foundation for Customer Studio schemas
- Sync from them to downstream tools
While the hightouch_planner schema is generally managed internally by Hightouch, the Identity Resolution output tables described on this page are intentionally created for your use. You can safely query them directly, reference them in downstream ETL pipelines, or register them as dbt sources. For long-term stability, we recommend creating a view or derived table that references these outputs rather than transforming them in place.
Core output tables
Each identity graph produces the following output tables.
Resolved table
<output_prefix>_resolved
This table maps every input row used in Identity Resolution to a resolved identity.
Each row represents a single input record and includes:
ht_id: the resolved identity IDsource: the originating modelprimary_key: the primary key value of the input recordlatest_timestamp: the most recent timestamp for that record
Use this table when you need to:
- Join raw source data to resolved identities
- Aggregate metrics at the identity level
- Trace how specific records were grouped into profiles
Example output
| HT_ID | SOURCE | PRIMARY_KEY | LATEST_TIMESTAMP |
|---|---|---|---|
| ht1 | earl-s-ecommerce-events | 1 | 2024-08-01 12:00:00.000 |
| ht1 | earl-s-ecommerce-events | 2 | 2024-08-01 12:05:00.000 |
| ht1 | earl-s-ecommerce-events | 3 | 2024-08-01 12:10:00.000 |
| ht1 | earl-s-ecommerce-events | 4 | 2024-08-01 12:15:00.000 |
| ht5 | earl-s-ecommerce-events | 5 | 2024-08-01 12:20:00.000 |
| ht5 | earl-s-ecommerce-events | 6 | 2024-08-01 12:25:00.000 |
| ht5 | earl-s-ecommerce-events | 7 | 2024-08-01 12:30:00.000 |
| ht5 | earl-s-ecommerce-events | 8 | 2024-08-01 12:35:00.000 |
| ht9 | earl-s-ecommerce-events | 9 | 2024-08-01 12:40:00.000 |
| ht9 | earl-s-ecommerce-events | 10 | 2024-08-01 12:45:00.000 |
Resolved identifiers table
<output_prefix>_resolved_identifiers
This table contains all identifier values associated with each resolved identity.
Each row represents a single identifier value observed for that identity, along with when and where it appeared.
Each row includes:
ht_id: the resolved identity IDidentifier: the identifier type (for example,emailoruser_id)value: the identifier valuefirst_timestampandlast_timestamp: when the value was first and last seencount: how many times the value appeared across input records- Lineage fields identifying the originating record and model (
initial_row_pk,initial_row_source)
Use this table when you need to:
- Retrieve the full set of identifiers associated with an identity
- Sync multiple identifiers per identity to downstream destinations
- Inspect how specific identifiers contributed to identity resolution
Example output
| HT_ID | IDENTIFIER | VALUE | INITIAL_ROW_PK | INITIAL_ROW_SOURCE | FIRST_TIMESTAMP | LAST_TIMESTAMP | COUNT |
|---|---|---|---|---|---|---|---|
| ht1 | user_id | user_003 | 4 | earl-s-ecommerce-events | 2024-08-01 12:15:00.000 | 2024-08-01 12:15:00.000 | 1 |
| ht1 | anonymous_id | anon_125 | 1 | earl-s-ecommerce-events | 2024-08-01 12:00:00.000 | 2024-08-01 12:15:00.000 | 4 |
| ht5 | user_id | user_004 | 8 | earl-s-ecommerce-events | 2024-08-01 12:35:00.000 | 2024-08-01 12:35:00.000 | 1 |
| ht5 | anonymous_id | anon_126 | 5 | earl-s-ecommerce-events | 2024-08-01 12:20:00.000 | 2024-08-01 12:35:00.000 | 4 |
| ht9 | anonymous_id | anon_127 | 9 | earl-s-ecommerce-events | 2024-08-01 12:40:00.000 | 2024-08-01 12:45:00.000 | 2 |
Unresolved table
<output_prefix>_unresolved
This table contains input rows that could not be processed, most commonly because primary key values were not unique within the originating model.
Use this table to:
- Debug data quality issues
- Identify records excluded from identity resolution
Golden Record table
<output_prefix>_golden_records
If you enable Golden Record, Identity Resolution produces a flattened table with one row per resolved identity. This table selects a single, trusted value for each field based on the survivorship rules you configure, creating a marketer-friendly profile representation for downstream use.
Each row includes:
ht_id, which uniquely identifies the resolved identity- One column per field configured in Golden Record
- Values selected using survivorship rules such as recency, frequency, source priority, or array
Golden Record is the most common starting point for analytics and activation because it provides a clean, one-row-per-identity view with canonical fields.
Example row
Each row corresponds to a single HT_ID (one identity). For example, a row might look like:
{
"ht_id": "ht1",
"most_recent_email": "user@example.com", -- using most recent survivorship
"all_phone_numbers": ["123-456-7890", "098-765-4321"], -- using array survivorship
"primary_user_id": "user_123" -- using source priority survivorship
}
For configuration and survivorship rules, see Golden Record.
State tables
Identity Resolution also creates internal state tables—typically prefixed with IDR_... or IDR_BACKUP_...—to support incremental processing and maintain graph consistency in the same schema.
These tables are managed by Hightouch and should not be queried or modified directly.
Only the output tables (for example, <output_prefix>_resolved, <output_prefix>_resolved_identifiers, <output_prefix>_unresolved, and <output_prefix>_golden_records) are intended for external use. Treat state tables as internal implementation details.
Common usage patterns
Analyze data at the identity level
A common pattern is to aggregate activity or metrics by ht_id rather than by raw records.
You can do this by joining source tables (such as events or transactions) to the resolved table and grouping by ht_id. This lets you analyze behavior, engagement, or revenue at the resolved identity level instead of the raw‑record level.
Use Golden Record for analytics and reporting
Golden Record is typically used as the primary table for analytics and Customer 360‑style views.
Patterns include:
- Starting from
<output_prefix>_golden_recordsas the base table - Joining transactional data (such as orders or subscriptions) using
ht_id - Aggregating metrics like lifetime value per resolved identity
- Using Golden Record fields (such as primary email) as trusted attributes
Retrieve identifiers for activation
When syncing to destinations that support multiple identifiers per user (such as ad platforms), you may want access to all identifier values for each resolved identity.
Use <output_prefix>_resolved_identifiers to retrieve and group identifier values by ht_id. This supports sending multiple emails, phone numbers, or other identifiers per identity when required by the destination.
Using identity data in Customer Studio
If you use Customer Studio, identity outputs are typically used in one of two ways:
-
Golden Record as the parent model
A unified, one‑row‑per‑identity table that marketers can build audiences and traits from directly. -
Resolved records as related models
Events or transactions roll up to identities usinght_id.
This structure lets you build audiences, traits, and insights on unified customer data without writing SQL.
Sync and activation guidance
When syncing identity data to downstream tools:
- Prefer syncing from Golden Record when the destination expects one record per person.
- Use resolved identifiers when a destination supports multiple identifiers.
- Treat
ht_idas an internal reference, not a customer‑facing identifier; it has no inherent meaning beyond grouping records into an identity.
Always structure syncs based on the destination’s data model and requirements.