Příkaz Rozsahy .replace
Platí pro: ✅Azure Data Explorer
Tento příkaz zahodí a přesune rozsahy v jedné transakci v kontextu konkrétní databáze. Příkaz zahodí všechny zadané rozsahy z cílové tabulky a přesune zadané rozsahy ze zdrojových tabulek do cílové tabulky.
Poznámka:
Horizontální oddíly dat se nazývají rozsahy a všechny příkazy používají jako synonymum "extent" nebo "extents". Další informace o rozsahech najdete v přehledu rozsahů (horizontálních oddílů dat).
Oprávnění
Pro zdrojové a cílové tabulky musíte mít alespoň oprávnění správce tabulky.
Omezení
- Zdrojové i cílové tabulky musí být v kontextové databázi.
- Očekává se, že všechny rozsahy určené parametrem ExtentsToDropQuery budou patřit do cílové tabulky.
- Očekává se, že všechny sloupce ve zdrojových tabulkách budou existovat v cílové tabulce se stejným názvem a datovým typem.
- Pokud je cílová tabulka zdrojovou tabulkou materializovaného zobrazení, příkaz může selhat, protože materializované zobrazení nemůže zpracovat záznamy v přesunutých rozsahech. Další podrobnosti najdete na stránce omezení materializovaných zobrazení. Tuto chybu můžete obejít nastavením nové doby příjmu dat během příkazu pro přesunutí. Viz
setNewIngestionTime
podporované vlastnosti.
Syntaxe
.replace
[async
] extents
in
table
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...]] <|
{
)
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
async |
string |
Pokud je zadaný, příkaz se spustí asynchronně. | |
DestinationTableName | string |
✔️ | Název tabulky, do které se mají rozsahy přesunout. |
FromDate | datetime |
Počáteční datum okna dotazu. | |
ToDate | datetime |
Koncové datum okna dotazu. | |
PropertyName, PropertyValue | string |
Jedna nebo více podporovaných vlastností. | |
ExtentsToDropQuery | string |
✔️ | Výsledky tohoto dotazu musí obsahovat ExtentId sloupec, který obsahuje ID rozsahu, které se mají z cílové tabulky odebrat. |
ExtentsToMoveQuery | string |
✔️ | Výsledky tohoto dotazu musí obsahovat ExtentId sloupce TableName , které obsahují zdrojové tabulky a ID rozsahu, které se mají přesunout do cílové tabulky. |
Podporované vlastnosti
Název vlastnosti | Typ | Požadováno | Popis |
---|---|---|---|
setNewIngestionTime |
bool |
Pokud je nastavená hodnota true , přiřadí se nový čas příjmu dat ke všem záznamům v rozsahu, který se přesouvá. To je užitečné, když jsou záznamy zpracovány úlohami, které závisí na kurzorech databáze, jako jsou materializovaná zobrazení a průběžný export dat. |
|
extentCreatedOnFrom |
datetime |
✔️ | Platí pro rozsahy vytvořené po tomto bodu v čase. |
extentCreatedOnTo |
datetime |
✔️ | Platí pro rozsahy vytvořené před tímto bodem v čase. |
Poznámka:
Pro zajištění lepšího výkonu nastavte parametry extentCreatedOnFrom a extentCreatedOnTo na nejmenší možný rozsah.
Návraty
Při synchronním spuštění příkazu se vrátí tabulka s následujícím schématem.
Výstupní parametr | Typ | Popis |
---|---|---|
OriginalExtentId | string |
Jedinečný identifikátor (GUID) pro původní rozsah zdrojové tabulky, který byl přesunut do cílové tabulky, nebo rozsah v cílové tabulce, která byla vyřazena. |
ResultExtentId | string |
Jedinečný identifikátor (GUID) pro rozsah výsledků přesunutý ze zdrojové tabulky do cílové tabulky. Prázdné, pokud došlo k vyřazení rozsahu z cílové tabulky. Při selhání se nezdařilo. |
Detaily | string |
Obsahuje podrobnosti o selhání, pokud operace selže. |
Při asynchronním spuštění příkazu se vrátí ID operace (GUID). Pomocí příkazu operace .show monitorujte stav operace a načtěte výsledky úspěšného spuštění pomocí příkazu Podrobnosti operace .show.
Poznámka:
Příkaz selže, pokud v cílové tabulce neexistují rozsahy vrácené dotazem ExtentsToDropQuery . K tomu může dojít v případě, že se rozsahy sloučily před provedením příkazu replace. Pokud se chcete ujistit, že příkaz selže v chybějících rozsahech, zkontrolujte, jestli dotaz vrátí očekávané id rozsahu. První příklad selže, pokud v tabulce MyOtherTable neexistuje rozsah poklesu. Druhý příklad však bude úspěšný, i když rozsah poklesu neexistuje, protože dotaz, který se má vypustit, nevrátil žádné ID rozsahu.
Příklady
Přesunutí všech rozsahů v zadaném časovém rozsahu vytváření ze dvou tabulek
Přesuňte všechny rozsahy ze dvou konkrétních tabulek (MyTable1
, ) v zadaném časovém rozsahu vytváření do tabulky MyOtherTable
a odstraňte všechny rozsahy označené drop-by:MyTag
MyOtherTable
MyTable2
:
.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
}
Ukázkový výstup
OriginalExtentId | ResultExtentId | Detaily |
---|---|---|
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 |
Přesunutí všech rozsahů v zadaném časovém rozsahu vytváření z jedné tabulky do jiné, přetažení konkrétního rozsahu
Přesuňte všechny rozsahy v zadaném časovém rozsahu vytváření z jedné konkrétní tabulky (MyTable1
) do tabulky MyOtherTable
a přesuňte konkrétní rozsah MyOtherTable
podle jeho 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
}
Implementace idempotentní logiky
Implementujte idempotentní logiku tak, aby Kusto zahodil rozsahy z tabulky t_dest
pouze v případě, že existuje rozsah pro přesun z tabulky t_source
do tabulky 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
}