Deduplicazione dei dati in Query Service
Adobe Experience Platform Query Service supporta la deduplicazione dei dati. La deduplicazione dei dati può essere eseguita quando è necessario rimuovere un’intera riga da un calcolo o ignorare un set specifico di campi, perché solo una parte dei dati nella riga sono informazioni duplicate.
La deduplicazione comporta in genere l’utilizzo di ROW_NUMBER()
in una finestra per un ID (o una coppia di ID) nel tempo ordinato, che restituisce un nuovo campo che rappresenta il numero di volte in cui è stato rilevato un duplicato. L’ora viene spesso rappresentata utilizzando Experience Data Model (XDM) timestamp
campo.
Quando il valore di ROW_NUMBER()
è 1
, si riferisce all’istanza originale. In genere, è questa l’istanza che desideri utilizzare. Questa operazione viene eseguita il più delle volte all'interno di una sottoselezione in cui la deduplicazione viene eseguita in un livello superiore SELECT
come eseguire un conteggio aggregato.
I casi di utilizzo di deduplicazione possono essere globali o vincolati a un singolo ID utente o utente finale all’interno del identityMap
.
Questo documento illustra come eseguire la deduplicazione per tre casi d’uso comuni: eventi di esperienza, acquisti e metriche.
Ogni esempio include l'ambito, la chiave della finestra, una struttura del metodo di deduplicazione e la query SQL completa.
Eventi esperienza experience-events
Nel caso di eventi di esperienza duplicati, è probabile che si desideri ignorare l’intera riga.
Ambito: Globale
Tasto finestra: id
Esempio di deduplicazione
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num
FROM experience_events
Esempio completo
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
Acquisti purchases
Se hai acquisti duplicati, è probabile che vorrai mantenere la maggior parte del Experience Event riga, ma ignora i campi associati all’acquisto (ad esempio commerce.orders
metrica). Gli acquisti contengono un campo speciale per l’ID acquisto, che è commerce.order.purchaseID
.
Si consiglia di utilizzare purchaseID
nell’ambito del visitatore, in quanto è il campo semantico standard per gli ID acquisto in XDM. L’ambito del visitatore è consigliato per la rimozione dei dati di acquisto duplicati, in quanto la query è più rapida rispetto all’utilizzo dell’ambito globale ed è improbabile che un ID acquisto venga duplicato su più ID visitatore.
Ambito: Visitatore
Tasto finestra: identityMap[$NAMESPACE].id & commerce.order.purchaseID
Esempio di deduplicazione
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
Esempio completo
L’esempio seguente utilizza una clausola condizionale per utilizzare l’ID evento nel caso in cui l’ID acquisto non sia presente.
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
Metriche metrics
Se disponi di una metrica che utilizza l’ID univoco facoltativo e viene visualizzato un duplicato di tale ID, è probabile che tu voglia ignorare tale valore della metrica e mantenere il resto dell’evento esperienza.
In XDM, quasi tutte le metriche utilizzano il Measure
tipo di dati che include un elemento facoltativo id
che può essere utilizzato per la deduplicazione.
Ambito: Visitatore
Tasto finestra: identityMap[$NAMESPACE].id e id dell’oggetto Measure
Esempio di deduplicazione
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
Esempio completo
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
Passaggi successivi
Questo documento fornisce esempi di deduplicazione dei dati e illustra come eseguire la deduplicazione dei dati in Query Service. Per ulteriori best practice sulla scrittura di query tramite Query Service, leggi guida alle query di scrittura.