共用方式為


資料清除

適用於: ✅Azure 數據總管

注意

本文提供關於如何從裝置或服務刪除個人資料的步驟,並且可以用來支援遵循 GDPR 的義務。 如需 GDPR 的一般資訊,請參閱 Microsoft 信任中心的 GDPR 區段服務信任入口網站的 GDPR 區段

數據平台支援使用 Kusto .purge 和相關命令來刪除個別記錄的能力。 您也可以清除整個數據表,或清除具體化檢視中的記錄。

警告

透過 .purge 命令刪除數據的設計目的是用來保護個人資料,而不應該在其他案例中使用。 它的設計不是為了支持頻繁的刪除要求,或刪除大量數據,而且可能會對服務造成顯著的效能影響。

清除指南

在儲存個人資料之前,請仔細設計您的數據架構並調查相關原則。

  1. 在最佳案例中,此數據的保留期間足夠短,且數據會自動刪除。
  2. 如果無法使用保留期間使用量,請隔離少數數據表中受限於隱私權規則的所有數據。 以最佳方式,只使用一個數據表,並從所有其他數據表連結到它。 此隔離可讓您在保存敏感數據的幾個數據表上執行數據 清除程式 ,並避免所有其他數據表。
  3. 呼叫端應該每次嘗試將命令的執行 .purge 批處理到每個數據表的 1-2 個命令。 請勿發出具有唯一使用者身分識別述詞的多個命令。 相反地,傳送單一命令,其述詞包含需要清除的所有使用者身分識別。

清除程式

