✔ PASS
Search & Retrieval
task_072_Q72_fuzzy_entity_resolution_dedup
Scaled: 1M+ Records
Ordered: Yes
Fuzzy Customer Entity Resolution across Disparate Data Sources
Candidate Latency (1M Rows)
2891.32 ms
(1.0x faster than golden)
Golden Latency (1M Rows)
2907.34 ms
DuckDB in-memory engine
Underlying Data Volume
5,000 rows
214.8 KiB across 2 tables
Evaluated Model
gemini-3.8-flash-low
Gen Latency: 12.2s
✔ Correctness Verified on 1M+ Records
Candidate SQL output matches ground truth golden query across all multiset rows and numeric tolerances (tol=1e-3). Zero data skew or anti-patterns detected on full dataset scale.
1. Analytical Significance & What It Means
Scenario & Frontier TrapBusiness Scenario & Problem
Merging CRM and billing databases requires linking customers with slight name and address variations (e.g. 'Robert Smith, 123 Main St' vs 'Bob Smith, 123 Main Street').
⚡ The Frontier Trap (Why LLMs Fail)
Pairwise fuzzy string matching over millions of records is computationally prohibitive without blocking/canopy clustering.
Prompt / User Request Given to Model
Merging CRM and billing databases requires linking customers with slight name and address variations (e.g. 'Robert Smith, 123 Main St' vs 'Bob Smith, 123 Main Street'). Execute the required analytical SQL calculation in DuckDB. Expected output columns: crm_id, crm_name, bill_id, billing_name, zip_code, name_similarity. Results should be ordered as specified.
2. Underlying Tables, Row Counts & Data Volume
2 Tables (5,000 rows • 214.8 KiB)Production-scale fixtures loaded into the isolated DuckDB sandbox with at least 1,000,000 records per table:
📊 billing_records
2,500 rows
107.4 KiB Data Volume
bill_id (INTEGER) name (VARCHAR) zip_code (VARCHAR)Data Preview (showing sample rows from 2,500 total rows):
| # | bill_id | name | zip_code |
|---|---|---|---|
| 1 | 101 | Bob Johnson | 94107 |
| 2 | 102 | Sara Williams | 10001 |
| 3 | 102 | Bob Johnson | 94107 |
| 4 | 103 | Sara Williams | 10001 |
| 5 | 104 | Bob Johnson | 94107 |
| 6 | 105 | Sara Williams | 10001 |
| 7 | 106 | Bob Johnson | 94107 |
| 8 | 107 | Sara Williams | 10001 |
| 9 | 108 | Bob Johnson | 94107 |
| 10 | 109 | Sara Williams | 10001 |
| 11 | 110 | Bob Johnson | 94107 |
| 12 | 111 | Sara Williams | 10001 |
| 13 | 112 | Bob Johnson | 94107 |
| 14 | 113 | Sara Williams | 10001 |
| 15 | 114 | Bob Johnson | 94107 |
📊 crm_records
2,500 rows
107.4 KiB Data Volume
crm_id (INTEGER) name (VARCHAR) zip_code (VARCHAR)Data Preview (showing sample rows from 2,500 total rows):
| # | crm_id | name | zip_code |
|---|---|---|---|
| 1 | 1 | Robert Johnson | 94107 |
| 2 | 2 | Sarah Williams | 10001 |
| 3 | 2 | Robert Johnson | 94107 |
| 4 | 3 | Sarah Williams | 10001 |
| 5 | 4 | Robert Johnson | 94107 |
| 6 | 5 | Sarah Williams | 10001 |
| 7 | 6 | Robert Johnson | 94107 |
| 8 | 7 | Sarah Williams | 10001 |
| 9 | 8 | Robert Johnson | 94107 |
| 10 | 9 | Sarah Williams | 10001 |
| 11 | 10 | Robert Johnson | 94107 |
| 12 | 11 | Sarah Williams | 10001 |
| 13 | 12 | Robert Johnson | 94107 |
| 14 | 13 | Sarah Williams | 10001 |
| 15 | 14 | Robert Johnson | 94107 |
3. Graphical Query Execution Plan & Cost Bottlenecks
Physical Operator Tree (DuckDB 2.0 Profiler)Visual flowchart of the physical execution pipeline. Operators with high relative costs (≥ 20% of query runtime or heavy latency) are visually highlighted:
🔥 4.4% Cost
Latency: 80.42 ms
Rows In/Out: 3,125,000
Data Vol: 190.73 MB
📁 Projections: ['CAST(#0 AS INTEGE...
🔥 24.0% Cost
Latency: 434.02 ms
Rows In/Out: 3,125,000
Data Vol: 154.97 MB
🔥 4.2% Cost
Latency: 76.85 ms
Rows In/Out: 3,125,000
Data Vol: 154.97 MB
📁 Projections: ['CAST(#0 AS SMALLI...
🔥 35.1% Cost
Latency: 635.53 ms
Rows In/Out: 3,125,000
Data Vol: 190.73 MB
📁 Projections: ['crm_id', 'crm_nam...
🔥 32.3% Cost
Latency: 585.12 ms
Rows In/Out: 3,125,000
Data Vol: 166.89 MB
0.0%
Latency: 0.18 ms
Rows In/Out: 2,500
Data Vol: 0.09 MB
📁 memory.main.crm_records
0.0%
Latency: 0.07 ms
Rows In/Out: 2,500
Data Vol: 0.09 MB
📁 memory.main.billing_records
| Operator | Cost % | Latency | Processed Rows | Data Volume | Details / Table | Status |
|---|---|---|---|---|---|---|
| PROJECTION | 35.1% | 635.53 ms | 3,125,000 | 190.73 MB | Projections: ['crm_id', 'crm_name', 'bill_id', ' | 🔥 BOTTLENECK |
| HASH_JOIN | 32.3% | 585.12 ms | 3,125,000 | 166.89 MB | - | 🔥 BOTTLENECK |
| ORDER_BY | 24.0% | 434.02 ms | 3,125,000 | 154.97 MB | - | 🔥 BOTTLENECK |
| PROJECTION | 4.4% | 80.42 ms | 3,125,000 | 190.73 MB | Projections: ['CAST(#0 AS INTEGER)', '__internal | 🔥 BOTTLENECK |
| PROJECTION | 4.2% | 76.85 ms | 3,125,000 | 154.97 MB | Projections: ['CAST(#0 AS SMALLINT)', '__interna | 🔥 BOTTLENECK |
| TABLE_SCAN | 0.0% | 0.18 ms | 2,500 | 0.09 MB | memory.main.crm_records | Normal |
| TABLE_SCAN | 0.0% | 0.07 ms | 2,500 | 0.09 MB | memory.main.billing_records | Normal |
4. Queries Executed (Candidate vs Golden Ground Truth)
Beautified & Syntax Highlighted-- Entity resolution: Match records with identical zip code and Jaro-Winkler name similarity >= 0.80
SELECT c.crm_id,
c.name AS crm_name,
b.bill_id,
b.name AS billing_name,
c.zip_code,
round(jaro_winkler_similarity(c.name, b.name), 4) AS name_similarity
FROM crm_records c
JOIN billing_records b ON c.zip_code = b.zip_code
AND jaro_winkler_similarity(c.name, b.name) >= 0.80
ORDER BY name_similarity DESC;
-- Entity resolution: Match records with identical zip code and Jaro-Winkler name similarity >= 0.80
SELECT c.crm_id,
c.name AS crm_name,
b.bill_id,
b.name AS billing_name,
c.zip_code,
round(jaro_winkler_similarity(c.name, b.name), 4) AS name_similarity
FROM crm_records c
JOIN billing_records b ON c.zip_code = b.zip_code
AND jaro_winkler_similarity(c.name, b.name) >= 0.80
ORDER BY name_similarity DESC;
CREATE TABLE crm_records (crm_id INT, name VARCHAR, zip_code VARCHAR);
CREATE TABLE billing_records (bill_id INT, name VARCHAR, zip_code VARCHAR);
INSERT INTO crm_records
VALUES (1, 'Robert Johnson', '94107'),
(2, 'Sarah Williams', '10001');
INSERT INTO billing_records
VALUES (101, 'Bob Johnson', '94107'),
(102, 'Sara Williams', '10001');
5. Query Results & Expected Ground Truth
Tabular Comparison
Actual Candidate Output
(3,125,000 rows × 6 cols)
| # | crm_id | crm_name | bill_id | billing_name | zip_code | name_similarity |
|---|---|---|---|---|---|---|
| 1 | 2 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 2 | 3 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 3 | 5 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 4 | 7 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 5 | 9 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 6 | 11 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 7 | 13 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 8 | 15 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 9 | 17 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 10 | 19 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 11 | 21 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 12 | 23 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 13 | 25 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 14 | 27 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 15 | 29 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 16 | 31 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 17 | 33 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 18 | 35 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 19 | 37 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 20 | 39 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 21 | 41 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 22 | 43 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 23 | 45 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 24 | 47 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 25 | 49 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
Showing first 25 of 3,125,000 total rows.
Expected Golden Output
(3,125,000 rows × 6 cols)
| # | crm_id | crm_name | bill_id | billing_name | zip_code | name_similarity |
|---|---|---|---|---|---|---|
| 1 | 2 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 2 | 3 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 3 | 5 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 4 | 7 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 5 | 9 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 6 | 11 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 7 | 13 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 8 | 15 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 9 | 17 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 10 | 19 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 11 | 21 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 12 | 23 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 13 | 25 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 14 | 27 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 15 | 29 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 16 | 31 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 17 | 33 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 18 | 35 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 19 | 37 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 20 | 39 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 21 | 41 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 22 | 43 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 23 | 45 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 24 | 47 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
| 25 | 49 | Sarah Williams | 2,599 | Sara Williams | 10001 | 0.9857 |
Showing first 25 of 3,125,000 total rows.