Condividi tramite


Eliminazione dati

Nota

Questo articolo illustra come eliminare i dati personali dal dispositivo o dal servizio e può essere usato per supportare gli obblighi previsti dal GDPR. Per informazioni generali sul GDPR, vedere la sezione GDPR del Centro protezione di Microsoft e la sezione GDPR del portale Service Trust.

Come piattaforma dati, Azure Esplora dati supporta la possibilità di eliminare singoli record usando Kusto .purge e i comandi correlati. È anche possibile eliminare un'intera tabella o eliminare i record in una vista materializzata.

Avviso

L'eliminazione dei dati tramite il .purge comando è progettata per essere usata per proteggere i dati personali e non deve essere usata in altri scenari. Non è progettato per supportare richieste di eliminazione frequenti o l'eliminazione di grandi quantità di dati e può avere un impatto significativo sulle prestazioni del servizio.

Linee guida per l'eliminazione

Progettare attentamente lo schema dei dati e analizzare i criteri pertinenti prima di archiviare i dati personali in Azure Esplora dati.

  1. In uno scenario ottimale, il periodo di conservazione dei dati è sufficientemente breve e i dati vengono eliminati automaticamente.
  2. Se l'utilizzo del periodo di conservazione non è possibile, isolare tutti i dati soggetti alle regole di privacy in alcune tabelle di Azure Esplora dati. In modo ottimale, usare una sola tabella e collegarla da tutte le altre tabelle. Questo isolamento consente di eseguire il processo di eliminazione dei dati in alcune tabelle che contengono dati sensibili ed evitare tutte le altre tabelle.
  3. Il chiamante deve eseguire ogni tentativo di eseguire in batch l'esecuzione dei .purge comandi a 1-2 comandi per tabella al giorno. Non eseguire più comandi con predicati univoci di identità utente. Inviare invece un singolo comando il cui predicato include tutte le identità utente che richiedono l'eliminazione.

Processo di eliminazione

Il processo di eliminazione selettiva dei dati da Azure Esplora dati avviene nei passaggi seguenti:

  1. Fase 1: fornire un input con un nome di tabella di Azure Esplora dati e un predicato per record, che indica i record da eliminare. Kusto analizza la tabella cercando di identificare gli extent di dati che potrebbero partecipare all'eliminazione dei dati. Gli extent identificati sono quelli con uno o più record per i quali il predicato restituisce true.

  2. Fase 2: (Eliminazione temporanea) Sostituire ogni extent di dati nella tabella (identificato nel passaggio (1)) con una versione reinserita. La versione reinserita non deve contenere i record per i quali il predicato restituisce true. Se i nuovi dati non vengono inseriti nella tabella, alla fine di questa fase le query non restituiranno più i dati per i quali il predicato restituisce true. La durata della fase di eliminazione temporanea dipende dai parametri seguenti:

    • Numero di record che devono essere eliminati
    • Distribuzione dei record tra gli extent di dati nel cluster
    • Numero di nodi nel cluster
    • Capacità di riserva che ha per le operazioni di ripulitura
    • Diversi altri fattori

    La durata della fase 2 può variare tra alcuni secondi e molte ore.

  3. Fase 3: (Eliminazione complessa) Eseguire il lavoro per tutti gli artefatti di archiviazione che potrebbero avere i dati "non elaborabili" ed eliminarli dall'archiviazione. Questa fase viene eseguita almeno cinque giorni dopo il completamento della fase precedente, ma non più di 30 giorni dopo il comando iniziale. Queste sequenze temporali sono impostate in modo da rispettare i requisiti di privacy dei dati.

L'esecuzione di un .purge comando attiva questo processo, che richiede alcuni giorni per il completamento. Se la densità dei record per cui si applica il predicato è sufficientemente grande, il processo eseguirà effettivamente il reingest di tutti i dati nella tabella. Questa reingestion ha un impatto significativo sulle prestazioni e cogS (costo delle merci vendute).

