.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
] extents
in
table
DestinationTableName [ 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 true wartość , 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 MyOtherTable
i 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 MyOtherTable
i upuść określony zakres w MyOtherTable
elemecie , 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
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla