Ü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.
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 habenviewer
. 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.alter
table
TableNamepolicy
streamingingestion
PolicyObject, 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
odercluster("<ClusterName>").database("<DatabaseName>").TableName
.
- Verwenden Sie nicht den qualifizierten Namen der Tabelle. Verwenden Sie stattdessen
TableName
. - Verwenden Sie nicht
database("<DatabaseName>").TableName
odercluster("<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 IsTransactional
in 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:
-
.show table *TableName* policy update
zeigt die aktuelle Updaterichtlinie einer Tabelle an. -
.alter table *TableName* policy update
definiert die aktuelle Updaterichtlinie einer Tabelle. -
.alter-merge table *TableName* policy update
fügt Definitionen an die aktuelle Updaterichtlinie einer Tabelle an. -
.delete table *TableName* policy update
löscht die aktuelle Updaterichtlinie einer Tabelle.
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:
- .ingest (Pull)
- .ingest (Inline)
- .set | .append | .set-or-append | .set-or-replace
- .move extents
-
.replace extents
- Der
PropagateIngestionProperties
Befehl wird nur in Aufnahmevorgängen wirksam. Wenn die Updaterichtlinie als Teil eines.move extents
oder.replace extents
Befehls ausgelöst wird, hat diese Option keine Auswirkung.
- Der
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 (0sec
oder 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 queries
zum Auswerten der Ressourcenauslastung (CPU, Arbeitsspeicher usw.) die folgenden Parameter:
- Legen Sie die
Source
Eigenschaft, den Namen der Quelltabelle, alsMySourceTable
- Festlegen der
Query
Eigenschaft zum Aufrufen einer Funktion mit dem NamenMyFunction()
// '_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 false
Einstellung 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.
Erstellen wir die Quelltabelle:
.create table MySourceTable (OriginalRecord:string)
Erstellen Sie als Nächstes die Zieltabelle:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
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 }
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}]'
Um die Quelltabelle zu leeren, nachdem die Daten in die Zieltabelle aufgenommen wurden, definieren Sie die Aufbewahrungsrichtlinie für die Quelltabelle, 0s als
SoftDeletePeriod
0s..alter-merge table MySourceTable policy retention softdelete = 0s