Freigeben über


Übersicht über Updaterichtlinien

Gilt für: ✅Microsoft Fabric✅Azure Data Explorer

Aktualisierungsrichtlinien sind Automatisierungsmechanismen, die ausgelöst werden, wenn neue Daten in eine Tabelle geschrieben werden. Sie vermeiden die Notwendigkeit einer speziellen Orchestrierung, indem sie eine Abfrage ausführen, um die aufgenommenen Daten zu transformieren und das Ergebnis in einer Zieltabelle zu speichern. Mehrere Aktualisierungsrichtlinien können in einer einzelnen Tabelle definiert werden, sodass unterschiedliche Transformationen möglich sind und Daten gleichzeitig in mehreren Tabellen gespeichert werden können. Die Zieltabellen können über ein anderes Schema, eine andere Aufbewahrungsrichtlinie und andere Richtlinien aus der Quelltabelle verfügen.

Beispielsweise kann eine High-Rate-Trace-Quelltabelle Daten enthalten, die als Freitextspalte formatiert sind. Die Zieltabelle kann bestimmte Verfolgungszeilen mit einem ein gut strukturierten Schema enthalten, das aus einer Transformation der Freitextdaten der Quelltabelle mithilfe des Analyseoperators erstellt wurde. Weitere Informationen finden Sie in gängigen Szenarien.

Das folgende Diagramm zeigt eine allgemeine Ansicht einer Updaterichtlinie. Es werden zwei Aktualisierungsrichtlinien angezeigt, die ausgelöst werden, wenn Daten der zweiten Quelltabelle hinzugefügt werden. Sobald sie ausgelöst wurden, werden transformierte Daten den beiden Zieltabellen hinzugefügt.

Das Diagramm zeigt eine Übersicht über die Updaterichtlinie.

Eine Updaterichtlinie unterliegt den gleichen Einschränkungen und bewährten Methoden wie die regelmäßige Aufnahme. Die Richtlinie wird entsprechend der Clustergröße skaliert und beim Verarbeiten von Massenaufnahme effizienter.

Eine Updaterichtlinie unterliegt den gleichen Einschränkungen und bewährten Methoden wie die regelmäßige Aufnahme. Die Richtlinie wird entsprechend der Eventhouse-Größe skaliert und beim Verarbeiten von Massenaufnahme effizienter.

Hinweis

  • Die Quell- und Zieltabelle muss sich in derselben Datenbank befinden.
  • Das Schema der Updaterichtlinienfunktion und das Zieltabellenschema müssen in ihren Spaltennamen, Typen und Reihenfolge übereinstimmen.
  • Die Updaterichtlinienfunktion kann auf Tabellen in anderen Datenbanken verweisen. Dazu muss die Updaterichtlinie mit einer ManagedIdentity Eigenschaft definiert werden, und die verwaltete Identität muss eine Rolle für die referenzierten Datenbanken haben viewer. Das Aufnehmen formatierter Daten verbessert die Leistung, und CSV wird aufgrund eines gut definierten Formats bevorzugt. Manchmal haben Sie jedoch keine Kontrolle über das Format der Daten, oder Sie möchten aufgenommene Daten anreichern, indem Sie Datensätze mit einer statischen Dimensionstabelle in Ihrer Datenbank verknüpfen.

Aktualisieren der Richtlinienabfrage

Wenn die Updaterichtlinie für die Zieltabelle definiert ist, können mehrere Abfragen für daten ausgeführt werden, die in eine Quelltabelle aufgenommen wurden. Wenn mehrere Updaterichtlinien vorhanden sind, ist die Ausführungsreihenfolge nicht unbedingt bekannt.

