Adobe Experience Platform Query Service har stöd för 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.
Deduplicering innebär ofta att du använder ROW_NUMBER()
i ett fönster för ett ID (eller ett par ID:n) över den ordnade tiden, vilket returnerar ett nytt fält som representerar det antal gånger en dubblett har identifierats. Tiden representeras ofta av Experience Data Model (XDM) timestamp
fält.
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 ett sammanställningsantal.
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.
Om Experience Events dupliceras kommer ni troligen att ignorera hela raden.
Många datauppsättningar i Experience Platform, inklusive de som har producerats av Adobe Analytics Data Connector, har redan borttagning av dubbletter på händelsenivå. Därför är det inte nödvändigt att återanvända den här nivån av borttagning av dubbletter, vilket kommer att göra frågan långsammare.
Det är viktigt att förstå källan till datauppsättningarna och veta om borttagning av dubbletter på Experience-Event-nivå redan har tillämpats. För alla datauppsättningar som direktuppspelas (till exempel uppsättningar från Adobe Target) kommer måste använda borttagning av dubbletter på Experience-Event-nivå eftersom dessa datakällor har semikolon"minst en gång".
Omfång: Global
Fönsternyckel: id
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num
FROM experience_events
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
Om du har dubblerade inköp vill du förmodligen behålla de flesta av Experience Event men ignorera fälten som är kopplade till köpet (t.ex. commerce.orders
mätvärden). Inköp innehåller ett särskilt fält för köp-ID, vilket är commerce.order.purchaseID
.
Det rekommenderas att använda purchaseID
inom besökarområdet, eftersom det är det vanliga semantiska fältet för köp-ID:n inom 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
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
I vissa fall där de ursprungliga Analytics-data har dubblerade inköps-ID:n för besökar-ID:n kan måste köra dubblettinventeringen av inköps-ID för alla besökare. Om det inte finns något inköps-ID kräver den här metoden att du inkluderar ett villkor som i stället använder händelse-ID för att frågan ska gå så snabbt som möjligt.
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
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ätvärden Measure
datatyp som innehåller en valfri id
fält som du kan använda för deduplicering.
Omfång: Besökare
Fönsternyckel: identityMap[$NAMESPACE].id och id för måttobjektet
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
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
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 handbok för skrivfrågor.