Overzicht van updatebeleid
Updatebeleidsregels zijn automatiseringsmechanismen die worden geactiveerd wanneer nieuwe gegevens naar een tabel worden geschreven. Ze elimineren de noodzaak van speciale indeling door een query uit te voeren om de opgenomen gegevens te transformeren en het resultaat op te slaan in een doeltabel. Er kunnen meerdere updatebeleidsregels worden gedefinieerd voor één tabel, waardoor verschillende transformaties mogelijk zijn en gegevens kunnen worden opgeslagen in meerdere tabellen tegelijk. De doeltabellen kunnen een ander schema, bewaarbeleid en ander beleid hebben dan de brontabel.
Een brontabel voor tracering met een hoge snelheid kan bijvoorbeeld gegevens bevatten die zijn opgemaakt als een kolom met vrije tekst. De doeltabel kan specifieke traceringslijnen bevatten, met een goed gestructureerd schema dat is gegenereerd op basis van een transformatie van de gegevens in vrije tekst van de brontabel met behulp van de parseeroperator. Zie veelvoorkomende scenario's voor meer informatie.
In het volgende diagram ziet u een algemene weergave van een updatebeleid. Er worden twee updatebeleidsregels weergegeven die worden geactiveerd wanneer gegevens worden toegevoegd aan de tweede brontabel en leiden tot het toevoegen van getransformeerde gegevens aan de twee doeltabellen.
Voor een updatebeleid gelden dezelfde beperkingen en best practices als voor normale opname. Het beleid wordt uitgeschaald op basis van de clustergrootte en is efficiënter bij het verwerken van bulkopname.
Notitie
- De bron- en doeltabel moeten zich in dezelfde database bevinden.
- Het schema van de functie updatebeleid en het schema van de doeltabel moeten overeenkomen in kolomnamen, typen en volgorde.
Het opnemen van geformatteerde gegevens verbetert de prestaties en CSV heeft de voorkeur omdat het een goed gedefinieerde indeling is. Soms hebt u echter geen controle over de indeling van de gegevens of wilt u opgenomen gegevens verrijken, bijvoorbeeld door records samen te voegen met een statische dimensietabel in uw database.
Beleidsquery bijwerken
Als het updatebeleid is gedefinieerd voor de doeltabel, kunnen meerdere query's worden uitgevoerd op gegevens die zijn opgenomen in een brontabel. Als er meerdere updatebeleidsregels zijn, is de volgorde van uitvoering niet noodzakelijkerwijs bekend.
Querybeperkingen
- De query met betrekking tot beleid kan opgeslagen functies aanroepen, maar:
- Er kunnen geen query's tussen clusters worden uitgevoerd.
- Het heeft geen toegang tot externe gegevens of externe tabellen.
- Het kan geen bijschriften maken (met behulp van een invoegtoepassing).
- De query heeft geen leestoegang tot tabellen waarvoor het beleid RestrictedViewAccess is ingeschakeld.
- Zie Beperkingen voor streamingopname voor beperkingen van updatebeleid in streamingopname.
Waarschuwing
Een onjuiste query kan gegevensopname in de brontabel verhinderen. Het is belangrijk te weten dat beperkingen, evenals de compatibiliteit tussen de queryresultaten en het schema van de bron- en doeltabellen, een onjuiste query kunnen veroorzaken om gegevensopname in de brontabel te voorkomen.
Deze beperkingen worden gevalideerd tijdens het maken en uitvoeren van het beleid, maar niet wanneer willekeurige opgeslagen functies waarnaar de query mogelijk verwijst, worden bijgewerkt. Daarom is het van cruciaal belang om wijzigingen met de nodige voorzichtigheid aan te brengen om ervoor te zorgen dat het updatebeleid intact blijft.
Wanneer u verwijst naar de Source
tabel in het Query
deel van het beleid of in functies waarnaar wordt verwezen door het Query
onderdeel:
- Gebruik niet de gekwalificeerde naam van de tabel. Gebruik
TableName
in plaats daarvan . - Gebruik of
cluster("ClusterName").database("DatabaseName").TableName
nietdatabase("DatabaseName").TableName
.
Het beleidsobject bijwerken
Aan een tabel kunnen nul of meer updatebeleidsobjecten zijn gekoppeld. Elk dergelijk object wordt weergegeven als een JSON-eigenschappenverzameling, waarbij de volgende eigenschappen zijn gedefinieerd.
Eigenschap | Type | Description |
---|---|---|
IsEnabled | bool |
Geeft aan of het updatebeleid waar is - ingeschakeld of onwaar - uitgeschakeld |
Bron | string |
Naam van de tabel die het aanroepen van het updatebeleid activeert |
Query’s uitvoeren | string |
Een query die wordt gebruikt om gegevens voor de update te produceren |
IsTransactional | bool |
Geeft aan of het updatebeleid transactioneel is of niet, de standaardwaarde is onwaar. Als het beleid transactioneel is en het updatebeleid mislukt, wordt de brontabel niet bijgewerkt. |
PropagateIngestionProperties | bool |
Statussen als eigenschappen die zijn opgegeven tijdens de opname in de brontabel, zoals matetags en aanmaaktijd, van toepassing zijn op de doeltabel. |
ManagedIdentity | string |
De beheerde identiteit namens wie het updatebeleid wordt uitgevoerd. De beheerde identiteit kan een object-id of het system gereserveerde woord zijn. Het updatebeleid moet worden geconfigureerd met een beheerde identiteit wanneer de query verwijst naar tabellen in andere databases of tabellen met ingeschakeld beveiligingsbeleid op rijniveau. Zie Een beheerde identiteit gebruiken om een updatebeleid uit te voeren voor meer informatie. |
Notitie
Stel in productiesystemen :true in IsTransactional
om ervoor te zorgen dat de doeltabel geen gegevens verliest bij tijdelijke fouten.
Notitie
Trapsgewijze updates zijn toegestaan, bijvoorbeeld van tabel A naar tabel B, naar tabel C. Als updatebeleid echter op een kringvormige manier wordt gedefinieerd, wordt dit tijdens runtime gedetecteerd en wordt de keten van updates geknipt. Gegevens worden slechts eenmaal opgenomen in elke tabel in de keten.
Opdrachten voor beheer
Opdrachten voor updatebeleidsbeheer zijn onder andere:
.show table *TableName* policy update
toont het huidige updatebeleid van een tabel..alter table *TableName* policy update
definieert het huidige updatebeleid van een tabel..alter-merge table *TableName* policy update
Voegt definities toe aan het huidige updatebeleid van een tabel..delete table *TableName* policy update
hiermee verwijdert u het huidige updatebeleid van een tabel.
Updatebeleid wordt gestart na opname
Updatebeleid wordt van kracht wanneer gegevens worden opgenomen of verplaatst naar een brontabel, of wanneer er gebieden worden gemaakt in een brontabel, met behulp van een van de volgende opdrachten:
- .ingest (pull)
- .ingest (inline)
- .set | .append | .set-or-append | .set-or-replace
- .move extents
- .replace extents
- De
PropagateIngestionProperties
opdracht wordt alleen van kracht bij opnamebewerkingen. Wanneer het updatebeleid wordt geactiveerd als onderdeel van een.move extents
opdracht of.replace extents
, heeft deze optie geen effect.
- De
Waarschuwing
Wanneer het updatebeleid wordt aangeroepen als onderdeel van een .set-or-replace
opdracht, worden gegevens in afgeleide tabellen standaard op dezelfde manier vervangen als in de brontabel.
Gegevens kunnen verloren gaan in alle tabellen met een updatebeleidsrelatie als de replace
opdracht wordt aangeroepen.
Overweeg in plaats daarvan het gebruik .set-or-append
.
Gegevens verwijderen uit brontabel
Nadat u gegevens hebt opgenomen in de doeltabel, kunt u deze desgewenst verwijderen uit de brontabel. Stel een periode voor voorlopig verwijderen van (of 00:00:00
) in het bewaarbeleid van 0sec
de brontabel in en het updatebeleid als transactioneel. De volgende voorwaarden zijn van toepassing:
- Er kunnen geen query's worden uitgevoerd op de brongegevens uit de brontabel
- De brongegevens blijven niet behouden in duurzame opslag als onderdeel van de opnamebewerking
- Operationele prestaties verbeteren. Resources na opname worden verminderd voor opschoningsbewerkingen op de achtergrond op gebieden in de brontabel.
Notitie
Wanneer de brontabel een periode voor voorlopig verwijderen heeft van 0sec
(of 00:00:00
), moet elk updatebeleid dat verwijst naar deze tabel transactioneel zijn.
Invloed op de prestaties
Updatebeleidsregels kunnen van invloed zijn op de prestaties van het cluster en de opname van gegevens wordt vermenigvuldigd met het aantal doeltabellen. Het is belangrijk om de query met betrekking tot beleid te optimaliseren. U kunt de impact op de prestaties van een updatebeleid testen door het beleid aan te roepen voor bestaande gebieden, voordat u het beleid maakt of wijzigt, of op de functie die wordt gebruikt met de query.
Resourcegebruik evalueren
Gebruik .show queries
, om het resourcegebruik (CPU, geheugen, enzovoort) te evalueren met de volgende parameters:
- Stel de
Source
eigenschap, de naam van de brontabel, in alsMySourceTable
- Stel de eigenschap in om een functie met de
Query
naam aan te roepenMyFunction()
// '_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
Fouten
Met de standaardinstelling van IsTransactional:
false
kunnen gegevens nog steeds worden opgenomen in de brontabel, zelfs als het beleid niet wordt uitgevoerd.
Instelling IsTransactional:
true
garandeert consistentie tussen gegevens in de bron- en doeltabel. Als de beleidsvoorwaarden echter mislukken, worden er geen gegevens opgenomen in de brontabel. Afhankelijk van de omstandigheden worden soms gegevens opgenomen in de brontabel, maar niet in de doeltabel. Als uw beleid echter onjuist is gedefinieerd of als er een schema niet overeenkomt, worden gegevens niet opgenomen in de bron- of doeltabel. Een niet-overeenkomende overeenkomst tussen het queryuitvoerschema en de doeltabel kan bijvoorbeeld worden veroorzaakt door het verwijderen van een kolom uit de doeltabel.
U kunt fouten weergeven met behulp van de .show ingestion failures
opdracht .
.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true
Behandeling van fouten
Niet-transactioneel beleid
Als dit is ingesteld op IsTransactional:
false
, wordt elke fout bij het uitvoeren van het beleid genegeerd. Opname wordt niet automatisch opnieuw geprobeerd. U kunt handmatig opnieuw opnemen.
Transactioneel beleid
Als de opnamemethode is ingesteld op IsTransactional:
true
, wordt pull
de Gegevensbeheer service betrokken en wordt de opname automatisch opnieuw geprobeerd volgens de volgende voorwaarden:
- Nieuwe pogingen worden uitgevoerd totdat aan een van de volgende configureerbare limietinstellingen is voldaan:
DataImporterMaximumRetryPeriod
ofDataImporterMaximumRetryAttempts
- De instelling is standaard
DataImporterMaximumRetryPeriod
twee dagen enDataImporterMaximumRetryAttempts
is 10 - De uitstelperiode begint bij 2 minuten en verdubbelt. Dus de wachttijd begint met 2 minuten en neemt vervolgens toe tot 4 minuten, tot 8 minuten, tot 16 minuten, enzovoort.
In alle andere gevallen kunt u handmatig opnieuw opnemen.
Voorbeeld van extraheren, transformeren, laden
U kunt instellingen voor updatebeleid gebruiken om etl (extraheren, transformeren, laden) uit te voeren.
In dit voorbeeld gebruikt u een updatebeleid met een eenvoudige functie om ETL uit te voeren. Eerst maken we twee tabellen:
- De brontabel: bevat één kolom met het type tekenreeks waarin gegevens worden opgenomen.
- De doeltabel: bevat het gewenste schema. Het updatebeleid is gedefinieerd in deze tabel.
Laten we de brontabel maken:
.create table MySourceTable (OriginalRecord:string)
Maak vervolgens de doeltabel:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
Maak vervolgens een functie om gegevens te extraheren:
.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 }
Stel nu het updatebeleid in om de functie aan te roepen die we hebben gemaakt:
.alter table MyTargetTable policy update @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
Als u de brontabel wilt leegmaken nadat de gegevens zijn opgenomen in de doeltabel, definieert u het bewaarbeleid voor de brontabel met 0s als .
SoftDeletePeriod
.alter-merge table MySourceTable policy retention softdelete = 0s
Gerelateerde inhoud
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor