Limpeza de dados
Aplica-se a: ✅Azure Data Explorer
Observação
Este artigo mostra as etapas de como excluir dados pessoais do dispositivo ou serviço e pode ser usado para dar suporte às suas obrigações de acordo com o GDPR. Para obter informações gerais sobre o GDPR, confira a seção GDPR da Central de Confiabilidade da Microsoft e a seção GDPR do Portal de Confiança do Serviço.
A plataforma de dados dá suporte à capacidade de excluir registros individuais, usando Kusto .purge
e comandos relacionados. Você também pode limpar uma tabela inteira ou limpar registros em uma exibição materializada.
Aviso
A exclusão de dados por meio do .purge
comando foi projetada para ser usada para proteger dados pessoais e não deve ser usada em outros cenários. Ele não foi projetado para oferecer suporte a solicitações de exclusão frequentes ou exclusão de grandes quantidades de dados e pode ter um impacto significativo no desempenho do serviço.
Diretrizes do comando Purge
Projete cuidadosamente seu esquema de dados e investigue as políticas relevantes antes de armazenar dados pessoais.
- Na melhor das hipóteses, o período de retenção desses dados é suficientemente curto e os dados são excluídos automaticamente.
- Se o uso do período de retenção não for possível, isole todos os dados sujeitos a regras de privacidade em algumas tabelas. O ideal é usar apenas uma tabela e vinculá-la a todas as outras tabelas. Esse isolamento permite que você execute o processo de limpeza de dados em algumas tabelas que contêm dados confidenciais e evite todas as outras tabelas.
- O chamador deve fazer todas as tentativas de agrupar a execução de
.purge
comandos para 1-2 comandos por tabela por dia. Não emita vários comandos com predicados de identidade de usuário exclusivos. Em vez disso, envie um único comando cujo predicado inclua todas as identidades de usuário que exigem limpeza.
Processo de limpeza
O processo de limpeza seletiva de dados ocorre nas seguintes etapas:
Fase 1: Forneça uma entrada com um nome de tabela e um predicado por registro, indicando quais registros excluir. Kusto examina a tabela procurando identificar extensões de dados que participariam da limpeza de dados. As extensões identificadas são aquelas que têm um ou mais registros para os quais o predicado retorna true.
Fase 2: (Exclusão Reversível) Substitua cada extensão de dados na tabela (identificada na etapa (1)) por uma versão reformulada. A versão reingestada não deve ter os registros para os quais o predicado retorna true. Se novos dados não estiverem sendo ingeridos na tabela, ao final dessa fase, as consultas não retornarão mais dados para os quais o predicado retorna true. A duração da fase de exclusão reversível de limpeza depende dos seguintes parâmetros:
- O número de registros que devem ser limpos
- Distribuição de registros entre as extensões de dados no cluster
- O número de nós no cluster
- A capacidade sobressalente que possui para operações de purga
- Vários outros fatores
A duração da fase 2 pode variar entre alguns segundos a muitas horas.
Fase 3: (Exclusão Irreversível) Trabalhe em todos os artefatos de armazenamento que possam ter os dados "suspeitos" e exclua-os do armazenamento. Esta fase é feita pelo menos cinco dias após a conclusão da fase anterior, mas não mais do que 30 dias após o comando inicial. Esses cronogramas são definidos para seguir os requisitos de privacidade de dados.
A emissão de um .purge
comando aciona esse processo, que leva alguns dias para ser concluído. Se a densidade de registros para os quais o predicado se aplica for suficientemente grande, o processo irá efetivamente realimentar todos os dados na tabela. Essa reingestão tem um impacto significativo no desempenho e no CPV (custo dos produtos vendidos).
Limitações e considerações de limpeza
O processo de limpeza é final e irreversível. Não é possível desfazer esse processo ou recuperar dados que foram limpos. Comandos como desfazer queda de tabela não podem recuperar dados limpos. A reversão dos dados para uma versão anterior não pode ir antes do comando de limpeza mais recente.
Antes de executar a limpeza, verifique o predicado executando uma consulta e verificando se os resultados correspondem ao resultado esperado. Você também pode usar o processo de duas etapas que retorna o número esperado de registros que serão limpos.
O
.purge
comando é executado no ponto de extremidade do Gerenciamento de Dados:https://ingest-[YourClusterName].[region].kusto.windows.net
. O comando requer permissões de administrador de banco de dados nos bancos de dados relevantes.Devido ao impacto no desempenho do processo de limpeza e para garantir que as diretrizes de limpeza tenham sido seguidas, espera-se que o chamador modifique o esquema de dados para que as tabelas mínimas incluam dados relevantes e comandos em lote por tabela para reduzir o impacto significativo do COGS do processo de limpeza.
O
predicate
parâmetro do comando .purge é usado para especificar quais registros devem ser limpos.Predicate
o tamanho é limitado a 1 MB. Ao construir opredicate
:- Use o operador 'in', por exemplo,
where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')
. - Observe os limites do operador 'in' (a lista pode conter até
1,000,000
valores). - Se o tamanho da consulta for grande, use
externaldata
o operador, por exemplowhere UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."])
. O arquivo armazena a lista de IDs a serem limpas. - O tamanho total da consulta, depois de expandir todos os
externaldata
blobs (tamanho total de todos os blobs), não pode exceder 64 MB.
- Use o operador 'in', por exemplo,
Desempenho de limpeza
Apenas uma solicitação de limpeza pode ser executada no cluster, a qualquer momento. Todas as outras solicitações são enfileiradas no Scheduled
estado.
Monitore o tamanho da fila de solicitação de limpeza e mantenha-se dentro dos limites adequados para atender aos requisitos aplicáveis aos seus dados.
Para reduzir o tempo de execução da limpeza:
Siga as diretrizes de limpeza para diminuir a quantidade de dados limpos.
Ajuste a política de cache, pois a limpeza leva mais tempo em dados frios.
Escalar horizontalmente o cluster
Aumente a capacidade de limpeza do cluster, após uma consideração cuidadosa, conforme detalhado em Capacidade de reconstrução de limpeza de extensões.
Acionar o processo de limpeza
Observação
A execução da limpeza é invocada executando o comando purge table TableName records no ponto de extremidade https://ingest-do Data Management [YourClusterName].[ Região].kusto.windows.net.
Comando Limpar registros de tabela TableName
O comando Purge pode ser invocado de duas maneiras para diferentes cenários de uso:
Invocação programática: uma só etapa que se destina a ser invocada por aplicativos. Chamar esse comando dispara diretamente a sequência de execução de limpeza.
Sintaxe
// 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]
Invocação humana: um processo de duas etapas que requer uma confirmação explícita como etapa separada. A primeira invocação do comando retorna um token de verificação, que deve ser fornecido para executar a limpeza real. Essa sequência reduz o risco de excluir inadvertidamente dados incorretos.
Observação
A primeira etapa da invocação em duas etapas requer a execução de uma consulta em todo o conjunto de dados para identificar os registros a serem limpos.
Essa consulta pode atingir o tempo limite ou falhar em tabelas grandes, especialmente com uma quantidade significativa de dados de cache frio. Em caso de falhas, valide o predicado por conta própria e, depois de verificar a correção, use a limpeza de etapa única com a noregrets
opção.
Sintaxe
Observação
Para se conectar a um cluster usando a interface do usuário da Web do Azure Data Explorer, consulte Adicionar clusters.
// 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]
Para limpar uma exibição materializada, substitua a table
palavra-chave por materialized-view
e substitua TableName pelo MaterializedViewName.
Parâmetros | Descrição |
---|---|
DatabaseName |
Nome do banco de dados |
TableName / MaterializedViewName |
Nome da tabela/exibição materializada a ser limpa. |
Predicate |
Identifica os registros a serem limpos. Consulte limpar limitações de predicado. |
noregrets |
Se definido, aciona uma ativação em uma única etapa. |
verificationtoken |
No cenário de ativação em duas etapas (noregrets não está definido), esse token pode ser usado para executar a segunda etapa e confirmar a ação. Se verificationtoken não for especificado, ele acionará a primeira etapa do comando. As informações sobre a limpeza serão retornadas com um token que deve ser passado de volta para o comando para executar a etapa #2. |
Eliminar limitações de predicado
- O predicado deve ser uma seleção simples (por exemplo, em que [ColumnName] == 'X'onde / [ColumnName] in ('X', 'Y', 'Z') e [OtherColumn] == 'A').
- Vários filtros devem ser combinados com um 'e', em vez de cláusulas separadas
where
(por exemplo,where [ColumnName] == 'X' and OtherColumn] == 'Y'
e nãowhere [ColumnName] == 'X' | where [OtherColumn] == 'Y'
). - O predicado não pode fazer referência a tabelas diferentes da tabela que está sendo limpa (TableName). O predicado só pode incluir a instrução de seleção (
where
). Ele não pode projetar colunas específicas da tabela (esquema de saída ao executar 'table
| Predicado' deve corresponder ao esquema da tabela). - Não há suporte para funções do sistema (como
ingestion_time()
,extent_id()
)
Exemplo: Limpeza em duas etapas
Para iniciar a limpeza em um cenário de ativação em duas etapas, execute a etapa #1 do 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')
Saída
NumRecordsToPurge | EstimatedPurgeExecutionTime | Token de verificação |
---|---|---|
1\.596 | 00:00:02 | e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b |
Em seguida, valide o NumRecordsToPurge antes de executar a etapa #2.
Para concluir uma limpeza em um cenário de ativação em duas etapas, use o token de verificação retornado da etapa #1 para executar a etapa #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')
Saída
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 | Agendado | 0 | KE. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo AAD=... |
Exemplo: Limpeza em uma única etapa
Para disparar uma limpeza em um cenário de ativação de etapa única, execute o seguinte comando:
// 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')
Saída
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 | Agendado | 0 | KE. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo AAD=... |
Comando Cancelar operação de limpeza
Se necessário, você pode cancelar solicitações de limpeza pendentes.
Observação
Essa operação destina-se a cenários de recuperação de erros. Não há garantia de sucesso e não deve fazer parte de um fluxo operacional normal. Ele só pode ser aplicado a solicitações que ainda estão na fila e ainda não foram despachadas para execução.
Sintaxe
// 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
Exemplo: Cancelar uma única operação de limpeza
.cancel purge aa894210-1c60-4657-9d21-adb2887993e1
Saída
A saída desse comando é a mesma que a saída do comando 'show purges OperationId', mostrando o status atualizado da operação de limpeza que está sendo cancelada.
Se a tentativa for bem-sucedida, o estado da operação será atualizado para Canceled
. Caso contrário, o estado da operação não será alterado.
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 | Canceled | 0 | KE. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo AAD=... |
Exemplo: Cancelar todas as operações de limpeza pendentes em um banco de dados
.cancel all purges in database MyDatabase
Saída
A saída desse comando é a mesma que a saída do comando show purgas , mostrando todas as operações no banco de dados com seu status atualizado.
As operações que foram canceladas com êxito terão seu status atualizado para Canceled
. Caso contrário, o estado da operação não será alterado.
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 | Canceled | 0 | KE. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo 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. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo AAD=... |
Rastrear o status da operação de limpeza
Observação
As operações de limpeza podem ser rastreadas com o comando show purgas , executado no ponto de extremidade https://ingest-do Data Management [YourClusterName].[ região].kusto.windows.net.
Status = 'Concluído' indica a conclusão bem-sucedida da primeira fase da operação de limpeza, ou seja, os registros são excluídos temporariamente e não estão mais disponíveis para consulta. Não se espera que os clientes acompanhem e verifiquem a conclusão da segunda fase (exclusão irreversível). Esta fase é monitorada internamente.
Comando Mostrar limpezas
Show purges
mostra o status da operação de limpeza especificando o ID da operação dentro do período de tempo solicitado.
.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
Propriedades | Descrição | Obrigatório/opcional |
---|---|---|
OperationId |
A ID da operação de Gerenciamento de Dados gerada após a execução de uma fase única ou segunda fase. | Obrigatório |
StartDate |
Limite de tempo inferior para operações de filtragem. Se omitido, o padrão é 24 horas antes da hora atual. | Opcional |
EndDate |
Limite máximo de tempo para operações de filtragem. Se omitido, o padrão é a hora atual. | Opcional |
DatabaseName |
Nome do banco de dados para filtrar os resultados. | Opcional |
Observação
O status será fornecido somente em bancos de dados para os quais o cliente tem permissões de administrador de banco de dados.
Exemplos
.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
Saída
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 | Concluído(a) | Limpeza concluída com êxito (artefatos de armazenamento com exclusão pendente) | 2019-01-20 11:41:34.6486506 | 00:00:04.4687310 | 0 | KE. Executar Comando; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | ID do aplicativo AAD=... |
OperationId
- o ID da operação DM retornado ao executar a limpeza.DatabaseName
** - nome do banco de dados (diferencia maiúsculas de minúsculas).TableName
- nome da tabela (diferencia maiúsculas de minúsculas).ScheduledTime
- tempo de execução do comando purge para o serviço DM.Duration
- duração total da operação de limpeza, incluindo o tempo de espera da fila de execução do DM.EngineOperationId
- o ID da operação da purga real em execução no mecanismo.State
- estado de limpeza, pode ser um dos seguintes valores:Scheduled
- A operação de limpeza está agendada para execução. Se o trabalho permanecer agendado, provavelmente haverá uma lista de pendências de operações de limpeza. Consulte o desempenho de limpeza para limpar essa lista de pendências. Se uma operação de limpeza falhar em um erro transitório, ela será repetida pelo DM e definida como Agendada novamente (para que você possa ver uma transição de operação de Agendada para InProgress e de volta para Agendada).InProgress
- A operação de purga está em andamento no mecanismo.Completed
- Expurgo concluído com sucesso.BadInput
- A limpeza falhou em uma entrada incorreta e não será repetida. Essa falha pode ser devido a vários problemas, como um erro de sintaxe no predicado, um predicado ilegal para comandos de limpeza, uma consulta que excede os limites (por exemplo, mais de 1 milhão de entidades em umexternaldata
operador ou mais de 64 MB de tamanho total de consulta expandida) e erros 404 ou 403 paraexternaldata
blobs.Failed
- A limpeza falhou e não será repetida. Essa falha pode ocorrer se a operação estiver aguardando na fila por muito tempo (mais de 14 dias), devido a uma lista de pendências de outras operações de limpeza ou a várias falhas que excedem o limite de repetição. Este último levantará um alerta de monitoramento interno e será investigado pela equipe.
StateDetails
- uma descrição do Estado.EngineStartTime
- a hora em que o comando foi emitido para o mecanismo. Se houver uma grande diferença entre esse tempo e ScheduledTime, geralmente haverá uma lista de pendências significativa de operações de limpeza e o cluster não está acompanhando o ritmo.EngineDuration
- tempo de execução real da limpeza no mecanismo. Se a limpeza foi repetida várias vezes, é a soma de todas as durações de execução.Retries
- número de vezes que a operação foi repetida pelo serviço DM devido a um erro transitório.ClientRequestId
- ID de atividade do cliente da solicitação de limpeza do DM.Principal
- Identidade do emissor do comando de limpeza.
Limpando uma tabela inteira
Limpar uma tabela inclui descartar a tabela e marcá-la como limpa para que o processo de exclusão irreversível descrito em Limpar processo seja executado nela.
Descartar uma tabela sem limpá-la não exclui todos os seus artefatos de armazenamento. Esses artefatos são excluídos de acordo com a política de retenção rígida inicialmente definida na tabela.
O purge table allrecords
comando é rápido e eficiente e é preferível ao processo de limpeza de registros, se aplicável ao seu cenário.
Observação
O comando é invocado executando o comando purge table TableName allrecords no ponto de extremidade https://ingest-do Data Management [YourClusterName].[ região].kusto.windows.net.
Comando Limpar tabela TableName allrecords
Semelhante ao comando '.purge table records ', esse comando pode ser invocado em um modo programático (etapa única) ou manual (duas etapas).
Invocação programática (etapa única):
Sintaxe
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table [TableName] in database [DatabaseName] allrecords with (noregrets='true')
Invocação humana (duas etapas):
Sintaxe
// 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>')
Parâmetros Descrição DatabaseName
Nome do banco de dados. TableName
Nome da tabela. noregrets
Se definido, aciona uma ativação em uma única etapa. verificationtoken
No cenário de ativação em duas etapas ( noregrets
não está definido), esse token pode ser usado para executar a segunda etapa e confirmar a ação. Severificationtoken
não for especificado, ele acionará a primeira etapa do comando. Nesta etapa, um token é retornado para passar de volta para o comando e executar a etapa #2.
Exemplo: Limpeza em duas etapas
Para iniciar a limpeza em um cenário de ativação em duas etapas, execute a etapa #1 do comando:
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table MyTable in database MyDatabase allrecords
Saída
VerificationToken
e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b Para concluir uma limpeza em um cenário de ativação em duas etapas, use o token de verificação retornado da etapa #1 para executar a etapa #2:
.purge table MyTable in database MyDatabase allrecords with (verificationtoken=h'eyJT.....')
A saída é a mesma que a saída do comando '.show tables' (retornada sem a tabela limpa).
Saída
TableName DatabaseName Pasta DocString OutraTabela MyDatabase --- ---
Exemplo: Limpeza em uma única etapa
Para disparar uma limpeza em um cenário de ativação de etapa única, execute o seguinte comando:
// Connect to the Data Management service
#connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"
.purge table MyTable in database MyDatabase allrecords with (noregrets='true')
A saída é a mesma que a saída do comando '.show tables' (retornada sem a tabela limpa).
Saída
TableName | DatabaseName | Pasta | DocString |
---|---|---|---|
OutraTabela | MyDatabase | --- | --- |