.move extents 命令

适用于:✅Azure 数据资源管理器

此命令在特定数据库的上下文中运行。 它将指定的区从源表移到目标表。

注意

  • 若要详细了解区,请参阅区(数据分片)概述
  • 对于所有源盘区,.move 命令要么完成,要么失败。 不会出现部分完成或失败的结果。

权限

对于源表和目标表,你必须至少具有表管理员权限。

限制

  • 源表和目标表都必须位于上下文数据库中。
  • 源表中的所有列均应以相同的名称和数据类型存在于目标表中。
  • 如果目标表是具体化视图的源表,则命令可能会失败,因为具体化视图不会处理移动盘区中的记录。 在具体化视图限制页中查看更多详细信息。 可以通过在移动命令期间设置新的引入时间来解决此错误。 请参阅支持的属性中的 setNewIngestionTime

语法

移动所有区:

.move [async] extents all from table sourceTableName to table DestinationTableName [ with (PropertyName = PropertyValue [, ...])]

移动 ID 指定的区:

.move [async] extents from table SourceTableName to table DestinationTableName [ with (PropertyName = PropertyValue [, ...])] ( GUID [, ...] )

移动查询结果指定的区:

.move [async] extents to table DestinationTableName [ with (PropertyName = PropertyValue [,...])] <| Query

详细了解语法约定

参数

客户 类型​​ 必需 说明
async string 如果指定此参数,命令将以异步方式运行。
SourceTableName string ✔️ 包含要移动的区的表的名称。
DestinationTableName string ✔️ 要将区移动到其中的表的名称。
PropertyName、PropertyValue string 一个或多个支持的属性
查询 string ✔️ Kusto 查询语言 (KQL) 查询的结果指定源表以及要从中移动的盘区 ID。 应返回一个具有“ExtentId”和“TableName”列的记录集。

支持的属性

属性名称 类型 必需 说明
setNewIngestionTime bool 如果设置为 true,则会为要移动的区内的所有记录分配一个新的引入时间。 当记录应由依赖于数据库游标的工作负荷(例如具体化视图连续数据导出)处理时,这很有用。
extentCreatedOnFrom datetime ✔️ 应用于在此时间点之后创建的区。
extentCreatedOnTo datetime ✔️ 应用于在此时间点之前创建的区。

注意

为了提高性能,请将 extentCreatedOnFromextentCreatedOnTo 参数设置为尽可能小的范围。

返回

同步运行此命令时,将返回具有以下架构的表。

输出参数 类型 说明
OriginalExtentId string 源表中原始盘区的唯一标识符 (GUID),该标识符已移至目标表。
ResultExtentId string 已从源表移至目标表的结果区的唯一标识符 (GUID)。 失败时 -“已失败”。
详细信息 string 包括失败详细信息(如果操作失败)。

异步运行此命令时,将返回操作 ID (GUID)。 使用 .show operations 命令监视操作的状态,使用 .show operation details 命令检索成功的执行的结果。

示例

移动所有区

将表 MyTable 中的所有区都移到表 MyOtherTable

.move extents all from table MyTable to table MyOtherTable

在指定的创建时间范围内移动两个特定盘区

在指定的创建时间范围内将两个特定盘区(通过其盘区 ID)从表 MyTable 移到表 MyOtherTable

.move extents from table MyTable to table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) (AE6CD250-BE62-4978-90F2-5CB7A10D16D7,399F9254-4751-49E3-8192-C1CA78020706)

从特定表移动指定创建时间范围内的所有盘区

将指定创建时间范围内的所有盘区从特定表(MyTable1MyTable2)移到表 MyOtherTable

.move extents to table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <| .show tables (MyTable1,MyTable2) extents

移动所有带设置的新引入时间的盘区

.move extents all from table MyTable to table MyOtherTable with (setNewIngestionTime=true)

示例输出

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