软删除概述
适用于:✅Azure 数据资源管理器
支持删除单条记录的功能。 软删除通常通过以下方法之一实现:
- 若要删除记录并由系统保证同时删除包含这些记录的存储项目,请使用
.purge
- 若要删除记录而不提供此类保证,请按本文所述,使用
.delete
- 该命令会将记录标记为已删除,但不一定从存储项目中删除数据。 此删除方法比清除快。
有关如何使用此命令的信息,请参阅语法
用例
此删除方法应仅用于对单个记录进行计划外删除。 例如,如果发现 IoT 设备有一段时间报告损坏的遥测数据,则应考虑使用此方法删除损坏的数据。
如果需要频繁删除记录以进行重复数据删除或更新,建议使用具体化视图。 请参阅在具体化视图和软删除之间进行选择以进行重复数据删除。
“删除”过程
软删除过程是使用以下步骤执行的:
- 运行谓词查询:扫描表以标识包含要删除的记录的数据区。 所标识的区是包含由谓词查询返回的一个或多个记录的区。
- 区替换:所标识的区将替换为指向原始数据 Blob 的新区,并且还有一个类型为
bool
的新隐藏列,该列按记录指示该记录是否已删除。 完成后,如果没有引入新数据,谓词查询就不会返回任何记录(如果再次运行)。
限制和注意事项
“删除”过程是最终的且不可逆的。 无法撤消此过程或恢复已删除的数据,即使执行该操作后未必删除了存储项目。
原生表和具体化视图支持软删除。 外部表不支持。
在运行软删除之前,请通过运行查询并检查结果是否与预期结果匹配来验证谓词。 还可以在
whatif
模式下运行该命令,这会返回预期要删除的记录数。不要对同一个表运行多个并行软删除操作,否则可能会导致部分或所有命令失败。 但是,可以对不同的表运行多个并行软删除操作。
不要对同一个表并行运行软删除和清除命令。 首先等待一个命令完成,并且仅当其完成后才运行另一个命令。
软删除是针对群集 URI
https://[YourClusterName].[region].kusto.chinacloudapi.cn
执行的。 该命令要求执行者对相关数据库具有数据库管理员权限。从作为具体化视图源表的表中删除记录会对具体化视图产生影响。 如果被删除的记录尚未经具体化周期处理,这些记录将在视图中丢失,因为它们永远得不到处理。 同样,如果记录已处理,则删除不会对具体化视图产生影响。
对谓词的限制:
- 它必须至少包含一个
where
运算符。 - 它只能引用要从中删除记录的表。
- 仅允许使用以下运算符:
extend
、order
、project
、take
和where
。 在toscalar()
中,还允许使用summarize
运算符。
- 它必须至少包含一个
“删除”性能
可能会影响“删除”过程性能的主要注意事项包括:
- 运行谓词查询:此步骤的性能非常类似于谓词本身的性能。 它可能会略微更快或更慢,具体取决于谓词,但差异应该微不足道。
- 区替换:此步骤的性能取决于以下各项:
- 群集的数据区中的记录分布情况
- 群集中的节点数
与 .purge
不同,.delete
命令不重新引入数据。 它只将谓词查询返回的记录标记为已删除,因此其速度要快得多。
删除后的查询性能
删除记录后,查询性能应不会有显著变化。
性能应不会降低,因为在筛选掉已删除记录的所有查询上自动添加的筛选器很高效。
但是,也不能保证查询性能会提高。 虽然某些类型的查询可能会发生性能提高的情况,但其他类型的查询可能并非如此。 为了提高查询性能,大多数的记录被删除的区会被定期压缩,方法是将其替换为仅包含未删除记录的新区。
对 COGS(所售货物成本)的影响
在大多数情况下,删除记录不会导致 COGS 更改。
- COGS 不会有所降低,因为实际上不会删除任何记录。 记录仅通过类型为
bool
的隐藏列标记为已删除,该列的大小可忽略不计。 - 在大多数情况下 COGS 不会有所提高,因为
.delete
操作不需要预配额外的资源。 - 在某些情况下,大多数的记录被删除的区会被定期压缩,方法是将其替换为仅包含未删除记录的新区。 这会导致删除包含大量已删除记录的旧存储项目。 新区较小,因此在存储帐户和热缓存中占用的空间较少。 但是,在大多数情况下,这对 COGS 的影响可以忽略不计。