Sdílet prostřednictvím


Vyprázdnění dat

Poznámka

Tento článek obsahuje postup odstranění osobních údajů ze zařízení nebo služby a je možné ho použít k podpoře vašich povinností vyplývajících z GDPR. Obecné informace o GDPR najdete v části GDPR na webu Microsoft Trust Center a v části GDPR na portálu Service Trust Portal.

Azure Data Explorer jako datová platforma podporuje možnost odstraňovat jednotlivé záznamy pomocí Kusto .purge a souvisejících příkazů. V materializovaném zobrazení můžete také vymazat celou tabulku nebo záznamy.

Upozornění

Odstranění dat pomocí .purge příkazu je navržené tak, aby se používalo k ochraně osobních údajů, a nemělo by se používat v jiných scénářích. Není navržená tak, aby podporovala časté žádosti o odstranění nebo odstraňování velkých objemů dat a může mít významný dopad na výkon služby.

Pokyny k příkazu purge

Před uložením osobních údajů do Azure Data Explorer pečlivě navrhněte datové schéma a prozkoumejte relevantní zásady.

  1. V nejlepším případě je doba uchovávání těchto dat dostatečně krátká a data se automaticky odstraní.
  2. Pokud využití doby uchovávání není možné, izolujte všechna data, která podléhají pravidlům ochrany osobních údajů, v několika tabulkách Azure Data Explorer. V optimálním případě použijte jenom jednu tabulku a propojte ji ze všech ostatních tabulek. Tato izolace umožňuje spustit proces vymazání dat u několika tabulek, které uchovávají citlivá data, a vyhnout se všem ostatním tabulkám.
  3. Volající by měl provést každý pokus o dávkové provádění .purge příkazů na 1 až 2 příkazy na tabulku za den. Nevydávejte více příkazů s jedinečnými predikáty identity uživatele. Místo toho odešlete jeden příkaz, jehož predikát obsahuje všechny identity uživatelů, které vyžadují vymazání.

Proces vyprázdnění

Proces selektivního vymazání dat z Azure Data Explorer probíhá v následujících krocích:

  1. Fáze 1: Zadejte vstup s názvem tabulky Azure Data Explorer a predikátem jednotlivých záznamů, které označují, které záznamy se mají odstranit. Kusto prohledá tabulku a identifikuje rozsahy dat, které by se podílely na vyprázdnění dat. Zjištěné rozsahy jsou ty, které mají jeden nebo více záznamů, pro které predikát vrací hodnotu true.

  2. Fáze 2: (Obnovitelné odstranění) Nahraďte každý rozsah dat v tabulce (identifikovaný v kroku (1)) znovu přijatými verzemi. Znovu přijatá verze by neměla obsahovat záznamy, pro které predikát vrací hodnotu true. Pokud se do tabulky neingestují nová data, pak na konci této fáze už dotazy nebudou vracet data, pro která predikát vrátí hodnotu true. Doba trvání fáze obnovitelného odstranění vyprázdnění závisí na následujících parametrech:

    • Počet záznamů, které je nutné vymazat
    • Distribuce záznamů napříč rozsahy dat v clusteru
    • Počet uzlů v clusteru
    • Volnou kapacitu pro operace vyprázdnění
    • Několik dalších faktorů

    Doba trvání fáze 2 se může lišit od několika sekund až po mnoho hodin.

  3. Fáze 3: (Pevné odstranění) Vraťte všechny artefakty úložiště, které můžou mít "otrávená" data, a odstraňte je z úložiště. Tato fáze se provádí nejméně pět dnů po dokončení předchozí fáze, ale ne déle než 30 dnů po počátečním příkazu. Tyto časové osy jsou nastavené tak, aby dodržovaly požadavky na ochranu osobních údajů.

Vydání příkazu .purge aktivuje tento proces, který trvá několik dní. Pokud je hustota záznamů, pro které platí predikát, dostatečně velká, proces efektivně znovu načte všechna data v tabulce. Tato reingestace má významný dopad na výkon a náklady na prodané zboží.

