Поделиться через


Очистка данных

Примечание

В этой статье приведены пошаговые инструкции по удалению персональных данных с устройства или из службы. Эти сведения можно использовать для соблюдения обязательств согласно Общему регламенту по защите данных (GDPR). Общие сведения о GDPR см. в разделе, посвященном GDPR, в Центре управления безопасностью Майкрософт и на портале Service Trust Portal.

Как платформа данных Azure Data Explorer поддерживает возможность удаления отдельных записей с помощью Kusto .purge и связанных команд. Можно также очистить всю таблицу или очистить записи в материализованном представлении.

Предупреждение

Удаление данных с помощью .purge команды предназначено для защиты персональных данных и не должно использоваться в других сценариях. Он не предназначен для поддержки частых запросов на удаление или удаления больших объемов данных и может существенно повлиять на производительность службы.

Рекомендации по очистке

Тщательно разработайте схему данных и изучите соответствующие политики перед сохранением персональных данных в Azure Data Explorer.

  1. В лучшем случае срок хранения этих данных достаточно короткий, и данные автоматически удаляются.
  2. Если использование периода хранения невозможно, изолируйте все данные, на которые распространяются правила конфиденциальности, в нескольких таблицах Data Explorer Azure. Оптимально использовать только одну таблицу и связать с ней все остальные таблицы. Такая изоляция позволяет запустить процесс очистки данных в нескольких таблицах, в которой содержатся конфиденциальные данные, и избежать всех остальных таблиц.
  3. Вызывающий объект должен выполнять каждую попытку пакетного .purge выполнения команд до 1–2 команд на таблицу в день. Не выдавайте несколько команд с уникальными предикатами удостоверений пользователей. Вместо этого отправьте одну команду, предикат которой включает все удостоверения пользователей, требующие очистки.

Процесс очистки

Процесс выборочной очистки данных из Azure Data Explorer выполняется в следующих шагах.

  1. Этап 1. Предоставьте входные данные с именем таблицы azure Data Explorer и предикатом для каждой записи, указывая, какие записи следует удалить. Kusto сканирует таблицу, чтобы определить экстенты данных, которые будут участвовать в очистке данных. Определяемые экстенты — это те, которые имеют одну или несколько записей, для которых предикат возвращает значение true.

  2. Этап 2. (Обратимое удаление) Замена каждого экстента данных в таблице (определенной на шаге (1)) повторной версией. В повторном приеме версии не должно быть записей, для которых предикат возвращает значение true. Если новые данные не принимаются в таблицу, к концу этого этапа запросы больше не будут возвращать данные, для которых предикат возвращает значение true. Длительность этапа обратимого удаления зависит от следующих параметров:

    • Количество записей, которые необходимо очистить.
    • Распределение записей между экстентами данных в кластере
    • Количество узлов в кластере
    • Резервная емкость, которая имеется для операций очистки
    • Несколько других факторов

    Длительность этапа 2 может варьироваться от нескольких секунд до нескольких часов.

  3. Этап 3. (Жесткое удаление) Восстановление всех артефактов хранилища, которые могут содержать "подозрительные" данные, и удалите их из хранилища. Этот этап выполняется по крайней мере через пять дней после завершения предыдущего этапа, но не дольше 30 дней после первоначальной команды. Эти временные шкалы настроены в соответствии с требованиями к конфиденциальности данных.

.purge Выполнение команды активирует этот процесс, который занимает несколько дней. Если плотность записей, к которым применяется предикат, достаточно велика, процесс будет эффективно повторно принимать все данные в таблице. Этот повторный прием оказывает значительное влияние на производительность и coGS (стоимость проданных товаров).

