1+ -- ============================================================================
2+ -- Model: int_customers_contact
3+ --
4+ -- Purpose:
5+ -- Standardizes customer contact information by cleaning and validating
6+ -- email addresses, phone numbers, and preferred communication channels.
7+ -- This model corrects common email domain typographical errors, formats
8+ -- phone numbers into a consistent structure, and normalizes customer
9+ -- communication preferences for reliable downstream analytical models.
10+ --
11+ -- Maintainer: Ritik
12+ -- ============================================================================
113SELECT
214 customer_id,
3- email,
4- phone,
5- preferred_channel
15+
16+ CASE
17+ WHEN email IS NULL OR TRIM (email) = ' ' THEN ' Unknown'
18+ WHEN TRIM (LOWER (email)) NOT LIKE ' %@%' THEN ' Unknown'
19+ WHEN PATINDEX(' %@%@%' , TRIM (LOWER (email))) > 0 THEN
20+ LEFT(TRIM (LOWER (email)),CHARINDEX(' @' , TRIM (LOWER (email))) - 1 )
21+ + ' @' +
22+ REPLACE(
23+ SUBSTRING (
24+ TRIM (LOWER (email)),
25+ CHARINDEX(' @' , TRIM (LOWER (email))) + 1 ,
26+ LEN(email)),' @' ,' ' )
27+ ELSE
28+ CONCAT(
29+ LEFT(TRIM (LOWER (email)),CHARINDEX(' @' , TRIM (LOWER (email))) - 1 ), ' @' ,
30+ CASE
31+ WHEN RIGHT(
32+ TRIM (LOWER (email)),
33+ LEN(TRIM (email)) - CHARINDEX(' @' , TRIM (email))) = ' yahoocom' THEN ' yahoo.com'
34+ WHEN RIGHT(
35+ TRIM (LOWER (email)),
36+ LEN(TRIM (email)) - CHARINDEX(' @' , TRIM (email))) = ' iclod.com' THEN ' icloud.com'
37+ WHEN RIGHT(
38+ TRIM (LOWER (email)),
39+ LEN(TRIM (email)) - CHARINDEX(' @' , TRIM (email))) = ' outook.com' THEN ' outlook.com'
40+ WHEN RIGHT(
41+ TRIM (LOWER (email)),
42+ LEN(TRIM (email)) - CHARINDEX(' @' , TRIM (email))) = ' ahoo.com' THEN ' yahoo.com'
43+ ELSE RIGHT(
44+ TRIM (LOWER (email)),
45+ LEN(TRIM (email)) - CHARINDEX(' @' , TRIM (email)))
46+ END
47+ )
48+ END AS email,
49+
50+ CASE
51+ WHEN TRIM (phone) LIKE ' +1__________' THEN CONCAT(' +1 (' , SUBSTRING (TRIM (phone), 3 , 3 ), ' ) ' , SUBSTRING (TRIM (phone), 6 , 3 ),' -' , SUBSTRING (TRIM (phone),9 ,4 ))
52+ WHEN TRIM (phone) LIKE ' __________' THEN CONCAT(' +1 (' , SUBSTRING (TRIM (phone), 1 ,3 ), ' ) ' , SUBSTRING (TRIM (phone), 4 ,3 ), ' -' , SUBSTRING (TRIM (phone), 7 , 4 ))
53+ WHEN TRIM (phone) LIKE ' ___-___-____' THEN CONCAT(' +1 (' , SUBSTRING (TRIM (phone), 1 , 3 ), ' ) ' , SUBSTRING (TRIM (phone), 5 , 3 ), SUBSTRING (TRIM (phone), 8 ,5 ))
54+ WHEN TRIM (phone) LIKE ' ___.___.____' THEN CONCAT(' +1 (' , SUBSTRING (TRIM (phone), 1 , 3 ), ' ) ' , SUBSTRING (TRIM (phone), 5 , 3 ), ' -' , SUBSTRING (TRIM (phone),9 , 4 ))
55+ WHEN TRIM (phone) LIKE ' (___) ___-____' THEN CONCAT(' +1 ' , SUBSTRING (TRIM (phone), 1 , 14 ))
56+ WHEN TRIM (phone) IS NULL OR TRIM (phone) = ' ' THEN ' Unknown'
57+ ELSE ' Unknown'
58+ END as phone,
59+
60+ CASE TRIM (LOWER (preferred_channel))
61+ WHEN ' app' THEN ' Mobile App'
62+ WHEN ' mobile app' THEN ' Mobile App'
63+ WHEN ' mobile' THEN ' Mobile App'
64+ WHEN ' in store' THEN ' In Store'
65+ WHEN ' in-store' THEN ' In Store'
66+ WHEN ' store' THEN ' In Store'
67+ WHEN ' catalog' THEN ' Catalog'
68+ WHEN ' online' THEN ' Website'
69+ WHEN ' web' THEN ' Website'
70+ WHEN ' phone' THEN ' Phone Call'
71+ ELSE ' Unknown'
72+ END as preferred_channel
73+
674FROM {{ ref(' stg_customers' ) }} ;
0 commit comments