Omezení a důležité informace o vyprázdnění

  • Proces vyprázdnění je konečný a nevratný. Tento proces není možné vrátit zpět ani obnovit vymazaná data. Příkazy, jako je vrácení tabulky zpět, nemůžou obnovit vymazaná data. Vrácení dat zpět na předchozí verzi nejde přejít na před nejnovějším příkazem pro vymazání.

  • Před spuštěním vyprázdnění ověřte predikát spuštěním dotazu a kontrolou, že výsledky odpovídají očekávanému výsledku. Můžete také použít dvoustupňový proces, který vrátí očekávaný počet vyprázdněných záznamů.

  • Příkaz se .purge spustí proti koncovému bodu Správa dat: https://ingest-[YourClusterName].[region].kusto.windows.net. Příkaz vyžaduje oprávnění správce databáze k příslušným databázím.

  • Vzhledem k dopadu procesu mazání na výkon a zajištění, že byly dodrženy pokyny k vyprázdnění , se očekává, že volající upraví schéma dat tak, aby minimální tabulky obsahovaly relevantní data a dávkové příkazy na tabulku, aby se snížil významný dopad procesu vymazání na cogs.

  • Parametr predicate příkazu .purge slouží k určení záznamů, které se mají vyprázdnit. Predicate velikost je omezena na 1 MB. Při sestavování :predicate

    • Použijte operátor "in", where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')například .
    • Všimněte si omezení operátoru "in" (seznam může obsahovat až 1,000,000 hodnoty).
    • Pokud je dotaz velký, použijte externaldata operátor, například where UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."]). Soubor ukládá seznam ID, která se mají vyprázdnit.
    • Celková velikost dotazu po rozšíření všech externaldata objektů blob (celková velikost všech objektů blob) nesmí překročit 64 MB.

Výkon mazání

V clusteru je možné v libovolném okamžiku spustit pouze jeden požadavek na vymazání. Všechny ostatní požadavky jsou zařazeny do fronty ve Scheduled stavu . Monitorujte velikost fronty žádostí o vymazání a udržujte odpovídající limity, aby odpovídaly požadavkům platným pro vaše data.

Zkrácení doby provádění vyprázdnění:

Aktivace procesu vyprázdnění

Poznámka

Spuštění vyprázdnění se vyvolá spuštěním příkazu purge table TableName records na koncovém bodu https://ingest-Správa dat [YourClusterName].[ Oblast].kusto.windows.net.

Příkaz Vyprázdnit tabulku TableName records

Příkaz vyprázdnit se dá vyvolat dvěma způsoby pro různé scénáře použití:

  • Programové volání: Jeden krok, který má být vyvolán aplikacemi. Voláním tohoto příkazu se přímo aktivuje posloupnost provádění vyprázdnění.

    Syntax

    // 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]
    
  • Vyvolání člověkem: Dvoustupňový proces, který vyžaduje explicitní potvrzení jako samostatný krok. První vyvolání příkazu vrátí ověřovací token, který by měl být poskytnut ke spuštění skutečného vyprázdnění. Tato posloupnost snižuje riziko neúmyslného odstranění nesprávných dat.

Poznámka

První krok dvoustupňového volání vyžaduje spuštění dotazu na celou datovou sadu, aby bylo možné identifikovat záznamy, které se mají vyprázdnit. U velkých tabulek může dojít k vypršení časového limitu nebo může dojít k selhání tohoto dotazu, zejména u velkého množství dat studené mezipaměti. V případě selhání ověřte predikát sami a po ověření správnosti použijte jednokrokové vyprázdnění s noregrets možností .

Syntax

Poznámka

Pokud se chcete připojit ke clusteru pomocí webového uživatelského rozhraní Azure Data Explorer, přečtěte si téma Přidání clusterů.

   // 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]