Ограничения и рекомендации по очистке

  • Процесс очистки является окончательным и необратимым. Отменить этот процесс или восстановить данные, которые были удалены, невозможно. Такие команды, как отмена удаления таблицы , не могут восстановить очищенные данные. Откат данных до предыдущей версии не может перейти к до последней команды очистки.

  • Перед выполнением очистки проверьте предикат, выполнив запрос и убедившись, что результаты соответствуют ожидаемому результату. Можно также использовать двухэтапный процесс, который возвращает ожидаемое количество записей, которые будут удалены.

  • Команда .purge выполняется для конечной точки Управление данными: https://ingest-[YourClusterName].[region].kusto.windows.net. Команда требует разрешений администратора баз данных для соответствующих баз данных.

  • Из-за влияния на производительность процесса очистки и обеспечения соблюдения рекомендаций по очистке вызывающий объект должен изменить схему данных таким образом, чтобы минимальные таблицы включали соответствующие данные и пакетные команды для каждой таблицы, чтобы уменьшить значительное влияние COGS на процесс очистки.

  • Параметр predicate команды .purge используется для указания записей для очистки. Predicate Размер ограничен 1 МБ. При создании predicate:

    • Используйте оператор in, например where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000').
    • Обратите внимание на ограничения оператора in (список может содержать до 1,000,000 значений).
    • Если размер запроса большой, используйте externaldata оператор , например where UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."]). В файле хранится список идентификаторов для очистки.
    • Общий размер запроса после развертывания всех externaldata BLOB-объектов (общий размер всех BLOB-объектов) не может превышать 64 МБ.

Производительность очистки

В любой момент времени в кластере можно выполнить только один запрос на очистку. Все остальные запросы помещаются в очередь в Scheduled состоянии . Отслеживайте размер очереди запроса на очистку и соблюдайте соответствующие ограничения в соответствии с требованиями, применимыми к данным.

Чтобы сократить время выполнения очистки, выполните приведенные далее действия.

Запуск процесса очистки

Примечание

Выполнение очистки вызывается путем выполнения команды purge table TableName records в конечной точке https://ingest-Управление данными [Имя_объекта_объекта].[ Регион].kusto.windows.net.

Команда Purge table TableName records

Команда Purge может вызываться двумя способами для разных сценариев использования:

  • Программный вызов — один шаг, который должен вызываться приложениями. Вызов этой команды напрямую активирует последовательность выполнения очистки.

    Синтаксис

    // 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]
    
  • Вызов человеком — двухэтапный процесс, который требует явного подтверждения в качестве отдельного шага. Первый вызов команды возвращает маркер проверки, который должен быть предоставлен для выполнения фактической очистки. Эта последовательность снижает риск случайного удаления неправильных данных.

Примечание

Первый шаг в двухфакторном вызове требует выполнения запроса ко всему набору данных для определения записей, которые необходимо очистить. Этот запрос может завершиться сбоем или сбоем в больших таблицах, особенно при значительном объеме данных холодного кэша. В случае сбоев проверьте предикат самостоятельно и после проверки правильности используйте одношаговую очистку с параметром noregrets .

Синтаксис

Примечание

Сведения о подключении к кластеру с помощью пользовательского веб-интерфейса azure Data Explorer см. в статье Добавление кластеров.

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

Чтобы очистить материализованное представление, замените table ключевое слово materialized-viewна , а TableNameна MaterializedViewName.

Параметры Описание
DatabaseName Имя базы данных.
TableName / MaterializedViewName Имя таблицы или материализованного представления для очистки.
Predicate Определяет записи для очистки. См. раздел Ограничения для очистки предиката.
noregrets Если задано значение , активирует одношаговую активацию.
verificationtoken В сценарии двухфакторной активации (noregrets не задано) этот маркер можно использовать для выполнения второго шага и фиксации действия. Если verificationtoken параметр не указан, будет активирован первый шаг команды. Сведения о очистке будут возвращены с маркером, который должен быть передан обратно в команду для выполнения шага 2.