Limitazioni e considerazioni sull'eliminazione

  • Il processo di eliminazione è finale e irreversibile. Non è possibile annullare questo processo o recuperare i dati eliminati. I comandi, ad esempio l'eliminazione della tabella di annullamento , non possono recuperare i dati eliminati. Il rollback dei dati a una versione precedente non può essere eseguito prima del comando di eliminazione più recente.

  • Prima di eseguire l'eliminazione, verificare il predicato eseguendo una query e verificando che i risultati corrispondano al risultato previsto. È anche possibile usare il processo in due passaggi che restituisce il numero previsto di record che verranno eliminati.

  • Il .purge comando viene eseguito sull'endpoint Gestione dati: https://ingest-[YourClusterName].[region].kusto.windows.net. Il comando richiede autorizzazioni di amministratore del database per i database pertinenti.

  • A causa dell'impatto sulle prestazioni del processo di eliminazione e per garantire che siano state seguite le linee guida per l'eliminazione, il chiamante deve modificare lo schema dei dati in modo che le tabelle minime includano dati pertinenti e comandi batch per tabella per ridurre l'impatto significativo del processo di eliminazione.

  • Il predicate parametro del comando .purge viene usato per specificare i record da eliminare. Predicate le dimensioni sono limitate a 1 MB. Quando si costruisce :predicate

    • Usare l'operatore 'in', where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')ad esempio .
    • Si notino i limiti dell'operatore "in" (l'elenco può contenere fino a 1,000,000 valori).
    • Se le dimensioni della query sono di grandi dimensioni, usare l'operatoreexternaldata , ad esempio where UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."]). Il file archivia l'elenco di ID da eliminare.
    • Le dimensioni totali della query, dopo aver espanso tutti i externaldata BLOB (dimensioni totali di tutti i BLOB), non possono superare i 64 MB.

Elimina le prestazioni

Nel cluster può essere eseguita una sola richiesta di eliminazione, in qualsiasi momento. Tutte le altre richieste vengono accodate nello Scheduled stato. Monitorare le dimensioni della coda delle richieste di eliminazione e mantenere entro limiti adeguati in base ai requisiti applicabili ai dati.

Per ridurre il tempo di esecuzione dell'eliminazione:

Attivare il processo di eliminazione

Nota

L'esecuzione dell'eliminazione viene richiamata eseguendo il comando elimina i record TableName della tabella nell'endpoint https://ingest-Gestione dati [NomeCluster].[ Region].kusto.windows.net.

Comando Elimina tabella TableName records

Il comando Ripulitura può essere richiamato in due modi per diversi scenari di utilizzo:

  • Chiamata a livello di codice: un singolo passaggio che deve essere richiamato dalle applicazioni. La chiamata a questo comando attiva direttamente la sequenza di esecuzione dell'eliminazione.

    Sintassi

    // 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]
    
  • Chiamata umana: processo in due passaggi che richiede una conferma esplicita come passaggio separato. La prima chiamata del comando restituisce un token di verifica, che deve essere fornito per eseguire l'eliminazione effettiva. Questa sequenza riduce il rischio di eliminazione accidentale di dati non corretti.

Nota

Il primo passaggio della chiamata in due passaggi richiede l'esecuzione di una query sull'intero set di dati per identificare i record da eliminare. Questa query può verificarsi un timeout o un errore in tabelle di grandi dimensioni, in particolare con una quantità significativa di dati della cache a freddo. In caso di errori, convalidare manualmente il predicato e dopo aver verificato la correttezza, usare l'eliminazione in un singolo passaggio con l'opzione noregrets .

Sintassi

Nota

Per connettersi a un cluster usando l'interfaccia utente Web di Azure Esplora dati, vedere Aggiungere 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]

Per eliminare una vista materializzata, sostituire la table parola chiave con materialized-viewe sostituire TableName con MaterializedViewName.

Parametri Descrizione
DatabaseName Nome del database
TableName / MaterializedViewName Nome della vista tabella/materializzata da eliminare.
Predicate Identifica i record da eliminare. Vedere Eliminare le limitazioni del predicato.
noregrets Se impostato, attiva un'attivazione in un singolo passaggio.
verificationtoken Nello scenario di attivazione in due passaggi (noregrets non impostato), questo token può essere usato per eseguire il secondo passaggio ed eseguire il commit dell'azione. Se verificationtoken non viene specificato, attiverà il primo passaggio del comando. Le informazioni sull'eliminazione verranno restituite con un token che deve essere passato di nuovo al comando per eseguire il passaggio 2.

Limitazioni del predicato di eliminazione

  • Il predicato deve essere una selezione semplice (ad esempio, dove [ColumnName] == 'X'where / [ColumnName] in ('X', 'Y', 'Z') e [OtherColumn] == 'A').
  • È necessario combinare più filtri con "and", anziché clausole separate where (ad esempio, where [ColumnName] == 'X' and OtherColumn] == 'Y' e non where [ColumnName] == 'X' | where [OtherColumn] == 'Y').
  • Il predicato non può fare riferimento a tabelle diverse dalla tabella eliminata (TableName). Il predicato può includere solo l'istruzione di selezione (where). Non è possibile proiettare colonne specifiche dalla tabella (schema di output durante l'esecuzione di 'table | Il predicato deve corrispondere allo schema della tabella.
  • Le funzioni di sistema (ad esempio, ingestion_time(), extent_id()) non sono supportate.