Abfrageeinschränkungen

  • Die richtlinienbezogene Abfrage kann gespeicherte Funktionen aufrufen, aber:
    • Es kann keine clusterübergreifenden Abfragen ausgeführt werden.
    • Es kann nicht auf externe Daten oder externe Tabellen zugreifen.
    • Es kann keine Beschriftungen (mithilfe eines Plug-Ins) tätigen.
  • Die Abfrage hat keinen Lesezugriff auf Tabellen, die die RestrictedViewAccess-Richtlinie aktiviert haben.
  • Informationen zu Updaterichtlinienbeschränkungen bei der Aufnahme von Streamings finden Sie unter Einschränkungen der Streamingaufnahme.
  • Die richtlinienbezogene Abfrage kann gespeicherte Funktionen aufrufen, aber:
    • Es kann keine ereignisübergreifenden Abfragen ausführen.
    • Es kann nicht auf externe Daten oder externe Tabellen zugreifen.
    • Es kann keine Beschriftungen (mithilfe eines Plug-Ins) tätigen.
  • Die Abfrage hat keinen Lesezugriff auf Tabellen, die die RestrictedViewAccess-Richtlinie aktiviert haben.
  • Standardmäßig ist die Streaming-Aufnahmerichtlinie für alle Tabellen im Eventhouse aktiviert. Um Funktionen mit dem join-Operator in einer Updaterichtlinie zu verwenden, muss die Streaming-Aufnahmerichtlinie deaktiviert sein. Verwenden Sie den Befehl .altertableTableNamepolicystreamingingestionPolicyObject, um ihn zu deaktivieren.

Warnung

Eine falsche Abfrage kann die Erfassung von Daten in die Quelltabelle verhindern. Es ist wichtig zu beachten, dass Einschränkungen sowie die Kompatibilität zwischen den Abfrageergebnissen und dem Schema der Quell- und Zieltabellen zu einer falschen Abfrage führen können, um die Erfassung von Daten in die Quelltabelle zu verhindern.

Diese Einschränkungen werden während der Erstellung und Ausführung der Richtlinie überprüft, aber nicht, wenn beliebige gespeicherte Funktionen, auf die die Abfrage verweisen kann, aktualisiert werden. Daher ist es wichtig, alle Änderungen mit Vorsicht vorzunehmen, um sicherzustellen, dass die Updaterichtlinie intakt bleibt.

Beim Verweisen auf die Source Tabelle im Query Teil der Richtlinie oder in Funktionen, auf die durch den Query Teil verwiesen wird:

  • Verwenden Sie nicht den qualifizierten Namen der Tabelle. Verwenden Sie stattdessen TableName.
  • Verwenden Sie nicht database("<DatabaseName>").TableName oder cluster("<ClusterName>").database("<DatabaseName>").TableName.
  • Verwenden Sie nicht den qualifizierten Namen der Tabelle. Verwenden Sie stattdessen TableName.
  • Verwenden Sie nicht database("<DatabaseName>").TableName oder cluster("<EventhouseName>").database("<DatabaseName>").TableName.

Das Updaterichtlinienobjekt

Eine Tabelle kann null oder mehr Aktualisierungsrichtlinienobjekte zugeordnet haben. Jedes solche Objekt wird als JSON-Eigenschaftenbehälter dargestellt, wobei die folgenden Eigenschaften definiert sind.

Eigenschaft Typ Beschreibung
IsEnabled bool Zustände, wenn update policy is true - enabled, or false - disabled
Quelle string Name der Tabelle, die den Aufruf der Updaterichtlinie auslöst
Abfrage string Eine Abfrage, die verwendet wird, um Daten für das Update zu erzeugen
IsTransactional bool Gibt an, ob die Updaterichtlinie transaktional ist oder nicht, der Standardwert ist "false". Wenn die Richtlinie transaktional ist und die Updaterichtlinie fehlschlägt, wird die Quelltabelle nicht aktualisiert.
PropagateIngestionProperties bool Gibt an, ob eigenschaften, die während der Aufnahme in die Quelltabelle angegeben wurden, z . B. Umfangstags und Erstellungszeit, auf die Zieltabelle angewendet werden.
VerwalteteIdentität string Die verwaltete Identität im Auftrag, in der die Updaterichtlinie ausgeführt wird. Die verwaltete Identität kann eine Objekt-ID oder das system reservierte Wort sein. Die Updaterichtlinie muss mit einer verwalteten Identität konfiguriert werden, wenn die Abfrage tabellen in anderen Datenbanken oder Tabellen mit einer aktivierten Sicherheitsrichtlinie auf Zeilenebene verweist. Weitere Informationen finden Sie unter Verwenden einer verwalteten Identität zum Ausführen einer Updaterichtlinie.

