.replace extents , polecenie

To polecenie jest uruchamiane w kontekście określonej bazy danych. Przenosi określone zakresy z tabel źródłowych do tabeli docelowej, a następnie usuwa określone zakresy z tabeli docelowej. Wszystkie operacje usuwania i przenoszenia są wykonywane w jednej transakcji.

Uwaga

Fragmenty danych są nazywane zakresami, a wszystkie polecenia używają nazwy "extent" lub "extents" jako synonimu. Aby uzyskać więcej informacji na temat zakresów, zobacz Omówienie zakresów (fragmentów danych).

Uprawnienia

Musisz mieć co najmniej uprawnienia tabeli Administracja dla tabel źródłowych i docelowych.

Ograniczenia

  • Zarówno tabele źródłowe, jak i docelowe muszą znajdować się w bazie danych kontekstowej.
  • Wszystkie zakresy określone przez tabelę ExtentsToDropQuery powinny należeć do tabeli docelowej.
  • Wszystkie kolumny w tabelach źródłowych powinny istnieć w tabeli docelowej o tej samej nazwie i typie danych.
  • Jeśli tabela docelowa jest tabelą źródłową zmaterializowanego widoku, polecenie może zakończyć się niepowodzeniem, ponieważ zmaterializowany widok nie przetworzy rekordów w przeniesionych zakresach. Zobacz więcej szczegółów na stronie zmaterializowanych ograniczeń widoków . Ten błąd można obejść, ustawiając nowy czas pozyskiwania podczas przenoszenia polecenia. Zobacz setNewIngestionTime w obsługiwanych właściwościach.

Składnia

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

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
async string Jeśli to określone, polecenie jest uruchamiane asynchronicznie.
Destinationtablename string ✔️ Nazwa tabeli, do której mają być przenoszone zakresy.
OdDate datetime Data rozpoczęcia okna zapytania.
ToDate datetime Data zakończenia okna zapytania.
PropertyName, PropertyValue string Co najmniej jedna obsługiwana właściwości.
ExtentsToDropQuery string ✔️ Wyniki tego zapytania określają identyfikatory zakresu, które powinny zostać usunięte z tabeli docelowej. Powinien zwrócić zestaw rekordów z kolumną o nazwie "ExtentId".
ExtentsToMoveQuery string ✔️ Wyniki tego zapytania język zapytań Kusto (KQL) określają tabele źródłowe i identyfikatory zakresu, które mają zostać przeniesione do tabeli docelowej. Powinien zwrócić zestaw rekordów z kolumnami o nazwie "ExtentId" i "TableName".

Obsługiwane właściwości

Nazwa właściwości Typ Wymagane Opis
setNewIngestionTime bool Jeśli ustawiono truewartość , zostanie przypisany nowy czas pozyskiwania do wszystkich rekordów w zakresach, które są przenoszone. Jest to przydatne, gdy rekordy powinny być przetwarzane przez obciążenia zależne od kursorów bazy danych, takich jak zmaterializowane widoki i ciągły eksport danych.
extentCreatedOnFrom datetime ✔️ Zastosuj w zakresach utworzonych po tym punkcie w czasie.
extentCreatedOnTo datetime ✔️ Zastosuj do zakresów utworzonych przed tym punktem w czasie.

Uwaga

Aby uzyskać lepszą wydajność, ustaw zakresCreatedOnFrom i extentCreatedOnTo parametrów na najmniejszy możliwy zakres.

Zwraca

Gdy polecenie jest uruchamiane synchronicznie, zwracana jest tabela z następującym schematem.

Parametr wyjściowy Typ Opis
OriginalExtentId string Unikatowy identyfikator (GUID) dla oryginalnego zakresu w tabeli źródłowej, który został przeniesiony do tabeli docelowej lub zakres w tabeli docelowej, który został porzucony.
ResultExtentId string Unikatowy identyfikator (GUID) dla zakresu wyników, który został przeniesiony z tabeli źródłowej do tabeli docelowej. Puste, jeśli zakres został porzucony z tabeli docelowej. Po niepowodzeniu: "Niepowodzenie".
Szczegóły string Zawiera szczegóły błędu, jeśli operacja zakończy się niepowodzeniem.

Gdy polecenie jest uruchamiane asynchronicznie, zwracany jest identyfikator operacji (GUID). Monitoruj stan operacji za pomocą polecenia .show operations i pobierz wyniki pomyślnego wykonania za pomocą polecenia .show operation details .

Uwaga

Polecenie zakończy się niepowodzeniem, jeśli zakresy zwrócone przez zapytanie ExtentsToDropQuery nie istnieją w tabeli docelowej. Może się to zdarzyć, jeśli zakresy zostały scalone przed wykonaniem polecenia zamiany. Aby upewnić się, że polecenie kończy się niepowodzeniem w braku zakresów, sprawdź, czy zapytanie zwraca oczekiwane identyfikatory ExtentId. Przykład nr 1 poniżej zakończy się niepowodzeniem, jeśli zakres spadku nie istnieje w tabeli MyOtherTable. Przykład nr 2 powiedzie się jednak, mimo że zakres spadku nie istnieje, ponieważ kwerenda do porzucania nie zwróciła żadnych identyfikatorów zakresu.

Przykłady

Przenieś wszystkie zakresy w określonym zakresie czasu tworzenia z dwóch tabel

Przenieś wszystkie zakresy z dwóch określonych tabel (MyTable1, MyTable2) w określonym zakresie czasu tworzenia do tabeli MyOtherTablei upuść wszystkie zakresy oznaczone MyOtherTable tagiem 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
    }

Przykładowe dane wyjściowe

OriginalExtentId ResultExtentId Szczegóły
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 97afea1-59ff-4312-b06b-08f42187872f
2dfdef64-62a3-4950-a130-96b5b1083b5a 0fb7f3da-5e28-4f09-a000-e62eb41592df

Przenieś wszystkie zakresy w określonym zakresie czasu tworzenia z jednej tabeli do innej, porzucanie określonego zakresu

Przenieś wszystkie zakresy w określonym zakresie czasu tworzenia z jednej określonej tabeli (MyTable1) do tabeli MyOtherTablei upuść określony zakres w MyOtherTableelemecie , według jego identyfikatora:

.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 
    }

Implementowanie logiki idempotentnego

Zaimplementuj logikę idempotentną, aby usługa Kusto spadała zakresy z tabeli t_dest tylko wtedy, gdy istnieją zakresy, które mają być przenoszone z tabeli t_source do tabeli 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
}