# 6500 Records of Customer Identity Resolution in 170 lines of YAML code

**URL:** <https://discourse.getdbt.com/t/6500-records-of-customer-identity-resolution-in-170-lines-of-yaml-code/20591>\
**Category:** Show and Tell\
**Tags:** best-practice, snowflake, dbt-core\
**Created:** [February 17, 2026, 5:25pm UTC](https://discourse.getdbt.com/t/6500-records-of-customer-identity-resolution-in-170-lines-of-yaml-code/20591 "2026-02-17T17:25:12Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dareesunday](https://sea2.discourse-cdn.com/flex020/user_avatar/discourse.getdbt.com/dareesunday/32/6235_2.png) [@dareesunday](https://discourse.getdbt.com/u/dareesunday)\
**Post date:** [February 17, 2026, 5:25pm UTC](https://discourse.getdbt.com/t/6500-records-of-customer-identity-resolution-in-170-lines-of-yaml-code/20591/1 "2026-02-17T17:25:12Z")

</div>

Hey all, I published a comparison of 3 approaches to customer identity resolution using the same dataset of 6,500 records:

1. Pure dbt SQL (5 models + macros, runs on DuckDB) - 45% merge rate
2. Splink + DuckDB - 66% merge rate
3. Kanoniv (YAML spec, Rust engine) - 63% merge rate

The dbt SQL version uses dbt seed to load CSVs, Jaro-Winkler scoring, and iterative label propagation for clustering. It’s a good reference for anyone who wants to see what hand-rolled identity resolution looks like in pure SQL.

Repo with all three + shared data:

> **[GitHub - dreynow/kanoniv-examples: Identity resolution: 3 approaches compared on the...](https://github.com/dreynow/kanoniv-examples)**
>
> Identity resolution: 3 approaches compared on the same dataset (dbt SQL, Splink, Kanoniv)

I also maintain a dbt package (dbt-kanoniv) for teams using the cloud version.
