Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✅Azure Data Explorer
To polecenie usuwa i przenosi zakresy w jednej transakcji w kontekście określonej bazy danych. Polecenie usuwa wszystkie określone zakresy z tabeli docelowej i przenosi określone zakresy z tabel źródłowych do tabeli docelowej.
Uwaga
Fragmenty danych są nazywane zakresami, a wszystkie polecenia używają "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 administratora tabeli dla tabel źródłowych i docelowych.
Ograniczenia
- Tabele źródłowe i docelowe muszą znajdować się w bazie danych kontekstu.
- Wszystkie zakresy określone przez 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 może 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
setNewIngestionTimew obsługiwanych właściwościach.
Składnia
.replace[async] extents in table DestinationTableName [ with (PropertyName = PropertyValue [, ...]] <|{)ExtentsToDropQuery ExtentsToMoveQuery},{}
Dowiedz się więcej na temat konwencji składni.
Parametry
| Nazwisko | Type | Wymagania | opis |
|---|---|---|---|
async |
string |
Jeśli zostanie określony, 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 muszą zawierać kolumnę ExtentId zawierającą identyfikatory zakresu, które mają zostać usunięte z tabeli docelowej. |
| ExtentsToMoveQuery | string |
✔️ | Wyniki tego zapytania muszą zawierać ExtentId kolumny i TableName , które zawierają tabele źródłowe i identyfikatory zakresu, które mają zostać przeniesione do tabeli docelowej. |
Obsługiwane właściwości
| Nazwa właściwości | Typ | Wymagania | 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 są przetwarzane przez obciążenia zależne od kursorów bazy danych, takich jak zmaterializowane widoki i ciągły eksport danych. |
|
extentCreatedOnFrom |
datetime |
✔️ | Zastosuj do zakresów utworzonych po tym punkcie w czasie. |
extentCreatedOnTo |
datetime |
✔️ | Zastosuj do zakresów utworzonych przed tym punktem w czasie. |
Uwaga
Aby uzyskać lepszą wydajność, ustaw parametr extentCreatedOnFrom i extentCreatedOnTo do najmniejszego możliwego zakresu.
Zwraca
Gdy polecenie jest uruchamiane synchronicznie, zwracana jest tabela z następującym schematem.
| Parametr wyjściowy | Type | 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óra została porzucona. |
| ResultExtentId | string |
Unikatowy identyfikator (GUID) dla zakresu wyników został przeniesiony z tabeli źródłowej do tabeli docelowej. Puste, jeśli zakres został porzucony z tabeli docelowej. Po awarii: "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ę tak zdarzyć, jeśli zakresy zostały scalone przed wykonaniem polecenia replace. Aby upewnić się, że polecenie kończy się niepowodzeniem w przypadku brakujących zakresów, sprawdź, czy zapytanie zwraca oczekiwane identyfikatory ExtentId. Pierwszy przykład zakończy się niepowodzeniem, jeśli zakres spadku nie istnieje w tabeli MyOtherTable. Drugi przykład powiedzie się jednak, mimo że zakres spadku nie istnieje, ponieważ zapytanie do porzucenia nie zwróciło ż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-b24c65aa687 | |
| 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 |
Przenieś wszystkie zakresy w określonym zakresie czasu tworzenia z jednej tabeli do innej, upuść określony zakres
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 idempotentnych
Zaimplementuj logikę idempotentną, aby usługa Kusto usuwała zakresy z tabeli t_dest tylko wtedy, gdy istnieją zakresy umożliwiające przejście 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
}