Dela via


Kommandot .replace extents

Det här kommandot körs i kontexten för en specifik databas. Den flyttar de angivna utsträckningarna från källtabellerna till måltabellen och släpper sedan de angivna utsträckningarna från måltabellen. Alla släpp- och flyttåtgärder utförs i en enda transaktion.

Anteckning

Datashards kallas omfattningar och alla kommandon använder "extent" eller "extents" som synonym. Mer information om omfattningar finns i Översikt över omfattningar (datashards).

Behörigheter

Du måste ha minst table Admin behörigheter för käll- och måltabellerna.

Begränsningar

  • Både käll- och måltabeller måste finnas i kontextdatabasen.
  • Alla utsträckningar som anges av ExtentsToDropQuery förväntas tillhöra måltabellen.
  • Alla kolumner i källtabellerna förväntas finnas i måltabellen med samma namn och datatyp.
  • Om måltabellen är en källtabell i en materialiserad vy kan kommandot misslyckas eftersom den materialiserade vyn inte bearbetar posterna i de flyttade utsträckningarna. Mer information finns på sidan med begränsningar för materialiserade vyer . Du kan lösa det här felet genom att ange en ny inmatningstid under flyttkommandot. Se setNewIngestionTime i egenskaper som stöds.

Syntax

.replace[async] extentstableinDestinationTableName [ with(PropertyName=PropertyValue [, ...])] <|{ExtentsToDropQuery},{ExtentsToMoveQuery}

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
async string Om det anges körs kommandot asynkront.
DestinationTableName string ✔️ Namnet på den tabell som utsträckningarna ska flyttas till.
FromDate datetime Startdatum för frågefönstret.
ToDate datetime Slutdatum för frågefönstret.
PropertyName, PropertyValue string En eller flera egenskaper som stöds.
ExtentsToDropQuery string ✔️ Resultatet av den här frågan anger i vilken utsträckning ID:t som ska tas bort från måltabellen. Ska returnera en postuppsättning med en kolumn med namnet "ExtentId".
ExtentsToMoveQuery string ✔️ Resultatet av den här KQL-frågan (Kusto-frågespråk) anger källtabellerna och omfattningens ID:n som ska flyttas till måltabellen. Ska returnera en postuppsättning med kolumnerna "ExtentId" och "TableName".

Egenskaper som stöds

Egenskapsnamn Typ Obligatorisk Beskrivning
setNewIngestionTime bool Om värdet trueär tilldelas en ny inmatningstid till alla poster i de utsträckningar som flyttas. Detta är användbart när poster ska bearbetas av arbetsbelastningar som är beroende av databasmarkörer, till exempel materialiserade vyer och kontinuerlig dataexport.
extentCreatedOnFrom datetime ✔️ Tillämpa på omfattningar som skapats efter den här tidpunkten.
extentCreatedOnTo datetime ✔️ Tillämpa på omfattningar som skapats före den här tidpunkten.

Anteckning

För bättre prestanda anger du extentCreatedOnFrom och extentCreatedOnTo-parametrar till minsta möjliga intervall.

Returer

När kommandot körs synkront returneras en tabell med följande schema.

Utdataparameter Typ Description
OriginalExtentId string En unik identifierare (GUID) för den ursprungliga omfattningen i källtabellen som har flyttats till måltabellen eller omfattningen i måltabellen som har tagits bort.
ResultExtentId string En unik identifierare (GUID) för den resultatmängd som har flyttats från källtabellen till måltabellen. Tom om omfattningen togs bort från måltabellen. Vid fel: "Misslyckades".
Information string Innehåller felinformationen om åtgärden misslyckas.

När kommandot körs asynkront returneras ett åtgärds-ID (GUID). Övervaka åtgärdens status med kommandot .show operations och hämta resultatet av en lyckad körning med kommandot .show-åtgärdsinformation .

Anteckning

Kommandot misslyckas om omfattningar som returneras av Frågan ExtentsToDropQuery inte finns i måltabellen. Detta kan inträffa om omfattningarna sammanfogades innan kommandot replace kördes. Kontrollera att kommandot misslyckas i saknade omfattningar genom att kontrollera att frågan returnerar förväntade ExtentIds. Exempel 1 nedan misslyckas om det inte finns någon utsträckning att släppa i tabellen MyOtherTable. Exempel 2 lyckas dock även om det inte finns någon utsträckning att släppa, eftersom frågan som ska tas bort inte returnerade några utsträcknings-ID:er.

Exempel

Flytta alla områden i ett angivet tidsintervall för skapande från två tabeller

Flytta alla omfattningar från två specifika tabeller (MyTable1, MyTable2) i ett angivet tidsintervall för skapande till tabellen MyOtherTableoch släpp alla omfattningar i MyOtherTable taggade med drop-by:MyTag:

.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        .show table MyOtherTable extents where tags has 'drop-by:MyTag'
    },
    {
        .show tables (MyTable1,MyTable2) extents
    }

Exempelutdata

OriginalExtentId ResultExtentId Information
e133f050-a1e2-4dad-8552-1f5cf47cab69 0d96ab2d-9dd2-4d2c-a45e-b24c65aa6687
cdbeb35b-87ea-499f-b545-defbae091b57 a90a303c-8a14-4207-8f35-d8ea94ca45be
4fcb4598-9a31-4614-903c-0c67c286da8c 97aafea1-59ff-4312-b06b-08f42187872f
2dfdef64-62a3-4950-a130-96b5b1083b5a 0fb7f3da-5e28-4f09-a000-e62eb41592df

Flytta alla områden i ett angivet tidsintervall för skapande från en tabell till en annan, släpp specifik omfattning

Flytta alla områden i ett angivet tidsintervall för skapande från en specifik tabell (MyTable1) till tabellen MyOtherTableoch släpp en viss utsträckning i MyOtherTable, med dess ID:

.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        print ExtentId = "2cca5844-8f0d-454e-bdad-299e978be5df"
    },
    {
        .show table MyTable1 extents 
    }
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        .show table MyOtherTable extents
        | where ExtentId == guid(2cca5844-8f0d-454e-bdad-299e978be5df) 
    },
    {
        .show table MyTable1 extents 
    }

Implementera en idempotent-logik

Implementera en idempotent-logik så att Kusto tar bort omfattningar från tabellen t_dest endast om det finns utrymme att flytta från tabell t_source till tabell t_dest:

.replace async extents in table t_dest with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
    let any_extents_to_move = toscalar( 
        t_source
        | where extent_tags() has 'drop-by:blue'
        | summarize count() > 0
    );
    let extents_to_drop =
        t_dest
        | where any_extents_to_move and extent_tags() has 'drop-by:blue'
        | summarize by ExtentId = extent_id()
    ;
    extents_to_drop
},
{
    let extents_to_move = 
        t_source
        | where extent_tags() has 'drop-by:blue'
        | summarize by ExtentId = extent_id(), TableName = 't_source'
    ;
    extents_to_move
}