Output Tables

Understand the Final Identity Table, profile report, and other Identity Resolution outputs.

After running Identity Resolution, several outputs are written to your data warehouse. In this article, we'll explore each output and how to use them.

The following tables are created in the Output Dataset you specified in Settings:

TableNameDescription
Final Identity TableYour selection in SettingsOne row per unique identity with merged data
Matched Table_id_res_matched_{config_name}Maps source records to their unified identity
Profile Report_id_res_golden_profile_reportMatch statistics and metrics (shared across all configs)

The Final Identity Table is automatically added as a Dataset in GrowthLoop, making it available for Audiences, Journeys, and Exports.

Identity Dataset

Final Identity Table

The Final Identity Table is your unified customer view—one row per unique identity with the best available data merged from all sources.

Schema

The Final Identity Table includes:

ColumnDescription
primary_keyUnique identifier for this unified profile (the identity ID)
Your PII fieldsThe fields you mapped (email, phone, name, etc.)
📘

Note

The Final Identity Table contains only the columns you configured—there are no system-generated timestamp columns. Timestamps (_id_res_created_at, _id_res_updated_at) are available in the matched table if you need to track when records were processed.

Example

SELECT 
  primary_key,
  email,
  first_name,
  last_name,
  phone,
  postal_code
FROM your_dataset.final_identity_table
LIMIT 5;
primary_keyemailfirst_namelast_namephonepostal_code
abc123[email protected]JaneDoe555123456794105
def456[email protected]JohnSmith555987654310001
ghi789[email protected]AlexJohnsonNULL60601

Value Selection

When the same person exists in multiple sources with different values, the Final Identity Table uses data from the highest-precedence source that has a non-null value.

For example, if your sources have precedence:

  1. CRM (precedence 1)
  2. Email List (precedence 2)
  3. Orders (precedence 3)

And a customer has:

The Final Identity Table will have:

  • email = "[email protected]" (from CRM, highest precedence)
  • phone = "5551234567" (from Email List, since CRM is null)
📘

Note

Precedence is applied per-column, not per-record. Each column gets its value from the highest-precedence source that has a non-null value for that column.

Profile Report

The profile report stores metrics from each identity resolution run. Each run adds one row to this shared table.

Schema

ColumnDescription
report_idThe config name identifying this identity resolution
capture_dateDate of this run
source_records_total_countTotal records processed from all sources
source_records_matched_countRecords that matched at least one rule
source_records_notmatched_countRecords that didn't match any rule
golden_table_record_countNumber of unified profiles created
match_rulesJSON array of the rules used
match_rule_resultsJSON array with match counts per rule
golden_table_duplicate_email_countDuplicate emails in Final Identity Table (data quality flag)
golden_records_had_conflicting_data_countProfiles where sources had different values

Example Query

SELECT 
  report_id,
  capture_date,
  source_records_total_count,
  source_records_matched_count,
  golden_table_record_count,
  match_rule_results
FROM your_dataset._id_res_golden_profile_report
WHERE report_id = 'your_config_name'
ORDER BY capture_date DESC
LIMIT 1;

Matched Table

The matched table is an intermediate output showing which source records were grouped together and which rule matched them.

Schema

ColumnDescription
match_idThe unified identity this record belongs to
matched_by_ruleWhich rule number matched this record (NULL if unmatched)
Your PII fieldsThe fields you mapped (email, phone, name, etc.)
_id_res_primary_keyThe original primary key in the source
_id_res_source_nameWhich source this record came from
_id_res_created_atWhen this record was processed
_id_res_updated_atWhen this record was last updated

Example Query

Find all source records for a specific identity:

SELECT 
  _id_res_source_name,
  _id_res_primary_key,
  matched_by_rule,
  email,
  phone
FROM your_dataset._id_res_matched_yourconfig
WHERE match_id = 'abc123';
_id_res_source_name_id_res_primary_keymatched_by_ruleemailphone
CRMcrm_0011[email protected]NULL
Ordersord_56781[email protected]5551234567
Loyaltyloy_9992NULL5551234567

This shows that:

  • The CRM and Orders records matched via Rule 1 (likely email-based)
  • The Loyalty record matched via Rule 2 (likely phone-based)
  • All three now share the same match_id

Querying Your Outputs

Count Unique Identities

SELECT COUNT(DISTINCT primary_key) as total_identities
FROM your_dataset.final_identity_table;

Find Multi-Source Identities

Identities that appear in multiple sources:

SELECT 
  match_id,
  COUNT(DISTINCT _id_res_source_name) as source_count,
  ARRAY_AGG(DISTINCT _id_res_source_name) as sources
FROM your_dataset._id_res_matched_yourconfig
GROUP BY match_id
HAVING COUNT(DISTINCT _id_res_source_name) > 1
ORDER BY source_count DESC
LIMIT 10;

Match Rate by Source

SELECT 
  _id_res_source_name,
  COUNT(*) as total_records,
  COUNT(matched_by_rule) as matched_records,
  ROUND(100.0 * COUNT(matched_by_rule) / COUNT(*), 2) as match_rate
FROM your_dataset._id_res_matched_yourconfig
GROUP BY _id_res_source_name;

Unmatched Records

Records that didn't match any rule:

SELECT *
FROM your_dataset._id_res_matched_yourconfig
WHERE matched_by_rule IS NULL;

Questions or issues? Reach out to us at [email protected].