虛刪除概觀
適用於: ✅Azure 數據總管
支援刪除個別記錄的功能。 記錄刪除通常是使用下列其中一種方法來達成:
- 若要刪除具有系統保證包含這些記錄的記憶體成品也會刪除記錄,請使用
.purge
- 若要刪除沒有這類保證的記錄,請使用
.delete
本文中所述的 - 此命令會將記錄標示為已刪除,但不一定會從記憶體成品中刪除數據。 這個刪除方法比清除更快。
如需如何使用 命令的資訊,請參閱 語法
使用案例
這個刪除方法應該只用於個別記錄的未計劃刪除。 例如,如果您發現IoT裝置回報損毀的遙測數據一段時間,您應該考慮使用此方法來刪除損毀的數據。
如果您需要經常刪除重複資料刪除或更新的記錄,建議您使用 具體化檢視。 如需重複數據刪除,請參閱具體化檢視與虛刪除之間的選擇。
刪除處理序
虛刪除程式是使用下列步驟執行:
- 執行述詞查詢:系統會掃描數據表,以識別包含要刪除之記錄的數據範圍。 所識別的範圍是述詞查詢所傳回的一或多個記錄。
- 範圍取代:已識別的範圍會取代為指向原始數據 Blob 的新範圍,並具有類型的
bool
新隱藏數據行,指出是否刪除每筆記錄。 完成後,如果未內嵌任何新數據,述詞查詢將不會傳回任何記錄,如果再次執行。
限制與考量
刪除程式是最終且無法復原的。 即使記憶體成品不一定在作業之後刪除,也無法復原此程式或復原已刪除的數據。
原生數據表和具體化檢視支援虛刪除。 外部數據表不支援它。
在執行虛刪除之前,請執行查詢並檢查結果是否符合預期的結果,以確認述詞。 您也可以在 模式中
whatif
執行 命令,以傳回預期要刪除的記錄數目。請勿在同一個數據表上執行多個平行虛刪除作業,因為這可能會造成部分或所有命令失敗。 不過,可以在不同的數據表上執行多個平行虛刪除作業。
請勿以平行方式在相同數據表上執行虛刪除和清除命令。 先等候一個命令完成,然後才執行另一個命令。
虛刪除會針對您的叢集 URI 執行:
https://[YourClusterName].[region].kusto.windows.net
。 此命令需要 相關資料庫的資料庫管理員 許可權。從具體化檢視源數據表中刪除記錄,可能會對具體化檢視造成影響。 如果具體化週期尚未處理刪除的記錄,這些記錄將會在檢視中遺失,因為它們永遠不會處理。 同樣地,如果已處理記錄,刪除將不會影響具體化檢視。
述詞的限制:
- 它必須包含至少一個
where
運算符。 - 它只能參考要刪除記錄的數據表。
- 只允許下列運算子:
extend
、order
、project
take
和where
。 在內toscalar()
,summarize
也允許 運算符。
- 它必須包含至少一個
刪除效能
可能會影響 刪除程式 效能的主要考慮包括:
- 執行述詞查詢:此步驟的效能與述詞本身的效能非常類似。 視述詞而定,它可能會稍微快或變慢,但差異預期微不足道。
- 範圍取代:此步驟的效能取決於下列各項:
- 記錄叢集中數據範圍的分佈
- 叢集中的節點數目
不同於 .purge
, .delete
命令不會重新擷取數據。 它只會將述詞查詢所傳回的記錄標示為已刪除,因此會更快。
刪除後的查詢效能
在刪除記錄之後,查詢效能不會明顯變更。
效能降低並非預期,因為篩選出已刪除記錄的所有查詢上自動新增的篩選是有效率的。
不過,查詢效能也不保證會改善。 雖然某些類型的查詢可能會發生效能改善,但某些查詢可能不會發生。 為了改善查詢效能,刪除大部分記錄的範圍會定期壓縮,方法是將它們取代為只包含尚未刪除之記錄的新範圍。
對 COGS 的影響 (銷售的商品成本)
在大部分情況下,刪除記錄不會產生COGS的變更。
- 不會減少,因為實際上不會刪除任何記錄。 記錄只會使用 類型的
bool
隱藏數據行標示為已刪除,其大小是可忽略的。 - 在大部分情況下,不會增加,因為
.delete
作業不需要布建額外的資源。 - 在某些情況下,刪除大部分記錄的範圍會定期壓縮,方法是將它們取代為只包含尚未刪除之記錄的新範圍。 這會導致刪除包含大量已刪除記錄的舊記憶體成品。 新的範圍較小,因此在記憶體帳戶和經常性快取中耗用較少的空間。 不過,在大多數情況下,這對 COGS 的影響是微不足道的。