Share via


Limpeza de dados

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.

Como uma plataforma de dados, o Azure Data Explorer dá suporte à capacidade de excluir registros individuais usando o 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 dar suporte a solicitações de exclusão frequentes ou à exclusão de grandes quantidades de dados e pode ter um impacto significativo no desempenho no serviço.

Diretrizes do comando Purge

Crie cuidadosamente seu esquema de dados e investigue políticas relevantes antes de armazenar dados pessoais no Azure Data Explorer.

  1. Em um cenário melhor, o período de retenção nesses 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 Data Explorer do Azure. O ideal é usar apenas uma tabela e vincular a ela de todas as outras tabelas. Esse isolamento permite executar o processo de limpeza de dados em algumas tabelas que contêm dados confidenciais e evitar todas as outras tabelas.
  3. O chamador deve fazer todas as tentativas de executar em lote a execução de .purge comandos para 1 a 2 comandos por tabela por dia. Não emita vários comandos com predicados exclusivos de identidade do usuário. Em vez disso, envie um único comando cujo predicado inclui todas as identidades de usuário que exigem limpeza.

Processo de limpeza

O processo de limpeza seletiva de dados do Azure Data Explorer ocorre nas seguintes etapas:

  1. Fase 1: forneça uma entrada com um nome de tabela Data Explorer do Azure e um predicado por registro, indicando quais registros excluir. O Kusto examina a tabela que procura identificar as 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 redimensiva. A versão mais reingestada não deve ter os registros para os quais o predicado retorna true. Se novos dados não estiverem sendo ingeridos na tabela, até o final dessa fase, as consultas não retornarão mais dados para os quais o predicado retornará 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
    • Registrar distribuição entre as extensões de dados no cluster
    • O número de nós no cluster
    • A capacidade sobressalente que ele tem para operações de limpeza
    • Vários outros fatores

    A duração da fase 2 pode variar entre alguns segundos e muitas horas.

  3. Fase 3: (Exclusão temporária) Trabalhe de volta todos os artefatos de armazenamento que possam ter os dados "venenosos" e exclua-os do armazenamento. Essa 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. Essas linhas do tempo são definidas para seguir os requisitos de privacidade de dados.

Emitir um .purge comando dispara esse processo, o 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 reingessará efetivamente todos os dados na tabela. Essa reingesção tem um impacto significativo no desempenho e no COGS (custo das mercadorias vendidas).

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 a queda de tabela não podem recuperar dados limpos. A reversão dos dados para uma versão anterior não pode ser acessada 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 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 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 limpar. 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.

Limpar o desempenho

Somente 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 corresponder aos requisitos aplicáveis aos seus dados.

Para reduzir o tempo de execução de limpeza:

Disparar o processo de limpeza

Observação

A execução de limpeza é invocada executando o comando limpar tabela TableName records no ponto de extremidade https://ingest-Gerenciamento de Dados [YourClusterName].[ Região].kusto.windows.net.

Comando Limpar tabela TableName records

O comando Purge pode ser invocado de duas maneiras para cenários de uso diferentes:

  • 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 na invocação de duas etapas requer a execução de uma consulta em todo o conjunto de dados para identificar 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 opção noregrets .

Sintaxe

Observação

Para se conectar a um cluster usando a interface do usuário da Web Data Explorer do Azure, 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 o 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. Confira Limpar limitações de predicado.
noregrets Se definido, dispara uma ativação de etapa única.
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 disparará 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 nº 2.

Limitações de predicado de limpeza

  • O predicado deve ser uma seleção simples (por exemplo, em que [ColumnName] == 'X' / , em que [ColumnName] em ('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 referenciar 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 nº 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 VerificationToken
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. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID do aplicativo AAD=...

Exemplo: limpeza em etapa única

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. RunCommand; 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 que ele tenha êxito e não faça 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 expedidas 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 é igual à 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. RunCommand; 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 purges, mostrando todas as operações no banco de dados com seus status atualizados. As operações que foram canceladas com êxito terão seus status atualizados 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. RunCommand; 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. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID do aplicativo AAD=...

Acompanhar status de operação de limpeza

Observação

As operações de limpeza podem ser rastreadas com o comando show purges, executado no ponto de extremidade https://ingest-do Gerenciamento de Dados [YourClusterName].[ region].kusto.windows.net.

Status = 'Completed' 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 é esperado que os clientes acompanhem e verifiquem a conclusão da segunda fase (exclusão rígida). Essa fase é monitorada internamente pelo Data Explorer do Azure.

Comando Mostrar limpezas

Show purgesO comando mostra a operação de limpeza status especificando a 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 Gerenciamento de Dados gerada após a execução de uma única fase ou segunda fase. Obrigatório
StartDate Limite de tempo menor para operações de filtragem. Se omitido, o padrão será 24 horas antes da hora atual. Opcional
EndDate Limite de tempo superior para operações de filtragem. Se omitido, o padrão será a hora atual. Opcional
DatabaseName Nome do banco de dados para filtrar resultados. Opcional

Observação

O status será fornecido somente em bancos de dados para os quais o cliente tem permissões de banco de dados Administração.

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 Limpeza concluída com êxito (artefatos de armazenamento pendentes de exclusão) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 ID do aplicativo AAD=...
  • OperationId – a ID da operação de DM retornada 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 de limpeza para o serviço DM.
  • Duration – duração total da operação de limpeza, incluindo o tempo de espera da fila de DM de execução.
  • EngineOperationId – a ID da operação da limpeza 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. Confira Limpar o desempenho 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 Agendado para InProgress e voltar para Agendado).
    • InProgress – a operação de limpeza está em andamento no mecanismo.
    • Completed – limpeza concluída com êxito.
    • BadInput - A limpeza falhou na 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 1M de entidades em um externaldata operador ou mais de 64 MB do tamanho total da consulta expandida) e 404 ou 403 erros para externaldata blobs.
    • Failed - A limpeza falhou e não será repetida. Essa falha poderá 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 uma série de falhas que excedem o limite de repetição. Este último gerará um alerta de monitoramento interno e será investigado pela equipe de Data Explorer do Azure.
  • 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 horário e ScheduledTime, geralmente há 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 de limpeza real 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 de DM.
  • Principal – identidade do emissor do comando de limpeza.

Limpar uma tabela inteira

A limpeza de uma tabela inclui remover a tabela e marcá-la como limpa para que o processo de exclusão rígida descrito em Processo de limpeza seja executado nela. Remover uma tabela sem purgá-la não exclui todos os 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 allrecords TableName da tabela de limpeza no ponto de extremidade https://ingest-Gerenciamento de Dados [YourClusterName].[ region].kusto.windows.net.

Limpar tabela TableName comando allrecords

Semelhante ao comando '.purge table records ', esse comando pode ser invocado em uma programática (etapa única) ou em um modo 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, dispara uma ativação de etapa única.
    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 disparará a primeira etapa do comando. Nesta etapa, um token é retornado para passar de volta para o comando e executar a etapa nº 2.

Exemplo: limpeza em duas etapas

  1. Para iniciar a limpeza em um cenário de ativação em duas etapas, execute a etapa nº 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 nº 1 para executar a etapa nº 2:

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

    A saída é igual à saída do comando '.show tables' (retornada sem a tabela limpa).

    Saída

    TableName DatabaseName Pasta DocString
    OtherTable MyDatabase --- ---

Exemplo: limpeza de etapa única

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 é igual à saída do comando '.show tables' (retornada sem a tabela limpa).

Saída

TableName DatabaseName Pasta DocString
OtherTable MyDatabase --- ---