Datendeduplizierung in Query Service
Adobe Experience Platform Query Service unterstützt die Duplizierung von Daten. Daten können dedupliziert werden, wenn eine ganze Zeile aus einer Berechnung entfernt oder ein bestimmter Satz von Feldern ignoriert werden muss, da nur ein Teil der Daten in der Zeile doppelte Informationen enthält.
Die Deduplizierung umfasst in der Regel die Verwendung der Funktion ROW_NUMBER()
in einem Fenster für eine ID (oder ein ID-Paar) über einen bestimmten Zeitraum hinweg, die ein neues Feld mit der Anzahl der erkannten Duplikate zurückgibt. Die Zeit wird häufig durch die Verwendung des Felds Experience Data Model (XDM) timestamp
dargestellt.
Ein ROW_NUMBER()
-Wert von 1
bezieht sich auf die ursprüngliche Instanz. Im Allgemeinen ist dies die Instanz, die verwendet werden soll. Dies geschieht meist innerhalb einer Unterauswahl, bei der die Deduplizierung in einer höheren SELECT
-Anweisung erfolgt, wie z. B. einer Aggregatzählung.
Anwendungsfälle für die Deduplizierung können entweder global sein oder auf eine einzelne Benutzer- oder Endbenutzer-ID innerhalb von identityMap
beschränkt sein.
In diesem Dokument wird die Deduplizierung für drei gängige Anwendungsfälle beschrieben: Erlebnisereignisse, Käufe und Metriken.
Zu jedem Beispiel gehören der Bereich, der Fensterschlüssel, eine Beschreibung der Deduplizierungsmethode sowie die vollständige SQL-Abfrage.
Erlebnisereignisse experience-events
Bei doppelten Erlebnisereignissen soll wahrscheinlich die gesamte Zeile ignoriert werden.
Bereich: Global
Fensterschlüssel: id
Beispiel einer Deduplizierung
SELECT *,
ROW_NUMBER()
OVER (PARTITION BY id
ORDER BY timestamp ASC
) AS id_dup_num
FROM experience_events
Vollständiges Beispiel
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
Käufe purchases
Bei doppelten Käufen soll der Großteil der Zeile Experience Event wahrscheinlich beibehalten, aber die mit dem Kauf verbundenen Felder (z. B. die Metrik commerce.orders
) ignoriert werden. Käufe enthalten ein spezielles Feld für die Kauf-ID: commerce.order.purchaseID
.
Es wird empfohlen, purchaseID
im Besucherbereich zu verwenden, da dies das standardmäßige semantische Feld für Kauf-IDs in XDM ist. Der Besucherbereich wird zum Entfernen doppelter Kaufdaten empfohlen, da die Abfrage schneller ist als der globale Bereich. Es ist unwahrscheinlich, dass eine Kauf-ID über mehrere Besucher-IDs hinweg dupliziert wird.
Bereich: Besuchende
Fensterschlüssel: identityMap[$NAMESPACE].id und commerce.order.purchaseID
Beispiel einer Deduplizierung
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
Vollständiges Beispiel
Im folgenden Beispiel wird eine Bedingungsklausel verwendet, um die Ereignis-ID zu verwenden, falls die Kauf-ID nicht vorhanden ist.
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
Metriken metrics
Bei einer Metrik, die die optionale eindeutige ID verwendet, und ein Duplikat dieser ID auftaucht, soll dieser Metrikwert wahrscheinlich ignoriert und der Rest des Erlebnisereignisses beibehalten werden.
In XDM verwenden fast alle Metriken den Datentyp Measure
mit einem optionalen id
-Feld, das Sie für die Deduplizierung verwenden können.
Bereich: Besuchende
Fensterschlüssel: identityMap[$NAMESPACE].id und ID des Maßnahmen-Objekts
Beispiel einer Deduplizierung
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
Vollständiges Beispiel
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ächste Schritte
In diesem Dokument wurden Beispiele für die Datendeduplizierung und die Durchführung einer Datendeduplizierung im Abfrage-Service beschrieben. Weitere Best Practices beim Schreiben von Abfragen mit Abfrage-Service finden Sie im Handbuch zum Schreiben von Abfragen.