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 della funzione 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 il campo timestamp
di Experience Data Model (XDM).
Quando il valore di ROW_NUMBER()
è 1
, fa riferimento 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 SELECT
di livello superiore, come l'esecuzione di un conteggio aggregato.
I casi di utilizzo di deduplicazione possono essere globali o vincolati a un singolo utente o ID utente finale all'interno di 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
Chiave 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, probabilmente vorrai mantenere la maggior parte della riga Experience Event, ma ignorare i campi associati all'acquisto (ad esempio la metrica commerce.orders
). 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
Chiave 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 tipo di dati Measure
che include un campo id
facoltativo che può essere utilizzato per la deduplicazione.
Ambito: Visitatore
Chiave 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 per la scrittura di query tramite Query Service, leggere la guida alla scrittura di query.