软删除概述

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

支持删除单条记录的功能。 软删除通常通过以下方法之一实现:

  • 若要删除记录并由系统保证同时删除包含这些记录的存储项目,请使用 .purge
  • 若要删除记录而不提供此类保证,请按本文所述,使用 .delete - 该命令会将记录标记为已删除,但不一定从存储项目中删除数据。 此删除方法比清除快。

有关如何使用此命令的信息,请参阅语法

用例

此删除方法应仅用于对单个记录进行计划外删除。 例如,如果发现 IoT 设备有一段时间报告损坏的遥测数据,则应考虑使用此方法删除损坏的数据。

如果需要频繁删除记录以进行重复数据删除或更新,建议使用具体化视图。 请参阅在具体化视图和软删除之间进行选择以进行重复数据删除

“删除”过程

软删除过程是使用以下步骤执行的:

  1. 运行谓词查询:扫描表以标识包含要删除的记录的数据区。 所标识的区是包含由谓词查询返回的一个或多个记录的区。
  2. 区替换:所标识的区将替换为指向原始数据 Blob 的新区,并且还有一个类型为 bool 的新隐藏列,该列按记录指示该记录是否已删除。 完成后,如果没有引入新数据,谓词查询就不会返回任何记录(如果再次运行)。

限制和注意事项

  • “删除”过程是最终的且不可逆的。 无法撤消此过程或恢复已删除的数据,即使执行该操作后未必删除了存储项目。

  • 原生表和具体化视图支持软删除。 外部表不支持。

  • 在运行软删除之前,请通过运行查询并检查结果是否与预期结果匹配来验证谓词。 还可以在 whatif 模式下运行该命令,这会返回预期要删除的记录数。

  • 不要对同一个表运行多个并行软删除操作,否则可能会导致部分或所有命令失败。 但是,可以对不同的表运行多个并行软删除操作。

  • 不要对同一个表并行运行软删除和清除命令。 首先等待一个命令完成,并且仅当其完成后才运行另一个命令。

  • 软删除是针对群集 URI https://[YourClusterName].[region].kusto.chinacloudapi.cn 执行的。 该命令要求执行者对相关数据库具有数据库管理员权限。

  • 从作为具体化视图源表的表中删除记录会对具体化视图产生影响。 如果被删除的记录尚未经具体化周期处理,这些记录将在视图中丢失,因为它们永远得不到处理。 同样,如果记录已处理,则删除不会对具体化视图产生影响。

  • 对谓词的限制:

    • 它必须至少包含一个 where 运算符。
    • 它只能引用要从中删除记录的表。
    • 仅允许使用以下运算符:extendorderprojecttakewhere。 在 toscalar() 中,还允许使用 summarize 运算符。

“删除”性能

可能会影响“删除”过程性能的主要注意事项包括:

  • 运行谓词查询:此步骤的性能非常类似于谓词本身的性能。 它可能会略微更快或更慢,具体取决于谓词,但差异应该微不足道。
  • 区替换:此步骤的性能取决于以下各项:
    • 群集的数据区中的记录分布情况
    • 群集中的节点数

.purge 不同,.delete 命令不重新引入数据。 它只将谓词查询返回的记录标记为已删除,因此其速度要快得多。

删除后的查询性能

删除记录后,查询性能应不会有显著变化。

性能应不会降低,因为在筛选掉已删除记录的所有查询上自动添加的筛选器很高效。

但是,也不能保证查询性能会提高。 虽然某些类型的查询可能会发生性能提高的情况,但其他类型的查询可能并非如此。 为了提高查询性能,大多数的记录被删除的区会被定期压缩,方法是将其替换为仅包含未删除记录的新区。

对 COGS(所售货物成本)的影响

在大多数情况下,删除记录不会导致 COGS 更改。

  • COGS 不会有所降低,因为实际上不会删除任何记录。 记录仅通过类型为 bool 的隐藏列标记为已删除,该列的大小可忽略不计。
  • 在大多数情况下 COGS 不会有所提高,因为 .delete 操作不需要预配额外的资源。
  • 在某些情况下,大多数的记录被删除的区会被定期压缩,方法是将其替换为仅包含未删除记录的新区。 这会导致删除包含大量已删除记录的旧存储项目。 新区较小,因此在存储帐户和热缓存中占用的空间较少。 但是,在大多数情况下,这对 COGS 的影响可以忽略不计。