.replace extents , polecenie
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
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 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 true wartość , 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 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-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 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 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
}