Esempio: eliminazione in due passaggi

Per avviare l'eliminazione in uno scenario di attivazione in due passaggi, eseguire il passaggio 1 del comando:

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

Output

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

Convalidare quindi NumRecordsToPurge prima di eseguire il passaggio 2.

Per completare un'eliminazione in uno scenario di attivazione in due passaggi, usare il token di verifica restituito dal passaggio 1 per eseguire il passaggio 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')

Output

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 Scheduled 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...

Esempio: eliminazione a passaggio singolo

Per attivare un'eliminazione in uno scenario di attivazione in un singolo passaggio, eseguire il comando seguente:

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

Output

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 Scheduled 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...

Annullare il comando operazione di eliminazione

Se necessario, è possibile annullare le richieste di eliminazione in sospeso.

Nota

Questa operazione è destinata agli scenari di ripristino degli errori. Non è garantito il successo e non deve essere parte di un normale flusso operativo. Può essere applicato solo alle richieste ancora presenti nella coda e non sono ancora state inviate per l'esecuzione.

Sintassi

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

Esempio: Annullare un'operazione di eliminazione singola

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

Output

L'output di questo comando è uguale all'output del comando 'show purges OperationId', che mostra lo stato aggiornato dell'operazione di eliminazione annullata. Se il tentativo ha esito positivo, lo stato dell'operazione viene aggiornato a Canceled. In caso contrario, lo stato dell'operazione non viene modificato.

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 Cancellati 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...

Esempio: Annullare tutte le operazioni di eliminazione in sospeso in un database

 .cancel all purges in database MyDatabase

Output

L'output di questo comando è lo stesso dell'output del comando show purges , che mostra tutte le operazioni nel database con lo stato aggiornato. Le operazioni annullate avranno lo stato aggiornato a Canceled. In caso contrario, lo stato dell'operazione non viene modificato.

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 Cancellati 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...
2fa7c04c-6364-4ce1-a5e5-1ab921f51f518f5 Mydatabase MyTable 2021-03-03 05:05:03.5035478 00:00:00.1406211 2021-03-03 05:05:03.6441689 InProgress 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...

Tenere traccia dello stato dell'operazione di eliminazione

Nota

Le operazioni di eliminazione possono essere rilevate con il comando show purges, eseguite sull'endpoint https://ingest-Gestione dati [YourClusterName].[ region].kusto.windows.net.

Status = 'Complete' indica il completamento della prima fase dell'operazione di eliminazione, ovvero i record vengono eliminati in modo temporanea e non sono più disponibili per l'esecuzione di query. I clienti non devono tenere traccia e verificare il completamento della seconda fase (hard-delete). Questa fase viene monitorata internamente da Azure Esplora dati.

Mostra comando di eliminazione

Show purges il comando mostra lo stato dell'operazione di eliminazione specificando l'ID operazione entro il periodo di tempo richiesto.

.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
Proprietà Descrizione Obbligatorio/Facoltativo
OperationId L'ID operazione Gestione dati restituito dopo l'esecuzione di una singola fase o seconda fase. Obbligatorio
StartDate Limite di tempo inferiore per le operazioni di filtro. Se omesso, il valore predefinito è 24 ore prima dell'ora corrente. Facoltativo
EndDate Limite massimo di tempo per le operazioni di filtro. Se omesso, il valore predefinito è l'ora corrente. Facoltativo
DatabaseName Nome del database per filtrare i risultati. Facoltativo

Nota

Lo stato verrà fornito solo nei database per i quali il client dispone di autorizzazioni di Amministrazione database.

esempi

.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