Hinweis

Legen Sie IsTransactionalin Produktionssystemen ":true " fest, um sicherzustellen, dass die Zieltabelle keine Daten in vorübergehenden Fehlern verliert.

Hinweis

Cascading updates are allowed, for example from table A, to table B, to table C. Wenn Updaterichtlinien jedoch zirkulär definiert sind, wird dies zur Laufzeit erkannt, und die Kette der Updates wird gekürzt. Daten werden nur einmal in jede Tabelle in der Kette aufgenommen.

Befehle für Verwaltung

Zu den Aktualisierungsrichtlinienverwaltungsbefehlen gehören:

Updaterichtlinie wird nach aufnahme initiiert

Aktualisierungsrichtlinien werden wirksam, wenn Daten in eine Quelltabelle aufgenommen oder verschoben werden, oder Soweit in einer Quelltabelle erstellt werden. Diese Aktionen können mit einem der folgenden Befehle ausgeführt werden:

Warnung

Wenn die Aktualisierungsrichtlinie als Teil eines .set-or-replace Befehls aufgerufen wird, werden standardmäßig Daten in abgeleiteten Tabellen auf die gleiche Weise wie in der Quelltabelle ersetzt. Daten gehen möglicherweise in allen Tabellen mit einer Aktualisierungsrichtlinienbeziehung verloren, wenn der replace Befehl aufgerufen wird. Verwenden Sie stattdessen .set-or-append.

Entfernen von Daten aus der Quelltabelle

Nachdem Sie Daten in die Zieltabelle aufgenommen haben, können Sie sie optional aus der Quelltabelle entfernen. Legen Sie einen Vorläufigen Löschzeitraum (0secoder 00:00:00) in der Aufbewahrungsrichtlinie der Quelltabelle und die Updaterichtlinie als Transaktion fest. Die folgenden Bedingungen gelten:

  • Die Quelldaten können nicht aus der Quelltabelle abgerufen werden.
  • Die Quelldaten bleiben im dauerhaften Speicher im Rahmen des Aufnahmevorgangs nicht erhalten.
  • Die betriebliche Leistung verbessert sich. Ressourcen nach der Aufnahme werden für Hintergrundpflegevorgänge in Umfangen in der Quelltabelle reduziert.

Hinweis

Wenn die Quelltabelle einen Vorläufigen Löschzeitraum hat 0sec (oder 00:00:00), muss eine Aktualisierungsrichtlinie, die auf diese Tabelle verweist, transaktional sein.

Auswirkungen auf die Leistung

Aktualisierungsrichtlinien können sich auf die Leistung auswirken, und die Erfassung von Datenausdehnungen wird mit der Anzahl der Zieltabellen multipliziert. Es ist wichtig, die richtlinienbezogene Abfrage zu optimieren. Sie können die Leistungsauswirkungen einer Aktualisierungsrichtlinie testen, indem Sie die Richtlinie auf bereits vorhandene Erweiterungen aufrufen, bevor Sie die Richtlinie erstellen oder ändern, oder auf der funktion, die mit der Abfrage verwendet wird.

Auswerten der Ressourcennutzung

Verwenden Sie .show querieszum Auswerten der Ressourcenauslastung (CPU, Arbeitsspeicher usw.) die folgenden Parameter:

  • Legen Sie die Source Eigenschaft, den Namen der Quelltabelle, als MySourceTable
  • Festlegen der Query Eigenschaft zum Aufrufen einer Funktion mit dem Namen MyFunction()