選擇性清除資料的程式會在下列步驟中發生:

  1. 階段 1:提供具有資料表名稱和每個記錄述詞的輸入,指出要刪除的記錄。 Kusto 會掃描數據表,以找出將參與數據清除的數據範圍。 所識別的範圍是具有一或多個述詞傳回 true 的記錄。

  2. 階段 2:(虛刪除)以重新擷取的版本取代數據表中的每個數據範圍(在步驟 (1)中識別。 重新擷取的版本不應該有述詞傳回 true 的記錄。 如果新的數據未內嵌到數據表中,則在此階段結束時,查詢將不再傳回述詞傳回 true 的數據。 清除虛刪除階段的持續時間取決於下列參數:

    • 必須清除的記錄數目
    • 記錄叢集中數據範圍的分佈
    • 叢集中的節點數目
    • 清除作業的備用容量
    • 其他幾個因素

    階段 2 的持續時間在幾秒到數小時之間可能會有所不同。

  3. 階段 3:(硬式刪除) 處理所有可能具有「有害」數據的記憶體成品,並從記憶體中刪除它們。 此階段至少會在上一個階段完成五天后完成,但在初始命令之後不超過 30 天。 這些時程表會設定為遵循數據隱私權需求。

.purge發出命令會觸發此程式,這需要幾天的時間才能完成。 如果套用述詞的記錄密度夠大,程式會有效地重新擷取數據表中的所有數據。 這種重新擷取對效能和COGS(銷售的商品成本)產生了重大影響。

清除限制和考慮

  • 清除程式是最終且無法復原的。 無法復原此程式或復原已清除的數據。 復原數據表卸除之類的命令無法復原已清除的數據。 將數據復原至舊版之前,無法移至最新的清除命令。

  • 在執行清除之前,請執行查詢並檢查結果是否符合預期的結果,以確認述詞。 您也可以使用傳回預期清除記錄數目的雙步驟程式。

  • 此命令.purge會針對 資料管理 端點執行:https://ingest-[YourClusterName].[region].kusto.windows.net。 此命令需要 相關資料庫的資料庫管理員 許可權。

  • 由於清除程式效能影響,並保證 已遵循清除指導方針 ,呼叫端應該修改數據架構,讓最少數據表包含相關數據,以及每個數據表的批次命令,以減少清除程式的重大 COGS 影響。

  • predicate.purge 命令的 參數是用來指定要清除的記錄。 Predicate 大小限制為 1 MB。 建 predicate構 時:

    • 使用 'in' 運算子,例如 where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')
    • 請注意 『in』 運算子的限制(清單最多可以包含1,000,000值)。
    • 如果查詢大小很大,請使用 externaldata 運算子,例如 where UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."])。 檔案會儲存要清除的標識符清單。
    • 展開所有 externaldata Blob 之後的總查詢大小(所有 Blob 的總大小),不能超過 64 MB。

清除效能

在任何指定的時間,只能在叢集上執行一個清除要求。 所有其他要求都會排入佇列狀態 Scheduled 。 監視清除要求佇列大小,並保留足夠的限制,以符合數據適用的需求。

若要減少清除執行時間:

  • 請遵循清除指導方針來減少已清除的數據量。

  • 調整快取原則因為清除會在非經常性數據上花費較長的時間。

  • 相應放大叢集

  • 仔細考慮之後,請增加叢集清除容量,如範圍清除重建容量中所述

觸發清除程式

注意

清除執行是藉由在 資料管理 端點 https://ingest-[YourClusterName].[ 上執行清除數據表 TableName records 命令來叫用。Region].kusto.windows.net。

清除資料表 TableName 記錄命令

針對不同的使用案例,可以使用兩種方式叫用清除命令:

  • 程序設計調用:應用程式要叫用的單一步驟。 呼叫此命令會直接觸發清除執行順序。

    語法

    // Connect to the Data Management service
    #connect "https://ingest-[YourClusterName].[region].kusto.windows.net"
    
    // To purge table records
    .purge table [TableName] records in database [DatabaseName] with (noregrets='true') <| [Predicate]
    
    // To purge materialized view records
    .purge materialized-view [MaterializedViewName] records in database [DatabaseName] with (noregrets='true') <| [Predicate]
    
  • 人類調用:需要明確確認為個別步驟的雙步驟程式。 第一次叫用命令會傳回驗證令牌,應該提供它來執行實際的清除。 此順序可降低不小心刪除不正確數據的風險。

注意

雙步驟調用的第一個步驟需要在整個數據集上執行查詢,才能識別要清除的記錄。 此查詢可能會在大型數據表上逾時或失敗,尤其是大量冷快取數據。 如果發生失敗,請自行驗證述詞,並在驗證正確性之後,使用單一步驟清除搭配 noregrets 選項。

語法

注意

若要使用 Azure 數據總管 Web UI 連線到叢集,請參閱 新增叢集

// Connect to the Data Management service - this command only works in Kusto.Explorer
#connect "https://ingest-[YourClusterName].[region].kusto.windows.net"

// Step #1 - retrieve a verification token (no records will be purged until step #2 is executed)
.purge table [TableName] records in database [DatabaseName] <| [Predicate]

// Step #2 - input the verification token to execute purge
.purge table [TableName] records in database [DatabaseName] with (verificationtoken=h'<verification token from step #1>') <| [Predicate]

若要清除具體化檢視,請將 關鍵詞取代tablematerialized-view,並將 TableName 取代MaterializedViewName

參數 描述
DatabaseName 資料庫名稱
TableName / MaterializedViewName 要清除之數據表/具體化檢視的名稱。
Predicate 識別要清除的記錄。 請參閱 清除述詞限制
noregrets 如果設定,則會觸發單一步驟啟用。
verificationtoken 在雙步驟啟用案例中(noregrets 未設定),此令牌可用來執行第二個步驟並認可動作。 如果未 verificationtoken 指定,則會觸發命令的第一個步驟。 清除的相關信息會以應該傳回至命令以執行步驟 #2 的令牌傳回。

清除述詞限制

  • 述詞必須是簡單的選取範圍(例如,其中 [ColumnName] == 'X' / ,其中 [ColumnName] in ('X', 'Y', 'Z') 和 [OtherColumn] == 'A')。
  • 多個篩選必須與 『and』 結合,而不是個別 where 子句(例如, where [ColumnName] == 'X' and OtherColumn] == 'Y' 而非 where [ColumnName] == 'X' | where [OtherColumn] == 'Y')。
  • 述詞無法參考要清除的數據表以外的數據表(TableName)。 述詞只能包含選取語句 (where)。 它無法從數據表投影特定數據行(執行'table 時輸出架構 |述詞『必須符合數據表架構。
  • 系統函式(例如、 ingestion_time()extent_id()等) 不受支援。

範例:雙步驟清除

若要在雙步驟啟用案例中開始清除,請執行命令的步驟 #1:

   // Connect to the Data Management service
   #connect "https://ingest-[YourClusterName].[region].kusto.windows.net"

   .purge table MyTable records in database MyDatabase <| where CustomerId in ('X', 'Y')

   .purge materialized-view MyView records in database MyDatabase <| where CustomerId in ('X', 'Y')

輸出

NumRecordsToPurge EstimatedPurgeExecutionTime VerificationToken
1,596 00:00:02 e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b

然後,在執行步驟 2 之前先驗證 NumRecordsToPurge。

若要在雙步驟啟用案例中完成清除,請使用步驟 1 傳回的驗證令牌來執行步驟 #2:

.purge table MyTable records in database MyDatabase
 with(verificationtoken=h'e43c7....')
<| where CustomerId in ('X', 'Y')

.purge materialized-view MyView records in database MyDatabase
 with(verificationtoken=h'e43c7....')
<| where CustomerId in ('X', 'Y')

輸出

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 MyDatabase MyTable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 已排程 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...

範例:單一步驟清除

若要在單一步驟啟用案例中觸發清除,請執行下列命令:

// Connect to the Data Management service
 #connect "https://ingest-[YourClusterName].[region].kusto.windows.net"

.purge table MyTable records in database MyDatabase with (noregrets='true') <| where CustomerId in ('X', 'Y')

.purge materialized-view MyView records in database MyDatabase with (noregrets='true') <| where CustomerId in ('X', 'Y')

輸出

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 MyDatabase MyTable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 已排程 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...

取消清除作業命令

如有需要,您可以取消擱置的清除要求。

注意

這項作業適用於錯誤復原案例。 它不保證會成功,而且不應該是一般作業流程的一部分。 它只能套用至仍在佇列中且尚未分派執行的要求。

語法

 // Cancel of a single purge operation
 .cancel purge <OperationId>

  // Cancel of all pending purge requests in a database
 .cancel all purges in database <DatabaseName>

 // Cancel of all pending purge requests, for all databases
 .cancel all purges

範例:取消單一清除作業

 .cancel purge aa894210-1c60-4657-9d21-adb2887993e1

輸出

此命令的輸出與 'show purges OperationId' 命令輸出相同,其中顯示正在取消之清除作業的更新狀態。 如果嘗試成功,作業狀態會更新為 Canceled。 否則,作業狀態不會變更。

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 MyDatabase MyTable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 已取消 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...

範例:取消資料庫中所有暫止的清除作業

 .cancel all purges in database MyDatabase

輸出

此命令的輸出與 show purges 命令輸出相同,其中顯示資料庫中所有作業及其更新狀態。 成功取消的作業會將其狀態更新為 Canceled。 否則,作業狀態不會變更。

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
5a34169e-8730-49f5-9694-7fde3a7a0139 MyDatabase MyTable 2021-03-03 05:07:29.7050198 00:00:00.2971331 2021-03-03 05:07:30.0021529 已取消 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...
2fa7c04c-6364-4ce1-a5e5-1ab921f518f5 MyDatabase MyTable 2021-03-03 05:05:03.5035478 00:00:00.1406211 2021-03-03 05:05:03.6441689 InProgress 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...

追蹤清除作業狀態

注意

您可以使用 show purges 命令追蹤清除作業,針對 資料管理 端點 https://ingest-[YourClusterName].[region].kusto.windows.net。

Status = 'Completed' 表示清除作業的第一個階段成功完成,也就是記錄已虛刪除,且無法再進行查詢。 客戶不會追蹤並驗證第二階段(硬刪除)完成。 此階段會在內部受到監視。

顯示清除命令

Show purges 命令會藉由在要求的時間週期內指定作業標識碼,以顯示清除作業狀態。

.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
屬性 描述 強制/選擇性
OperationId 執行單一階段或第二個階段之後所輸出的 資料管理 作業標識碼。 必要
StartDate 篩選作業的時間限制較低。 如果省略,則預設為目前時間之前的 24 小時。 選擇性
EndDate 篩選作業的時間限制。 如果省略,則預設為目前時間。 選擇性
DatabaseName 用來篩選結果的資料庫名稱。 選擇性

注意

只有在用戶端具有 資料庫管理員 許可權的資料庫上才會提供狀態。

範例

.show purges
.show purges c9651d74-3b80-4183-90bb-bbe9e42eadc4
.show purges from '2018-01-30 12:00'
.show purges from '2018-01-30 12:00' to '2018-02-25 12:00'
.show purges from '2018-01-30 12:00' to '2018-02-25 12:00' in database MyDatabase

輸出

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 MyDatabase MyTable 2019-01-20 11:41:05.4391686 00:00:33.6782130 2019-01-20 11:42:34.6169153 a0825d4d-6b0f-47f3-a499-54ac5681ab78 已完成 清除已順利完成 (記憶體成品擱置刪除) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 科。RunCommand;1d0ad28b-f791-4f5a-a60f-0e32318367b7 AAD 應用程式識別碼=...
  • OperationId - 執行清除時傳回的 DM 作業識別碼。
  • DatabaseName** - 資料庫名稱(區分大小寫)。
  • TableName - 資料表名稱(區分大小寫)。
  • ScheduledTime - 對 DM 服務執行清除命令的時間。
  • Duration - 清除作業的總持續時間,包括執行 DM 佇列等候時間。
  • EngineOperationId - 引擎中實際執行之清除的作業標識符。
  • State - 清除狀態,可以是下列其中一個值:
    • Scheduled - 清除作業已排程執行。 如果作業維持已排程,則可能會有清除作業的待辦專案。 請參閱 清除效能 以清除此待辦專案。 如果清除作業在暫時性錯誤時失敗,DM 將會重試並再次設定為 Scheduled(因此您可能會看到作業從 Scheduled 轉換為 InProgress,然後切換回 Scheduled)。
    • InProgress - 清除作業在引擎中正在進行中。
    • Completed - 清除成功完成。
    • BadInput - 清除錯誤輸入時失敗,且不會重試。 此失敗的原因可能是各種問題,例如述詞中的語法錯誤、清除命令的非法述詞、超過限制的查詢(例如運算符中的 externaldata 超過 100 萬個實體,或超過 64 MB 的總擴充查詢大小),以及 Blob 的 404 或 403 錯誤 externaldata
    • Failed - 清除失敗,且不會重試。 如果作業在佇列中等候的時間太長(超過 14 天),可能會發生此失敗,因為其他清除作業積壓或超過重試限制的失敗數目。 後者將引發內部監視警示,並由小組調查。
  • StateDetails - 狀態的描述。
  • EngineStartTime - 命令發出給引擎的時間。 如果此時間與 ScheduledTime 之間有很大的差異,通常會有大量的清除作業待辦專案,且叢集無法跟上步調。
  • EngineDuration - 引擎中實際清除執行的時間。 如果重試了數次清除,則會是所有執行持續時間的總和。
  • Retries - DM 服務因暫時性錯誤而重試作業的次數。
  • ClientRequestId - DM 清除要求的用戶端活動標識碼。
  • Principal - 清除命令簽發者的身分識別。

清除整個數據表

清除數據表包括卸除數據表,並將它標示為已清除,讓清除進程所 描述的硬式刪除程式 在該數據表上執行。 卸除數據表而不清除,並不會刪除其所有記憶體成品。 這些成品會根據最初在數據表上設定的硬式保留原則來刪除。 purge table allrecords此命令快速且有效率,如果適用於您的案例,最好是清除記錄程式。

注意

在 資料管理 端點 https://ingest-[YourClusterName].[ 上執行清除數據表 TableName allrecords 命令,以叫用命令。region].kusto.windows.net。

清除數據表 TableName allrecords 命令

類似於 '.purge 數據表記錄 ' 命令,這個命令可以在程序設計式 (單一步驟) 或手動 (雙步驟) 模式中叫用。

  1. 程式設計調用 (單一步驟):

    語法

    // Connect to the Data Management service
    #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"
    
    .purge table [TableName] in database [DatabaseName] allrecords with (noregrets='true')
    
  2. 人類調用(兩個步驟):

    語法

    
    // Connect to the Data Management service
    #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"
    
    // Step #1 - retrieve a verification token (the table will not be purged until step #2 is executed)
    
    .purge table [TableName] in database [DatabaseName] allrecords
    
    // Step #2 - input the verification token to execute purge
    .purge table [TableName] in database [DatabaseName] allrecords with (verificationtoken=h'<verification token from step #1>')
    
    參數 描述
    DatabaseName 資料庫的名稱。
    TableName 資料表的名稱。
    noregrets 如果設定,則會觸發單一步驟啟用。
    verificationtoken 在雙步驟啟用案例中(noregrets 未設定),此令牌可用來執行第二個步驟並認可動作。 如果未 verificationtoken 指定,則會觸發命令的第一個步驟。 在此步驟中,會傳回令牌以傳回命令並執行步驟 #2。

範例:雙步驟清除

  1. 若要在雙步驟啟用案例中開始清除,請執行命令的步驟 #1:

    // Connect to the Data Management service
     #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"
    
    .purge table MyTable in database MyDatabase allrecords
    

    輸出

    VerificationToken
    e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b
  2. 若要在雙步驟啟用案例中完成清除,請使用步驟 1 傳回的驗證令牌來執行步驟 #2:

    .purge table MyTable in database MyDatabase allrecords
    with (verificationtoken=h'eyJT.....')
    

    輸出與 『.show tables』 命令輸出相同(沒有清除的數據表傳回)。

    輸出

    TableName DatabaseName Folder DocString
    OtherTable MyDatabase --- ---

範例:單一步驟清除

若要在單一步驟啟用案例中觸發清除,請執行下列命令:

// Connect to the Data Management service
#connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"

.purge table MyTable in database MyDatabase allrecords with (noregrets='true')

輸出與 『.show tables』 命令輸出相同(沒有清除的數據表傳回)。

輸出

TableName DatabaseName Folder DocString
OtherTable MyDatabase --- ---