Output

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 Completato Eliminazione completata correttamente (elementi di archiviazione in sospeso) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 KE. Eseguicomando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Id app AAD=...
  • OperationId - ID operazione DM restituito durante l'esecuzione dell'eliminazione.
  • DatabaseName** - Nome del database (distinzione tra maiuscole e minuscole).
  • TableName - Nome tabella (distinzione tra maiuscole e minuscole).
  • ScheduledTime - tempo di esecuzione del comando di eliminazione al servizio DM.
  • Duration - durata totale dell'operazione di eliminazione, incluso il tempo di attesa della coda dm di esecuzione.
  • EngineOperationId - ID operazione dell'eliminazione effettiva eseguita nel motore.
  • State - Stato di eliminazione, può essere uno dei valori seguenti:
    • Scheduled - L'operazione di eliminazione è pianificata per l'esecuzione. Se il processo rimane pianificato, probabilmente è previsto un backlog delle operazioni di eliminazione. Vedere Eliminare le prestazioni per cancellare questo backlog. Se un'operazione di eliminazione ha esito negativo su un errore temporaneo, verrà riprovata dal DM e impostata nuovamente su Pianificata(in modo da visualizzare una transizione dell'operazione da Pianificata a InProgress e tornare a Pianificata).
    • InProgress - l'operazione di eliminazione è in corso nel motore.
    • Completed - eliminazione completata correttamente.
    • BadInput - eliminazione non riuscita nell'input non valido e non verrà riprovata. Questo errore può essere dovuto a vari problemi, ad esempio un errore di sintassi nel predicato, un predicato illegale per i comandi di eliminazione, una query che supera i limiti (ad esempio, oltre entità 1M in un externaldata operatore o oltre 64 MB di dimensioni totali di query espanse) e 404 o 403 errori per externaldata i BLOB.
    • Failed - eliminazione non riuscita e non verrà riprovata. Questo errore può verificarsi se l'operazione è in attesa nella coda troppo lunga (oltre 14 giorni), a causa di un backlog di altre operazioni di eliminazione o di un numero di errori che superano il limite di tentativi. Quest'ultimo genererà un avviso di monitoraggio interno e verrà analizzato dal team di Esplora dati di Azure.
  • StateDetails - una descrizione dello stato.
  • EngineStartTime - l'ora in cui il comando è stato rilasciato al motore. Se si verifica una grande differenza tra questa volta e ScheduledTime, in genere è presente un backlog significativo delle operazioni di eliminazione e il cluster non è in linea con il ritmo.
  • EngineDuration - tempo di eliminazione effettiva nel motore. Se l'eliminazione è stata ritrita più volte, è la somma di tutte le durate di esecuzione.
  • Retries - numero di tentativi di ripetizione dell'operazione dal servizio DM a causa di un errore temporaneo.
  • ClientRequestId - ID attività client della richiesta di eliminazione del servizio di pulizia.
  • Principal - identità dell'autorità di certificazione del comando di eliminazione.

Eliminazione di un'intera tabella

L'eliminazione di una tabella include l'eliminazione della tabella e la contrassegna come eliminata in modo che il processo di eliminazione rigido descritto nel processo di eliminazione venga eseguito su di esso. Eliminare una tabella senza eliminare tutti gli artefatti di archiviazione. Questi artefatti vengono eliminati in base ai criteri di conservazione rigidi inizialmente impostati nella tabella. Il purge table allrecords comando è rapido ed efficiente ed è preferibile al processo di eliminazione dei record, se applicabile per lo scenario.

Nota

Il comando viene richiamato eseguendo il comando table table TableName allrecords nell'endpoint https://ingest-Gestione dati [YourClusterName].[ region].kusto.windows.net.

Comando Elimina table TableName allrecords

Analogamente al comando ".purge table records ", questo comando può essere richiamato in una modalità a livello di codice (singolo passaggio) o in modalità manuale (due passaggi).

  1. Chiamata a livello di codice (passaggio singolo):

    Sintassi

    // 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. Chiamata umana (due passaggi):

    Sintassi

    
    // 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>')
    
    Parametri Descrizione
    DatabaseName Nome del database.
    TableName Nome della tabella.
    noregrets Se impostato, attiva un'attivazione in singolo passaggio.
    verificationtoken Nello scenario di attivazione in due passaggi (noregrets non è impostato), questo token può essere usato per eseguire il secondo passaggio e eseguire il commit dell'azione. Se verificationtoken non è specificato, verrà attivato il primo passaggio del comando. In questo passaggio viene restituito un token per passare nuovamente al comando ed eseguire il passaggio 2.

Esempio: eliminazione in due passaggi

  1. Per avviare l'eliminazione in uno scenario di attivazione in due passaggi, eseguire il passaggio 1 del comando:

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

    Output

    VerificationToken
    e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b
  2. Per completare un'eliminazione in uno scenario di attivazione in due passaggi, usare il token di verifica restituito dal passaggio 1 per eseguire il passaggio 2:

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

    L'output è uguale all'output del comando '.show tables' (restituito senza la tabella eliminata).

    Output

    TableName DatabaseName Cartella DocString
    OtherTable Mydatabase --- ---

Esempio: eliminazione a passaggio singolo

Per attivare un'eliminazione in uno scenario di attivazione in un singolo passaggio, eseguire il comando seguente:

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

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

L'output è uguale all'output del comando '.show tables' (restituito senza la tabella eliminata).

Output

TableName DatabaseName Cartella DocString
OtherTable Mydatabase --- ---