Очистка ограничений предиката

  • Предикат должен быть простым выбором (например, где [ColumnName] == 'X'where / [ColumnName] in ('X', 'Y', 'Z') и [OtherColumn] == 'A').
  • Несколько фильтров должны быть объединены с "и", а не с отдельными where предложениями (например, where [ColumnName] == 'X' and OtherColumn] == 'Y' и не where [ColumnName] == 'X' | where [OtherColumn] == 'Y').
  • Предикат не может ссылаться на таблицы, отличные от таблицы, для которой выполняется очистка (TableName). Предикат может включать только оператор selection (where). Он не может проецвести определенные столбцы из таблицы (схема вывода при выполнении 'table | Предикат должен соответствовать схеме таблицы).
  • Системные функции (например, ingestion_time(), extent_id()) не поддерживаются.

Пример. Двухэтапная очистка

Чтобы начать очистку в сценарии двухфакторной активации, выполните шаг 1 команды:

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

Выходные данные

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

Затем проверьте NumRecordsToPurge перед выполнением шага 2.

Чтобы завершить очистку в сценарии двухфакторной активации, используйте маркер проверки, возвращенный на шаге 1, чтобы выполнить шаг 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')

Выходные данные

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 Запланировано 0 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения AAD=...

Пример: одношаговая очистка

Чтобы активировать очистку в сценарии одношаговой активации, выполните следующую команду:

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

Выходные данные

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 Запланировано 0 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения AAD=...

Команда отмены операции очистки

При необходимости можно отменить ожидающие запросы на очистку.

Примечание

Эта операция предназначена для сценариев восстановления ошибок. Это не гарантируется, и он не должен быть частью нормального рабочего потока. Он может применяться только к запросам, которые все еще находятся в очереди и еще не были отправлены для выполнения.

Синтаксис

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

Пример. Отмена одной операции очистки

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

Выходные данные

Выходные данные этой команды совпадают с выходными данными команды show purges OperationId, показывающими обновленное состояние отменяемой операции очистки. Если попытка выполнена успешно, состояние операции обновляется на Canceled. В противном случае состояние операции не изменяется.

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 Отменено 0 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения AAD=...

Пример. Отмена всех ожидающих операций очистки в базе данных

 .cancel all purges in database MyDatabase

Выходные данные

Выходные данные этой команды совпадают с выходными данными команды show purges , отображая все операции в базе данных с обновленным состоянием. Состояние операций, которые были успешно отменены, изменится на Canceled. В противном случае состояние операции не изменяется.

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 Отменено 0 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения 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 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения AAD=...

Отслеживание состояния операции очистки

Примечание

Операции очистки можно отслеживать с помощью команды show purges, выполняемой для конечной точки https://ingest-Управление данными [Имя_вашего_объекта].[ регион].kusto.windows.net.

Состояние = "Завершено" указывает на успешное завершение первого этапа операции очистки, т. е. записи удаляются обратимо и больше не доступны для выполнения запросов. Клиенты не должны отслеживать и проверять завершение второго этапа (жесткое удаление). Этот этап отслеживается внутри Data Explorer Azure.

Команда Show purges

Show purges Команда отображает состояние операции очистки путем указания идентификатора операции в течение запрошенного периода времени.

.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
Свойства Описание Обязательно или необязательно
OperationId Идентификатор операции Управление данными, выведенный после выполнения одного или второго этапа. Обязательный
StartDate Более низкий предел времени для операций фильтрации. Если этот параметр опущен, по умолчанию используется значение за 24 часа до текущего времени. Необязательно
EndDate Максимальное время для операций фильтрации. Если этот параметр опущен, по умолчанию используется текущее время. Необязательно
DatabaseName Имя базы данных для фильтрации результатов. Необязательно

Примечание

Состояние будет предоставляться только для баз данных, для которых клиент имеет разрешения на Администратор базы данных.

Примеры

.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

Выходные данные

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 Завершено Очистка завершена успешно (артефакты хранилища в ожидании удаления) 2019-01-20 11:41:34.6486506 00:00:04.4687310 0 КЕ. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 Идентификатор приложения AAD=...
  • OperationId — идентификатор операции dm, возвращаемый при выполнении очистки.
  • DatabaseName** — имя базы данных (с учетом регистра).
  • TableName — имя таблицы (с учетом регистра).
  • ScheduledTime — время выполнения команды очистки в службе DM.
  • Duration — общая длительность операции очистки, включая время ожидания очереди выполнения DM.
  • EngineOperationId — идентификатор операции фактической очистки, выполняемой в подсистеме.
  • State — состояние очистки может иметь одно из следующих значений:
    • Scheduled — операция очистки запланирована для выполнения. Если задание остается запланированным, вероятно, есть невыполненная работа по операциям очистки. Чтобы очистить эту невыполненную работу, см. раздел Очистка производительности . Если операция очистки завершается сбоем из-за временной ошибки, она будет повторно вызвана dm и снова задана как Запланированная (поэтому вы можете увидеть переход операции с Scheduled на InProgress и обратно на Запланировано).
    • InProgress — в подсистеме выполняется операция очистки.
    • Completed — очистка успешно завершена.
    • BadInput — очистка завершилась сбоем при неправильном входе и не будет повторна. Эта ошибка может быть вызвана различными проблемами, такими как синтаксическая ошибка в предикате, недопустимый предикат для команд очистки, запрос, превышающий ограничения (например, более 1 млн сущностей в externaldata операторе или более 64 МБ от общего размера расширенного запроса) и ошибки 404 или 403 для externaldata BLOB-объектов.
    • Failed - очистка завершилась сбоем и не будет повторна. Этот сбой может произойти, если операция находилась в очереди слишком долго (более 14 дней) из-за невыполненной работы других операций очистки или ряда сбоев, превышающих ограничение повторных попыток. Последнее создаст внутреннее оповещение мониторинга и будет изучено командой azure Data Explorer.
  • StateDetails — описание состояния.
  • EngineStartTime — время, когда команда была выдана обработчику. Если между этим временем и scheduledTime существует большая разница, обычно существует значительная невыполненная работа по операциям очистки, и кластер не успевает за темпом.
  • EngineDuration — время фактического выполнения очистки в подсистеме. Если повторная проверка очистки была выполнена несколько раз, это сумма всех длительности выполнения.
  • Retries — количество повторных попыток операции службой DM из-за временной ошибки.
  • ClientRequestId — идентификатор действия клиента запроса на очистку dm.
  • Principal — удостоверение издателя команды очистки.

Очистка всей таблицы

Очистка таблицы включает удаление таблицы и ее пометку как очищенную, чтобы в ней выполнялся процесс жесткого удаления, описанный в разделе Процесс очистки . Удаление таблицы без очистки не приводит к удалению всех артефактов хранилища. Эти артефакты удаляются в соответствии с политикой жесткого хранения, изначально заданной для таблицы. Команда purge table allrecords является быстрой и эффективной и предпочтительнее процесса очистки записей, если это применимо для вашего сценария.

Примечание

Команда вызывается путем выполнения команды purge tableName allrecords в конечной точке https://ingest-Управление данными [Имя_вашего_кластера].[ регион].kusto.windows.net.

Команда Purge table TableName allrecords

Как и команда .purge table records , эту команду можно вызывать в программном (одноэтапном) или в ручном (двухэтапном) режиме.

  1. Программный вызов (один шаг):

    Синтаксис

    // 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. Вызов человека (в два этапа):

    Синтаксис

    
    // 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>')
    
    Параметры Описание
    DatabaseName Имя базы данных.
    TableName Имя таблицы.
    noregrets Если задано значение , активирует одношаговую активацию.
    verificationtoken В сценарии двухфакторной активации (noregrets не задано) этот токен можно использовать для выполнения второго шага и фиксации действия. Если verificationtoken параметр не указан, он активирует первый шаг команды. На этом шаге возвращается маркер для передачи обратно команде и выполнения шага 2.

Пример. Двухэтапная очистка

  1. Чтобы начать очистку в сценарии двухфакторной активации, выполните шаг 1 команды :

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

    Выходные данные

    VerificationToken
    e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b
  2. Чтобы завершить очистку в сценарии двухфакторной активации, используйте маркер проверки, возвращенный на шаге 1 для выполнения шага 2:

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

    Выходные данные совпадают с выходными данными команды .show tables (возвращаются без очищенной таблицы).

    Выходные данные

    TableName имя_базы_данных Папка DocString
    OtherTable MyDatabase --- ---

Пример: одношаговая очистка

Чтобы запустить очистку в сценарии одношаговой активации, выполните следующую команду:

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

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

Выходные данные совпадают с выходными данными команды .show tables (возвращаются без очищенной таблицы).

Выходные данные

TableName имя_базы_данных Папка DocString
OtherTable MyDatabase --- ---