You are currently viewing Tìm record trùng lặp trong một Data Extension

Tìm record trùng lặp trong một Data Extension

Một trong những vấn đề phổ biến khi làm việc Data Extension mà DE đó được tạo bởi việc join nhiều data table với nhau là xuất hiện những record trùng lặp. Theo đó để debug và biết nguyên do nằm ở đâu (do truy vấn SQL của chúng ta hay do dữ liệu không nhất quán – inconsistent data) thì ta cần tìm ra được những record nào bị trùng.

Duplicate records are always a big issue in MC

Có nhiều cách khác nhau có thể tìm được những record trùng đó, chẳng hạn export ra file csv rồi dùng công thức excel lọc ra như mình thường làm trước đó chẳng hạn.
Hoặc có thể dựa vào chính truy vấn bằng SQL để tìm ra, và đây cũng là hướng đi của bài này.

Tình huống:

Đần có một dữ liệu sau khi join nhiều data table như sau:

Nằm trong một Data Extension có tên là “Duplicate_DE

idnameemailphoneaddress
1duc[email protected]123456789street A
2vu[email protected]123456789street B
3phap[email protected]123123123street C
4thu[email protected]123321321street D
5khanh[email protected]44442222street E

Trong đó những hàng có email lặp lại với nhau tính là trùng, bởi Đần chỉ muốn gửi email tới người nhận một lần. Với dữ liệu trên ta có thể thấy những hàng bị trùng có “id” là 1, 2, 3, 4. Đây cũng là những hàng ta muốn khoanh vùng tìm hiểu. Vậy làm sao để lấy những hàng này ra?
Chúng ta sẽ làm theo biểu đồ này:

Bước 1: lấy dữ liệu trùng lặp và đếm dữ liệu trùng đó

SELECT
a.email as email,
count(a.email) as cnt
FROM
[Duplicate_DE] as a
GROUP BY a.email
HAVING count(a.email) > 1

Truy vấn dữ liệu này và lưu vào một DE khác có tên: “Repeated_values
Output:

emailcnt
[email protected]2
[email protected]2

Ta thấy 2 địa chỉ email này mỗi địa chỉ bị lặp lại 2 lần


Bước 2: Inner Join dữ liệu ở bước 1 và dữ liệu ở ban đầu, để tìm ra id và các column ta quan tâm.

SELECT
c.name as name,
c.email as email,
c.phone as phone,
c.addresss as addresss,
c.id as id
FROM
[Duplicate_DE] as c

INNER JOIN

[Repeated_values] as b

ON
c.email = b.email

Output:

idnameemailphoneaddresss
1duc[email protected]123456789street A
2vu[email protected]123456789street B
3phap[email protected]123123123street C
4thu[email protected]123321321street D

Vậy là ta đã lấy được những hàng có giá trị trùng.

Final code sau khi đã combine bước 1 và 2:

SELECT
c.name as name,
c.email as email,
c.phone as phone,
c.addresss as addresss,
c.id as id
FROM
[Duplicate_DE] as c

INNER JOIN

(SELECT
a.email as email,
count(a.email) as cnt
FROM
[Duplicate_DE] as a
GROUP BY a.email
HAVING count(a.email)> 1) as b

ON
c.email = b.email


Kết luận:

Việc dùng SQL để tìm ra chính giá trị trùng lặp trong DE là một cách nên làm. Bởi lẽ như ban đầu tình huống đặt ra đây là dữ liệu được join từ nhiều bảng bằng SQL, việc dùng chính SQL để tìm ra thuận tiện hơn nhiều so với dùng excel. Hơn thế nữa, vì excel bị giới hạn bởi các chức năng nên khi dữ liệu lên đến hàng nghìn, thậm chí hàng trăm nghìn việc sử dụng sẽ gặp rất khó khăn.Ta có thể thêm và lọc bằng SQL dễ dàng khiến cho dữ liệu có thể linh động như ta mong muốn.

Leave a Reply