Condividi tramite


Eliminazione dati

Si applica a: ✅Azure Esplora dati

Nota

Questo articolo descrive le procedure per l'eliminazione dei dati personali dal dispositivo o dal servizio e può essere usato per adempiere gli obblighi del Regolamento generale sulla protezione dei dati (GDPR). Per informazioni generali sul GDPR, vedi la sezione GDPR del Centro protezione Microsoft e la sezione GDPR del Service Trust Portal.

La piattaforma 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.

  1. In uno scenario ottimale, il periodo di conservazione per questi 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. 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 contenenti dati sensibili ed evitare tutte le altre tabelle.
  3. Il chiamante deve eseguire ogni tentativo di eseguire l'invio in batch dell'esecuzione dei .purge comandi a 1-2 comandi per tabella al giorno. Non eseguire più comandi con predicati di identità utente univoci. Inviare invece un singolo comando il cui predicato include tutte le identità utente che richiedono l'eliminazione.

Processo di ripulitura

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

  1. Fase 1: assegnare un input con un nome di tabella e un predicato per record, che indica i record da eliminare. Kusto analizza la tabella cercando di identificare gli extent di dati che partecipano 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 reingerita non deve contenere i record per i quali il predicato restituisce true. Se i nuovi dati non vengono inseriti nella tabella, entro la fine di questa fase, le query non restituiscono più dati per i quali il predicato restituisce true. La durata della fase di eliminazione temporanea dipende dai parametri seguenti:

    • Numero di record da eliminare
    • 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 temporanea) Ripristinare tutti gli artefatti di archiviazione che possono 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'emissione 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à in modo efficace il reingest di tutti i dati nella tabella. Questo reingestion ha un impatto significativo sulle prestazioni e cogS (costo delle merci vendute).

Elimina limitazioni e considerazioni

  • Il processo di ripulitura è finale e irreversibile. Non è possibile annullare questo processo o ripristinare 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 dovrebbe modificare lo schema dei dati in modo che le tabelle minime includano dati rilevanti 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 ai 1,000,000 valori).
    • Se le dimensioni della query sono elevate, usare l'operatore externaldata, 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 delle query, dopo l'espansione di tutti i externaldata BLOB (dimensioni totali di tutti i BLOB), non possono superare i 64 MB.

Elimina 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 per soddisfare i requisiti applicabili ai dati.

Per ridurre il tempo di esecuzione dell'eliminazione:

Attivare il processo di eliminazione

Nota

L'esecuzione di ripulitura viene richiamata eseguendo il comando Elimina tabella TableName record nell'endpoint https://ingest-Gestione dati [YourClusterName].[ Region].kusto.windows.net.

Comando Ripulitura tabella TableName records

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

  • 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 di ripulitura.

    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 ad accesso sporadico. 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 ripulire 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 tabella/vista materializzata da eliminare.
Predicate Identifica i record da eliminare. Vedere Eliminare le limitazioni dei predicati.
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 al comando per eseguire il passaggio 2.

Eliminare le limitazioni del predicato

  • 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 da eliminare (TableName). Il predicato può includere solo l'istruzione selection (where). Non può 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: Ripulitura 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 Pianificati 0 KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID app AAD=...

Esempio: Ripulitura in un unico passaggio

Per attivare un'eliminazione in uno scenario di attivazione in un unico 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 Pianificati 0 KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID app AAD=...

Comando Annulla 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 un esito positivo e non deve far parte di un normale flusso operativo. Può essere applicato solo alle richieste ancora presenti nella coda e non ancora 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 una singola operazione di eliminazione

 .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 Annullati 0 KE. RunCommand; 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 correttamente 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 Annullati 0 KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID app 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 KE. RunCommand; 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 mostra ripuliture, eseguite sull'endpoint https://ingest-Gestione dati [YourClusterName].[ region].kusto.windows.net.

