Compartilhar via


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.

  1. Na melhor das hipóteses, o período de retenção desses dados é suficientemente curto e os dados são excluídos automaticamente.
  2. 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.
  3. 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:

  1. 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.

  2. 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.

  3. 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 o predicate:

    • 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 exemplo where 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.

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-viewe 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ão where [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 um externaldata operador ou mais de 64 MB de tamanho total de consulta expandida) e erros 404 ou 403 para externaldata 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).

  1. 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')
    
  2. 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. Se verificationtoken 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

  1. 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
  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 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 --- ---