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.

Diagram toont een overzicht van het updatebeleid.

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 TableNamein plaats daarvan .
  • Gebruik of cluster("ClusterName").database("DatabaseName").TableNamenietdatabase("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 IsTransactionalom 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:

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:

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 als MySourceTable
  • Stel de eigenschap in om een functie met de Query naam aan te roepen 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

Fouten

Met de standaardinstelling van IsTransactional:falsekunnen 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 pullde 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 of DataImporterMaximumRetryAttempts
  • De instelling is standaard DataImporterMaximumRetryPeriod twee dagen en DataImporterMaximumRetryAttemptsis 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.
  1. Laten we de brontabel maken:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Maak vervolgens de doeltabel:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. 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
    }
    
  4. 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}]'
    
  5. 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