.replace extents コマンド
適用対象: ✅Azure データ エクスプローラー
このコマンドは、特定のデータベースのコンテキスト内で 1 つのトランザクション内のエクステントを削除して移動します。 このコマンドは、指定したエクステントを宛先テーブルから削除し、指定されたエクステントをソース テーブルからコピー先テーブルに移動します。
Note
データ シャードは extents と呼ばれ、すべてのコマンドでシノニムとして "エクステント" または "エクステント" が使用されます。 エクステント*の詳細については、エクステント* (データ シャード*) の概要を参照してください。
アクセス許可
ソース テーブルと変換先テーブルに対する少なくとも Table Admin アクセス許可が必要です。
制限
- ソース テーブルとターゲット テーブルはどちらもコンテキスト データベース内に存在する必要があります。
- ExtentsToDropQuery で指定されたすべてのエクステントは、コピー先テーブルに属している必要があります。
- ソース* テーブル*の列*はすべて、同じ名前とデータ型*の変換先*テーブル*にあることが予測されます。
- 変換先テーブルが 具体化されたビューのソース テーブル場合、マテリアライズド ビューで移動されたエクステント内のレコードを処理できないため、コマンドが失敗する可能性があります。 詳細については、「 の具体化されたビューの制限事項 ページ」を参照してください。 移動コマンドの間に新しいインジェスト時間を設定することで、このエラーを回避できます。 サポートされているプロパティの
setNewIngestionTime
を参照してください。
構文
.replace
[async
] extents
in
table
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...])
] <|
{
ExtentsToDropQuery},{
ExtentsToMoveQuery}
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
async |
string |
指定した場合、コマンドは非同期的に実行されます。 | |
DestinationTableName | string |
✔️ | エクステントの移動先となるテーブルの名前。 |
FromDate | datetime |
クエリ ウィンドウの開始日。 | |
ToDate | datetime |
クエリ ウィンドウの終了日。 | |
PropertyName、 PropertyValue | string |
1 つ以上の サポートされるプロパティ。 | |
ExtentsToDropQuery | string |
✔️ | このクエリの結果には、変換先テーブルから削除するエクステント ID を含む ExtentId 列が含まれている必要があります。 |
ExtentsToMoveQuery | string |
✔️ | このクエリの結果には、変換先テーブルに移動するソース テーブルとエクステント ID を含む ExtentId 列と TableName 列が含まれている必要があります。 |
サポートされるプロパティ
プロパティ名 | タイプ | Required | 説明 |
---|---|---|---|
setNewIngestionTime |
bool |
true に設定すると、移動するエクステント内のすべてのレコードに新しい時間が割り当てられます。 これは、具体化されたビュー、連続するデータ エクスポートなどdatabase カーソルに依存するワークロードによってレコードが処理便利です。 |
|
extentCreatedOnFrom |
datetime |
✔️ | この時点より後に作成されたエクステントに適用されます。 |
extentCreatedOnTo |
datetime |
✔️ | この時点より前に作成されたエクステントに適用されます。 |
Note
パフォーマンスを向上させるには、extentCreatedOnFrom パラメーターと extentCreatedOnTo パラメーターを可能な限り小さい範囲に設定します。
返品
コマンドを同期的に実行すると、次のスキーマを持つテーブルが返されます。
出力パラメーター | 型 | 説明 |
---|---|---|
OriginalExtentId | string |
コピー先テーブルに移動されたソース テーブル内の元のエクステントの一意識別子 (GUID)、または削除された宛先テーブル内のエクステント。 |
ResultExtentId | string |
結果エクステントの一意識別子 (GUID) がソース テーブルから変換先テーブルに移動されました。 変換先*テーブル*からエクステント*がドロップされた場合は空になります。 失敗した場合: "Failed"。 |
詳細 | string |
操作が失敗した場合は、エラーの詳細が含まれます。 |
コマンドを非同期に実行すると、操作 ID (GUID) が返されます。 .show 操作コマンドを使用して操作の状態を監視し、.show 操作の詳細コマンドを使用して正常に実行された結果を取得します。
Note
ExtentsToDropQuery クエリによって返されたエクステントが宛先テーブルに存在しない場合、コマンドは失敗します。 これは置換*コマンドを実行する前にエクステント*がマージ*された場合、発生する可能性があります。 エクステント*欠落時にコマンドが失敗することを確認するには、クエリ*が予測される ExtentIds を返していることをチェックします。 削除するエクステントがテーブル MyOtherTable に存在しない場合、最初の例は失敗します。 ただし、2 番目の例は、削除するエクステントが存在しない場合でも成功します。削除するクエリはエクステント ID を返さなかったためです。
例
指定した作成時間範囲内のすべてのエクステントを 2 つのテーブルから移動する
指定した作成時間範囲の 2 つの特定のテーブル (MyTable1
、MyTable2
) からすべてのエクステントをテーブル MyOtherTable
に移動し、drop-by:MyTag
でタグ付けされたMyOtherTable
内のすべてのエクステントを削除します。
.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
}
サンプル出力
OriginalExtentId | ResultExtentId | 詳細 |
---|---|---|
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 |
指定した作成時間範囲内のすべてのエクステントをあるテーブルから別のテーブルに移動し、特定のエクステントを削除する
指定した作成時間範囲内のすべてのエクステントを 1 つの特定のテーブル (MyTable1
) からテーブル MyOtherTable
に移動し、その ID によって特定のエクステントを MyOtherTable
にドロップします。
.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
}
べき等ロジックの実装
べき等ロジックを実装します。これにより、テーブル*t_dest
からテーブル*t_source
に移動するエクステント*がある場合にのみ、Kusto* はテーブル* 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
}