Status = 'Completed' indica il completamento corretto della prima fase dell'operazione di eliminazione, ovvero i record vengono eliminati soft e non sono più disponibili per l'esecuzione di query. I clienti non devono tenere traccia e verificare il completamento della seconda fase (eliminazione temporanea). Questa fase viene monitorata internamente.

Comando Mostra ripuliture

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 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, per impostazione predefinita viene impostato 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 delle autorizzazioni di amministratore del 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 attesa di eliminazione) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 KE. RunCommand; 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 ripulitura nel servizio Dm Dm.
  • Duration - durata totale dell'operazione di eliminazione, incluso il tempo di attesa della coda dm di esecuzione.
  • EngineOperationId - ID operazione dell'eliminazione effettiva in esecuzione nel motore.
  • State - purge state, può essere uno dei valori seguenti:
    • Scheduled - L'operazione di eliminazione è pianificata per l'esecuzione. Se il processo rimane pianificato, è probabile che sia presente un backlog di operazioni di ripulitura. Vedere Eliminare le prestazioni per cancellare questo backlog. Se un'operazione di ripulitura ha esito negativo in caso di errore temporaneo, verrà ritentata dal Servizio Migrazione del database e impostata di nuovo su Pianificata ( quindi potrebbe essere visualizzata una transizione dell'operazione da Scheduled a InProgress e tornare a Scheduled).
    • InProgress - l'operazione di eliminazione è in corso nel motore.
    • Completed - Ripulitura completata correttamente.
    • BadInput - Eliminazione non riuscita nell'input non valido e non verrà ritentata. Questo errore può essere dovuto a diversi problemi, ad esempio un errore di sintassi nel predicato, un predicato non valido per i comandi di ripulitura, una query che supera i limiti (ad esempio, oltre 1M entità in un externaldata operatore o oltre 64 MB di dimensioni totali di query espanse) e 404 o 403 errori per externaldata i BLOB.
    • Failed - Ripulitura non riuscita e non verrà ritentata. Questo errore può verificarsi se l'operazione era in attesa nella coda per troppo tempo (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à esaminato dal team.
  • StateDetails : descrizione dello stato.
  • EngineStartTime - ora in cui il comando è stato emesso al motore. Se c'è una grande differenza tra questa ora e ScheduledTime, in genere è presente un backlog significativo delle operazioni di eliminazione e il cluster non è in linea con il ritmo.
  • EngineDuration - tempo di esecuzione effettiva dell'eliminazione nel motore. Se la ripulitura è stata ritentata più volte, è la somma di tutte le durate di esecuzione.
  • Retries - Numero di tentativi di ripetizione dell'operazione da parte del servizio Migrazione del database a causa di un errore temporaneo.
  • ClientRequestId - ID attività client della richiesta di ripulitura dm.
  • Principal - identità dell'autorità emittente del comando di eliminazione.

Eliminazione di un'intera tabella

L'eliminazione di una tabella include l'eliminazione della tabella e la contrassegna come ripulita in modo che il processo di eliminazione definitiva descritto in Purge process venga eseguito su di esso. L'eliminazione di una tabella senza eliminazione non comporta l'eliminazione di tutti gli artefatti di archiviazione. Questi artefatti vengono eliminati in base ai criteri di conservazione hard impostati inizialmente 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 TableName allrecords della tabella di eliminazione nell'endpoint https://ingest-Gestione dati [YourClusterName].[ region].kusto.windows.net.

Elimina tabella TableName allrecords comando

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

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

    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 di .
    TableName Nome della tabella.
    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. In questo passaggio viene restituito un token per tornare al comando ed eseguire il passaggio 2.

Esempio: Ripulitura 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 corrisponde all'output del comando '.show tables' (restituito senza la tabella rimossa).

    Output

    TableName DatabaseName Cartella DocString
    OtherTable MyDatabase --- ---

Esempio: Ripulitura in un unico passaggio

Per attivare un'eliminazione in uno scenario di attivazione in un unico 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 corrisponde all'output del comando '.show tables' (restituito senza la tabella rimossa).

Output

TableName DatabaseName Cartella DocString
OtherTable MyDatabase --- ---