// '_extentId' is the ID of a recently created extent, that likely hasn't been merged yet.
let _extentId = toscalar(
    MySourceTable
    | project ExtentId = extent_id(), IngestionTime = ingestion_time()
    | where IngestionTime > ago(10m)
    | top 1 by IngestionTime desc
    | project ExtentId
);
// This scopes the source table to the single recent extent.
let MySourceTable =
    MySourceTable
    | where ingestion_time() > ago(10m) and extent_id() == _extentId;
// This invokes the function in the update policy (that internally references `MySourceTable`).
MyFunction

Transaktionseinstellungen

Die Updaterichtlinieneinstellung IsTransactional definiert, ob die Updaterichtlinie transaktional ist und das Verhalten des Richtlinienupdates wie folgt beeinflussen kann:

  • IsTransactional:false: Wenn der Wert auf den Standardwert festgelegt ist, "false", garantiert die Aktualisierungsrichtlinie nicht die Konsistenz zwischen Daten in der Quell- und Zieltabelle. Wenn eine Aktualisierungsrichtlinie fehlschlägt, werden Daten nur in die Quelltabelle und nicht in die Zieltabelle aufgenommen. In diesem Szenario ist der Aufnahmevorgang erfolgreich.
  • IsTransactional:true: Wenn der Wert auf "true" festgelegt ist, garantiert die Einstellung die Konsistenz zwischen Daten in der Quell- und Zieltabelle. Wenn eine Aktualisierungsrichtlinie fehlschlägt, werden daten nicht in die Quell- oder Zieltabelle aufgenommen. In diesem Szenario ist der Aufnahmevorgang nicht erfolgreich.

Behandeln von Fehlern

Wenn Richtlinienupdates fehlschlagen, werden sie je nach IsTransactional Einstellung true oder falseEinstellung unterschiedlich behandelt. Häufige Gründe für Updaterichtlinienfehler sind:

  • Ein Konflikt zwischen dem Abfrageausgabeschema und der Zieltabelle.
  • Abfragefehler.

Sie können Richtlinienaktualisierungsfehler mithilfe des .show ingestion failures Befehls mit dem folgenden Befehl anzeigen: In jedem anderen Fall können Sie die Aufnahme manuell wiederholen.

.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true

Beispiel für Extrahieren, Transformieren, Laden

Sie können Aktualisierungsrichtlinieneinstellungen verwenden, um Extrahieren, Transformieren, Laden (ETL) durchzuführen.

Verwenden Sie in diesem Beispiel eine Updaterichtlinie mit einer einfachen Funktion, um ETL auszuführen. Zunächst erstellen wir zwei Tabellen:

  • Die Quelltabelle – Enthält eine einzelne spalte mit Zeichenfolgentyp, in die Daten aufgenommen werden.
  • Die Zieltabelle – Enthält das gewünschte Schema. Die Updaterichtlinie ist in dieser Tabelle definiert.
  1. Erstellen wir die Quelltabelle:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Erstellen Sie als Nächstes die Zieltabelle:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Erstellen Sie dann eine Funktion zum Extrahieren von Daten:

    .create function
     with (docstring = 'Parses raw records into strongly-typed columns', folder = 'UpdatePolicyFunctions')
         ExtractMyLogs()
        {
        MySourceTable
        | parse OriginalRecord with "[" Timestamp:datetime "] [ThreadId:" ThreadId:int "] [ProcessId:" ProcessId:int "] TimeSinceStartup: " TimeSinceStartup:timespan " Message: " Message:string
        | project-away OriginalRecord
    }
    
  4. Legen Sie nun die Updaterichtlinie so fest, dass die von uns erstellte Funktion aufgerufen wird:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Um die Quelltabelle zu leeren, nachdem die Daten in die Zieltabelle aufgenommen wurden, definieren Sie die Aufbewahrungsrichtlinie für die Quelltabelle, 0s als SoftDeletePeriod0s.

     .alter-merge table MySourceTable policy retention softdelete = 0s