.drop extents 命令

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

从指定的数据库或表中删除区。

该命令有多个变体:在一个变体中,要删除的区由 Kusto 查询指定。 在其他变体中,区是通过使用下面所述的迷你语言指定的。

注意

数据分片称为“区”,所有命令都将“extent”或“extents”作为同义词使用。 有关盘区的详细信息,请参阅盘区(数据分片)概述

注意

如果删除某个盘区,将删除此盘区中的所有行。 若要删除单个记录,请使用软删除

权限

如果指定了 TableName,则必须至少具有表管理员权限才能运行此命令。

如果未指定 TableName,则必须至少具有数据库管理员权限才能运行此命令。

语法

使用查询删除区

.drop extents [whatif] <| Query

详细了解语法约定

参数

客户 类型​​ 必需 说明
whatif string 如果指定此项,则将报告盘区,而不是将其删除。
查询 string ✔️ Kusto 查询语言 (KQL) 查询的结果指定源表以及要从中删除的盘区 ID。 应返回一个具有“ExtentId”和“TableName”列的记录集。

删除特定盘区或多个盘区

.drop extents (ExtentIds) from TableName

参数

客户 类型​​ 必需 说明
ExtentIds guid ✔️ 要删除的盘区的一个或多个逗号分隔的唯一标识符。
TableName string 要删除的盘区所在的表的名称。

按指定的属性删除区

.drop extents [older N (days | hours)] from (TableName | all tables) [trim by (extentsize | datasize) Size (MB | GB | bytes)] [limit LimitCount]

参数

客户 类型​​ 必需 说明
N int ✔️ 删除存在时间超过 N 天/小时的盘区。
TableName string 要删除的盘区所在的表的名称
大小 int ✔️ 剪裁数据库中的数据,直到盘区总数与所需大小 (MaxSize) 匹配为止。
LimitCount int ✔️ 应用于前 LimitCount 个盘区。

此命令支持仿真模式,该模式生成输出,就好像该命令已运行,但实际上并没有执行。 请使用 .drop-pretend,而不是 .drop

返回

此命令返回包含以下信息的表。

输出参数 类型 说明
ExtentId string 由于该命令而删除的 ExtentId
TableName string 盘区所属的表名
CreatedOn dateTime 时间戳,它保留有关最初创建该区的时间的信息

例如,命令的返回值可能如下表所示。

区 ID 表名称 创建时间
43c6e03f-1713-4ca7-a52a-5db8a4e8b87d TestTable 2015-01-12 12:48:49.4298178

示例

删除特定区

使用盘区 ID 删除特定盘区。

.drop extent 609ad1e2-5b1c-4b79-90c0-1dec262e9f46 from Table1

删除多个盘区

使用盘区 ID 列表删除多个盘区。

.drop extents (609ad1e2-5b1c-4b79-90c0-1dec262e9f46, 310a60c6-8529-4cdf-a309-fe6aa7857e1d) from Table1

按创建时间删除所有区

从数据库 MyDatabase 的所有表中删除创建时间早于 10 天前的所有区

.drop extents <| .show database MyDatabase extents | where CreatedOn < now() - time(10d)

按创建时间删除某些区

删除表 Table1Table2 中创建时间早于 10 天前的所有区

.drop extents older 10 days from tables (Table1, Table2)

使用 extent_id() 删除盘区

使用内置 extent_id() 函数从表中移除某个盘区。

.drop extents  <|
    StormEvents
    | where EventId == '66144'
    | summarize by ExtentId = extent_id(), TableName = "StormEvents"

仿真模式:显示哪些区会由该命令删除

注意

区 ID 参数不适用于此命令。

.drop-pretend extents older 10 days from all tables

从“TestTable”中删除所有区

.drop extents from TestTable

注意

如果启用了流式引入,则删除所有盘区不一定会删除表中的所有数据。 若要清除表的所有数据,请使用 .clear table data TestTable