Datadeduplicering i Query Service
Adobe Experience Platform Query Service stöder datadeduplicering. Datadeduplicering kan utföras när det krävs att en hel rad tas bort från en beräkning eller att en viss uppsättning fält ignoreras eftersom endast en del av data i raden är dubblettinformation.
Borttagning av dubbletter innebär vanligtvis att funktionen ROW_NUMBER()
används i ett fönster för ett ID (eller ett par ID:n) över ordnad tid, vilket returnerar ett nytt fält som representerar det antal gånger en dubblett har identifierats. Tiden representeras ofta av fältet Experience Data Model (XDM) timestamp
.
När värdet för ROW_NUMBER()
är 1
refererar det till den ursprungliga instansen. I allmänhet är det den instans som du vill använda. Detta görs oftast inuti en undermarkering där borttagningen av dubbletter görs på en högre nivå, SELECT
, som att utföra en sammanställning.
Användningsfall vid borttagning av dubbletter kan antingen vara globala eller begränsade till ett enda användar- eller slutanvändar-ID inom identityMap
.
I det här dokumentet beskrivs hur du utför borttagning av dubbletter för tre vanliga användningsområden: Experience Events, purchase och metrics.
Varje exempel innehåller omfattningen, fönsternyckeln, en översikt över dedupliceringsmetoden samt den fullständiga SQL-frågan.
Experience Events experience-events
Om Experience Events dupliceras kommer ni troligen att ignorera hela raden.
Omfång: Global
Fönsternyckel: id
Exempel på borttagning av dubbletter
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num
FROM experience_events
Fullständigt exempel
SELECT COUNT(*) AS num_events FROM (
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num
FROM experience_events
) WHERE id_dup_num = 1
Inköp purchases
Om du har dubblerade inköp vill du förmodligen behålla merparten av raden Experience Event, men ignorera de fält som är kopplade till köpet (till exempel måttet commerce.orders
). Inköp innehåller ett särskilt fält för köp-ID, som är commerce.order.purchaseID
.
Vi rekommenderar att du använder purchaseID
i besökaromfånget, eftersom det är standardsemantiskt fält för köp-ID:n i XDM. Besökaromfånget rekommenderas för att ta bort dubbletter av inköpsdata eftersom frågan är snabbare än om det globala omfånget används och det är inte troligt att ett köp-ID dupliceras över flera besökar-ID:n.
Omfång: Besökare
Fönsternyckel: identityMap[$NAMESPACE].id & commerce.order.purchaseID
Exempel på borttagning av dubbletter
SELECT *,
IF(LENGTH(commerce.`order`.purchaseID) > 0,
ROW_NUMBER()
OVER (PARTITION BY identityMap['ECID'].id, commerce.`order`.purchaseID
ORDER BY timestamp ASC
),
1) AS purchaseID_dup_num
FROM experience_events
Fullständigt exempel
I exemplet nedan används en villkorssats för att använda händelse-ID om det inte finns något köp-ID.
SELECT SUM(commerce.purchases.value) AS num_purchases FROM (
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num,
IF(LENGTH(commerce.`order`.purchaseID) > 0,
ROW_NUMBER()
OVER (PARTITION BY identityMap['ECID'].id, commerce.order.purchaseID
ORDER BY timestamp ASC
),
1) AS purchaseID_dup_num
FROM experience_events
) WHERE id_dup_num = 1 AND purchaseID_dup_num = 1
Mätvärden metrics
Om du har ett mätvärde som använder det valfria unika ID:t och en dubblett av det ID:t visas, vill du troligtvis ignorera det måttvärdet och behålla resten av Experience Event.
I XDM använder nästan alla mått datatypen Measure
som innehåller ett valfritt id
-fält som du kan använda för borttagning av dubbletter.
Omfång: Besökare
Fönsternyckel: identityMap[$NAMESPACE].id och ID för måttobjektet
Exempel på borttagning av dubbletter
SELECT *,
IF(LENGTH(application.launches.id) > 0,
ROW_NUMBER()
OVER (PARTITION BY identityMap['ECID'].id, application.launches.id
ORDER BY timestamp ASC
),
1) AS launchesID_dup_num
FROM experience_events
Fullständigt exempel
SELECT SUM(application.launches.value) AS num_launches FROM (
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num,
IF(LENGTH(application.launches.id) > 0,
ROW_NUMBER()
OVER (PARTITION BY identityMap['ECID'].id, application.launches.id
ORDER BY timestamp ASC
),
1) AS launchesID_dup_num
FROM experience_events
) WHERE id_dup_num = 1 AND launchesID_dup_num = 1
Nästa steg
Det här dokumentet innehåller exempel på datadeduplicering och beskriver hur datadeduplicering ska utföras i Query Service. Mer information om hur du skriver frågor med hjälp av frågetjänsten finns i handboken om skrivna frågor.