Pokud chcete vyprázdnit materializované zobrazení, nahraďte table klíčové slovo za materialized-viewa nahraďte TableNamematerializedViewName.

Parametry Description
DatabaseName Název databáze
TableName / MaterializedViewName Název tabulky / materializovaného zobrazení, které se má vyprázdnit.
Predicate Identifikuje záznamy, které se mají vyprázdnit. Viz omezení predikátu vyprázdnění.
noregrets Pokud je nastavená, aktivuje aktivaci v jednom kroku.
verificationtoken Ve scénáři dvoustupňové aktivace (noregrets není nastaveno) je možné tento token použít ke spuštění druhého kroku a potvrzení akce. Pokud verificationtoken není zadaný, aktivuje se první krok příkazu. Informace o vyprázdnění se vrátí s tokenem, který by se měl předat zpět do příkazu pro provedení kroku 2.

Vyprázdnit omezení predikátu

  • Predikát musí být jednoduchý výběr (například kde [ColumnName] == 'X'where / [ColumnName] in ('X', 'Y', 'Z') and [OtherColumn] == 'A').
  • Více filtrů musí být kombinováno s "a" místo samostatných where klauzulí (například where [ColumnName] == 'X' and OtherColumn] == 'Y' a ne where [ColumnName] == 'X' | where [OtherColumn] == 'Y').
  • Predikát nemůže odkazovat na jiné tabulky než na tabulku, která je vyprázdněna (TableName). Predikát může obsahovat pouze příkaz výběru (where). Nemůže projektovat konkrétní sloupce z tabulky (výstupní schéma při spuštění 'table | Predikát musí odpovídat schématu tabulky).
  • Systémové funkce (například ingestion_time(), extent_id()) se nepodporují.

Příklad: Dvoustupňové vyprázdnění

Pokud chcete spustit vyprázdnění ve scénáři dvoustupňové aktivace, spusťte krok č. 1 příkazu:

   // 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')

Výstup

NumRecordsToPurge EstimatedPurgeExecutionTime Ověřovací token
1,596 00:00:02 e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b

Pak před spuštěním kroku 2 ověřte NumRecordsToPurge.

Pokud chcete dokončit vymazání ve scénáři dvoustupňové aktivace, použijte ověřovací token vrácený z kroku 1 a spusťte krok 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')

Výstup

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 Databáze MyDatabase Mytable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 Plánované 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...

Příklad: Jednokrokový vyprázdnění

Pokud chcete aktivovat vyprázdnění ve scénáři aktivace s jedním krokem, spusťte následující příkaz:

// 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')

Výstup

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 Databáze MyDatabase Mytable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 Plánované 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...

Zrušit příkaz operace vyprázdnění

V případě potřeby můžete zrušit nevyřízené žádosti o vyprázdnění.

Poznámka

Tato operace je určená pro scénáře zotavení po chybě. Úspěch není zaručený a neměl by být součástí normálního provozního toku. Dá se použít pouze u požadavků, které jsou stále ve frontě a ještě nebyly odeslány ke spuštění.

Syntax

 // 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

Příklad: Zrušení jedné operace vyprázdnění

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

Výstup

Výstup tohoto příkazu je stejný jako výstup příkazu show purges OperationId a zobrazuje aktualizovaný stav operace vyprázdnění, která se ruší. Pokud je pokus úspěšný, stav operace se aktualizuje na Canceled. V opačném případě se stav operace nezmění.

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 Databáze MyDatabase Mytable 2019-01-20 11:41:05.4391686 00:00:00.1406211 2019-01-20 11:41:05.4391686 Zrušeno 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...

Příklad: Zrušení všech nevyřízených operací vymazání v databázi

 .cancel all purges in database MyDatabase

Výstup

Výstup tohoto příkazu je stejný jako výstup příkazu show purges , který zobrazuje všechny operace v databázi s jejich aktualizovaným stavem. Operace, které byly úspěšně zrušeny, budou mít svůj stav aktualizovaný na Canceled. V opačném případě se stav operace nezmění.

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
5a34169e-8730-49f5-9694-7fde3a7a0139 Databáze MyDatabase Mytable 2021-03-03 05:07:29.7050198 00:00:00.2971331 2021-03-03 05:07:30.0021529 Zrušeno 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...
2fa7c04c-6364-4ce1-a5e5-1ab921f518f5 Databáze MyDatabase Mytable 2021-03-03 05:05:03.5035478 00:00:00.1406211 2021-03-03 05:05:03.6441689 Probíhající 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...

Sledování stavu operace vyprázdnění

Poznámka

Operace vymazání je možné sledovat pomocí příkazu show purges, který se spustí na koncovém bodu https://ingest-Správa dat [YourClusterName].[ oblast].kusto.windows.net.

Stav = "Dokončeno" označuje úspěšné dokončení první fáze operace vymazání, tj. záznamy jsou odstraněny obnovitelně a již nejsou k dispozici pro dotazování. Od zákazníků se neočekává, že budou sledovat a ověřovat dokončení druhé fáze (úplné odstranění). Tato fáze je monitorována interně službou Azure Data Explorer.

Příkaz Zobrazit vyprázdnění

Show purges Příkaz zobrazí stav operace vymazání zadáním ID operace v požadovaném časovém období.

.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
Vlastnosti Description Povinné/volitelné
OperationId ID operace Správa dat výstupu po provedení jedné nebo druhé fáze. Povinné
StartDate Nižší časový limit pro operace filtrování. Pokud ho vynecháte, výchozí hodnota je 24 hodin před aktuálním časem. Volitelné
EndDate Horní časový limit pro operace filtrování Pokud tento parametr vynecháte, nastaví se výchozí hodnota na aktuální čas. Volitelné
DatabaseName Název databáze pro filtrování výsledků. Volitelné

Poznámka

Stav se zobrazí jenom u databází, pro které má klient oprávnění k Správa databáze.

Příklady

.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

Výstup

OperationId DatabaseName TableName ScheduledTime Duration LastUpdatedOn EngineOperationId State StateDetails EngineStartTime EngineDuration Retries ClientRequestId Principal
c9651d74-3b80-4183-90bb-bbe9e42eadc4 Databáze 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 Dokončeno Vyprázdnění se úspěšně dokončilo (artefakty úložiště čekající na odstranění) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 KE. Spustitpříkaz; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID aplikace AAD...
  • OperationId – ID operace DM vrácené při provádění vyprázdnění.
  • DatabaseName** – název databáze (rozlišují se malá a velká písmena).
  • TableName – název tabulky (rozlišují se malá a velká písmena).
  • ScheduledTime – čas spuštění příkazu vyprázdnění do služby DM.
  • Duration – celková doba trvání operace vyprázdnění, včetně doby čekání na frontu spuštění DM.
  • EngineOperationId – ID operace skutečného vyprázdnění prováděného v modulu.
  • State - stav vymazání, může být jedna z následujících hodnot:
    • Scheduled - Operace vyprázdnění je naplánovaná k provedení. Pokud úloha zůstane naplánovaná, pravděpodobně existuje backlog operací vyprázdnění. Pokud chcete tento backlog vymazat, projděte si část výkonu mazání . Pokud operace vyprázdnění selže v případě přechodné chyby, zopakuje se ve směšovací službě a znovu se nastaví na Naplánované (takže může dojít k přechodu operace z naplánovaného na probíhající a zpět na naplánované).
    • InProgress - v motoru probíhá operace vyprázdnění.
    • Completed - vyprázdnění bylo úspěšně dokončeno.
    • BadInput – Vyprázdnění se při chybném vstupu nezdařilo a nebude se opakovat. Toto selhání může být způsobeno různými problémy, jako jsou chyba syntaxe v predikátu, neplatný predikát pro příkazy mazání, dotaz, který překračuje limity (například více než 1m entit v operátoru externaldata nebo více než 64 MB celkové velikosti rozšířeného dotazu) a chyby 404 nebo 403 pro externaldata objekty blob.
    • Failed - Vyprázdnění se nezdařilo a nebude se opakovat. K tomuto selhání může dojít v případě, že operace čekala ve frontě příliš dlouho (více než 14 dnů), a to kvůli backlogu jiných operací vymazání nebo kvůli několika selháním, které překročily limit opakování. Druhá možnost vygeneruje interní monitorovací výstrahu a tým Azure Data Explorer ji prošetří.
  • StateDetails - popis státu.
  • EngineStartTime - čas vydání příkazu pro motor. Pokud je mezi tímto časem a naplánovaným časem velký rozdíl, obvykle dochází k významnému backlogu operací vymazání a cluster nedrží krok s tempem.
  • EngineDuration - čas skutečného provedení vyprázdnění v motoru. Pokud došlo k několika opakovaným pokusům o vymazání, jedná se o součet všech dob provádění.
  • Retries – kolikrát služba DM zkusila operaci opakovat kvůli přechodné chybě.
  • ClientRequestId – ID aktivity klienta požadavku na vymazání DM.
  • Principal – identita vystavitele příkazu mazání.

Vymazání celé tabulky

Vymazání tabulky zahrnuje vyřazení tabulky a označení jako vyprázdněné, aby se na ní spustil proces pevného odstranění popsaný v tématu Proces vymazání . Odstranění tabulky bez vymazání neodstraní všechny její artefakty úložiště. Tyto artefakty se odstraní podle pevných zásad uchovávání informací původně nastavených v tabulce. Příkaz purge table allrecords je rychlý a efektivní a je vhodnější než proces mazání záznamů, pokud je to možné pro váš scénář.

Poznámka

Příkaz se vyvolá spuštěním příkazu vyprázdnění table TableName allrecords na koncovém bodu https://ingest-Správa dat [YourClusterName].[ oblast].kusto.windows.net.

Příkaz Vymazat tabulku TableName allrecords

Podobně jako příkaz .purge table records lze tento příkaz vyvolat v programovém (jednokrokovém) nebo ručním (dvoukrokovém) režimu.

  1. Programové vyvolání (jednokrokové):

    Syntax

    // 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. Vyvolání člověkem (dvoustupňové):

    Syntax

    
    // 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>')
    
    Parametry Description
    DatabaseName Název databáze.
    TableName Název tabulky
    noregrets Pokud je nastavená, aktivuje aktivaci v jednom kroku.
    verificationtoken Ve scénáři dvoustupňové aktivace (noregrets není nastaveno) se tento token dá použít ke spuštění druhého kroku a potvrzení akce. Pokud verificationtoken není zadaný, aktivuje se první krok příkazu. V tomto kroku se vrátí token, který se předá zpět do příkazu a provede krok 2.

Příklad: Dvoustupňové vyprázdnění

  1. Pokud chcete spustit vyprázdnění ve scénáři dvoustupňové aktivace, spusťte krok č. 1 příkazu:

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

    Výstup

    VerificationToken
    e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b
  2. Pokud chcete dokončit vymazání ve scénáři dvoustupňové aktivace, použijte ověřovací token vrácený z kroku 1 a spusťte krok 2:

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

    Výstup je stejný jako výstup příkazu .show tables (vrácený bez vyprázdněné tabulky).

    Výstup

    TableName DatabaseName Složka DocString
    Jiná tabulka Databáze MyDatabase --- ---

Příklad: Jednokrokový vyprázdnění

Pokud chcete aktivovat vyprázdnění ve scénáři aktivace s jedním krokem, spusťte následující příkaz:

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

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

Výstup je stejný jako výstup příkazu .show tables (vrácený bez vyprázdněné tabulky).

Výstup

TableName DatabaseName Složka DocString
Jiná tabulka Databáze MyDatabase --- ---