Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Geräte, die Daten an die Cloud senden, verwalten einen lokalen Cache der Daten. Je nach Datengröße speichert der lokale Cache möglicherweise Daten für Tage oder sogar Monate. Sie möchten Ihre Analytischen Datenbanken vor fehlerhaften Geräten schützen, die die zwischengespeicherten Daten erneut senden und die Datenduplizierung in der Analytischen Datenbank verursachen. Duplikate können sich auf die Anzahl der von einer Abfrage zurückgegebenen Datensätze auswirken. Dieses Problem ist relevant, wenn Sie eine genaue Anzahl von Datensätzen benötigen, z. B. beim Zählen von Ereignissen. In diesem Artikel werden bewährte Methoden für die Behandlung doppelter Daten für diese Szenarien beschrieben.
Im günstigsten Fall wird eine Datenduplizierung von vornherein verhindert. Beheben Sie das Problem ggf. weiter oben in der Datenpipeline. Dieser Ansatz spart Kosten, die mit der Datenverschiebung entlang der Datenpipeline verbunden sind, und vermeidet ressourcenaufwendigen Umgang mit doppelten Daten, die in das System aufgenommen wurden. In Situationen, in denen Sie das Quellsystem nicht ändern können, können Sie jedoch verschiedene Methoden verwenden, um dieses Szenario zu beheben.
Grundlegendes zu den Auswirkungen doppelter Daten
Überwachen Sie den prozentualen Anteil doppelter Daten. Sobald Sie den Prozentsatz der doppelten Daten ermittelt haben, können Sie den Umfang des Problems und der geschäftlichen Auswirkungen analysieren und die entsprechende Lösung auswählen.
Beispielabfrage zur Ermittlung des prozentualen Anteils doppelter Datensätze:
let _sample = 0.01; // 1% sampling
let _data =
DeviceEventsAll
| where EventDateTime between (datetime('10-01-2018 10:00') .. datetime('10-10-2018 10:00'));
let _totalRecords = toscalar(_data | count);
_data
| where rand()<= _sample
| summarize recordsCount=count() by hash(DeviceId) + hash(EventId) + hash(StationId) // Use all dimensions that make row unique. Combining hashes can be improved
| summarize duplicateRecords=countif(recordsCount > 1)
| extend duplicate_percentage = (duplicateRecords / _sample) / _totalRecords
Lösungen für den Umgang mit doppelten Daten
Lösung 1: Keine duplizierten Daten entfernen
Verstehen Sie Ihre geschäftlichen Anforderungen und Ihre Toleranz für doppelte Daten. Bei manchen Datasets ist ein gewisser prozentualer Anteil doppelter Daten kein Problem. Wenn die duplizierten Daten keine großen Auswirkungen haben, können Sie dessen Anwesenheit ignorieren. Der Vorteil, die duplizierten Daten nicht zu entfernen, besteht darin, dass sie keinen zusätzlichen Aufwand für den Aufnahmeprozess oder die Abfrageleistung hinzufügt.
Lösung 2: Behandeln doppelter Zeilen während der Abfrage
Die doppelten Datenzeilen können auch beim Abfragen herausgefiltert werden. Mit der arg_max() Aggregationsfunktion können Sie die doppelten Datensätze herausfiltern und den letzten Datensatz basierend auf dem Zeitstempel (oder einer anderen Spalte) zurückgeben. Der Vorteil der Verwendung dieser Methode ist eine schnellere Erfassung, da die Deduplizierung während der Abfragezeit erfolgt. Darüber hinaus stehen alle Datensätze (einschließlich Duplikate) für die Überwachung und Problembehandlung zur Verfügung. Der Nachteil der Verwendung der arg_max Funktion ist die zusätzliche Abfragezeit und Last auf der CPU bei jeder Abfrage der Daten. Abhängig von der Datenmenge, die abgefragt wird, kann diese Lösung nicht funktionsfähig oder speicheraufwendig werden und einen Wechsel zu anderen Optionen erfordern.
Im folgenden Beispiel wird der zuletzt erfasste Datensatz für eine Gruppe von Spalten abgefragt, die die eindeutigen Datensätze bestimmen:
DeviceEventsAll
| where EventDateTime > ago(90d)
| summarize hint.strategy=shuffle arg_max(EventDateTime, *) by DeviceId, EventId, StationId
Sie können diese Abfrage auch innerhalb einer Funktion platzieren, anstatt die Tabelle direkt zu abfragen:
.create function DeviceEventsView
{
DeviceEventsAll
| where EventDateTime > ago(90d)
| summarize arg_max(EventDateTime, *) by DeviceId, EventId, StationId
}
Lösung 3: Verwenden von materialisierten Ansichten zum Deduplizieren
Sie können materialisierte Ansichten für die Deduplizierung verwenden, indem Sie die aggregationsfunktionen take_any()/arg_min()/arg_max() verwenden (siehe Beispiel #4 in materialisierter Ansicht erstellen).
Hinweis
Materialisierte Ansichten verbrauchen Clusterressourcen, was möglicherweise nicht vernachlässigbar ist. Weitere Informationen finden Sie im Artikel zu materialisierten Sichten im Abschnitt Überlegungen zur Leistung.
Lösung 4: Verwenden des vorläufigen Löschens zum Entfernen von Duplikaten
Soft-Delete unterstützt die Möglichkeit, einzelne Datensätze zu löschen, sodass Sie es zum Löschen von Duplikaten verwenden können. Verwenden Sie diese Option nur für seltene Löschungen, nicht, wenn Sie ständig alle eingehenden Datensätze deduplizieren müssen.
Wahl zwischen materialisierten Sichten und vorläufigem Löschen für die Datendeduplizierung
Berücksichtigen Sie die folgenden Faktoren bei der Auswahl zwischen materialisierten Ansichten und Soft-Löschen für die Deduplizierung:
- Verwaltung und Orchestrierung: Materialisierte Sichten sind eine vollständig verwaltete Lösung. Sie definieren eine Ansicht einmal, und das System behandelt die Deduplizierung für alle eingehenden Datensätze. Für vorläufiges Löschen sind Orchestrierung und Verwaltung erforderlich. Wenn materialisierte Ansichten für Ihren Anwendungsfall funktionieren, wählen Sie diese Option aus.
- Wenn Datensätze deduziert werden: Beim vorläufigen Löschen fügen Sie einer Tabelle zuerst doppelte Datensätze hinzu und löschen sie dann. Daher enthält die Tabelle während der Ingestions- und Soft-Delete-Prozesse Duplikate. Bei materialisierten Ansichten werden Datensätze in der Ansicht immer dedupliziert, da das System sie bevor sie in die Ansicht aufgenommen werden, dedupliziert.
- Häufigkeit: Wenn Sie eine Tabelle ständig deduplizieren müssen, verwenden Sie materialisierte Ansichten. Wenn Duplikate selten sind und Sie diese während der Erfassung identifizieren können, ist der Soft Delete-Prozess in der Regel leistungsfähiger als materialisierte Ansichten. Wenn Ihre Datenaufnahmen z. B. normalerweise keine Duplikate enthalten, aber gelegentlich einen Datenstrom umfassen, der dafür bekannt ist, Duplikate zu enthalten, empfiehlt es sich, diese Duplikate durch sanftes Löschen zu handhaben, anstatt eine materialisierte Ansicht zu definieren, die dauerhaft versucht, alle Datensätze zu deduplizieren.
Lösung 5: ingest-by Extent-Tags
Sie können "ingest-by:" verwenden, um Duplikate während der Aufnahme zu verhindern. Diese Lösung ist nur in Anwendungsfällen relevant, in denen jeder Aufnahmebatch keine Duplikate aufweist und Duplikate nur auftreten, wenn derselbe Aufnahmebatch mehrmals aufgenommen wird.
Zusammenfassung
Sie können die Datenduplizierung auf mehrere Arten behandeln. Bewerten Sie die Optionen sorgfältig unter Berücksichtigung von Preis und Leistung, um die beste Methode für Ihr Unternehmen zu ermitteln.