Очистка данных
Область применения: ✅Azure Data Explorer
Примечание.
В этой статье приведены пошаговые инструкции по удалению персональных данных с устройства или из службы. Эти сведения можно использовать для соблюдения обязательств согласно Общему регламенту по защите данных (GDPR). Общие сведения о GDPR см. в разделе GDPR Центра управления безопасностью Майкрософт и в разделе GDPR на портале Service Trust Portal.
Платформа данных поддерживает возможность удаления отдельных записей с помощью Kusto .purge
и связанных команд. Вы также можете очистить всю таблицу или очистить записи в материализованном представлении.
Предупреждение
Удаление данных с помощью .purge
команды предназначено для защиты персональных данных и не должно использоваться в других сценариях. Он не предназначен для поддержки частых запросов на удаление или удаления больших объемов данных, и может оказать значительное влияние на производительность службы.
Рекомендации по очистке
Тщательно спроектируйте схему данных и изучите соответствующие политики перед хранением персональных данных.
- В лучшем случае срок хранения этих данных достаточно короткий, и данные автоматически удаляются.
- Если использование периода хранения невозможно, изолируйте все данные, подлежащие правилам конфиденциальности, в нескольких таблицах. Оптимально используйте только одну таблицу и свяжите ее со всех остальных таблиц. Эта изоляция позволяет запускать процесс очистки данных в нескольких таблицах, содержащих конфиденциальные данные, и избегать всех остальных таблиц.
- Вызывающий объект должен выполнить каждую попытку пакетировать выполнение
.purge
команд до 1–2 команд в день. Не выдает несколько команд с уникальными предикатами удостоверений пользователя. Вместо этого отправьте одну команду, предикат которой включает все удостоверения пользователей, для которых требуется очистка.
Процесс очистки
Процесс выборочной очистки данных выполняется в следующих шагах:
Этап 1. Укажите входные данные с именем таблицы и предикатом для каждой записи, указывая, какие записи нужно удалить. Kusto сканирует таблицу, чтобы определить экстенты данных, которые будут участвовать в очистке данных. Определяемые экстенты — это те, у которых есть одна или несколько записей, для которых предикат возвращает значение true.
Этап 2. (Обратимое удаление) Замените каждую степень данных в таблице (идентифицированной на шаге (1)) повторной версией. У повторной версии не должно быть записей, для которых предикат возвращает значение true. Если новые данные не принимаются в таблицу, то к концу этого этапа запросы больше не будут возвращать данные, для которых предикат возвращает значение true. Длительность этапа обратимого удаления очистки зависит от следующих параметров:
- Количество записей, которые необходимо очистить
- Распределение записей между экстентами данных в кластере
- Количество узлов в кластере
- Резервная емкость, которая имеется для операций очистки
- Несколько других факторов
Длительность этапа 2 может варьироваться от нескольких секунд до нескольких часов.
Этап 3. Восстановление всех артефактов хранилища, которые могут содержать "токсичные" данные, и удалите их из хранилища. Этот этап выполняется по крайней мере пять дней после завершения предыдущего этапа, но не более 30 дней после первоначальной команды. Эти временные шкалы предназначены для соблюдения требований к конфиденциальности данных.
.purge
Выполнение команды запускает этот процесс, который занимает несколько дней. Если плотность записей, для которых применяется предикат, достаточно велика, процесс будет эффективно повторно возвращать все данные в таблице. Это повторение оказывает значительное влияние на производительность и COGS (стоимость проданных товаров).
Очистка ограничений и рекомендаций
Процесс очистки является окончательным и необратимым. Невозможно отменить этот процесс или восстановить данные, которые были удалены. Команды, такие как удаление таблицы отмены, не могут восстановить удаленные данные. Откат данных до предыдущей версии не может перейти до последней команды очистки.
Перед выполнением очистки проверьте предикат, выполнив запрос и убедившись, что результаты соответствуют ожидаемому результату. Вы также можете использовать двухфакторный процесс, который возвращает ожидаемое количество записей, которые будут удалены.
Команда
.purge
выполняется в конечной точке Управление данными:https://ingest-[YourClusterName].[region].kusto.windows.net
Команда требует разрешений администратора баз данных для соответствующих баз данных.Из-за влияния на производительность процесса очистки и обеспечения соблюдения рекомендаций по очистке вызывающий объект, как ожидается, изменит схему данных таким образом, чтобы минимальные таблицы включали соответствующие данные и пакетные команды для каждой таблицы, чтобы уменьшить значительное влияние COGS на процесс очистки.
Параметр
predicate
команды .purge позволяет указать записи для очистки.Predicate
Размер ограничен 1 МБ. При создании :predicate
- Например,
where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')
используйте оператор in. - Обратите внимание на ограничения оператора in (список может содержать до
1,000,000
значений). - Если размер запроса велик, используйте
externaldata
оператор, напримерwhere UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."])
. Файл сохраняет список идентификаторов для очистки. - Общий размер запроса после расширения всех больших двоичных объектов (общий размер всех
externaldata
больших двоичных объектов) не может превышать 64 МБ.
- Например,
Очистка производительности
В любое время в кластере может выполняться только один запрос очистки. Все остальные запросы помещаются в очередь в Scheduled
состоянии.
Отслеживайте размер очереди запроса на очистку и сохраняйте их в достаточном объеме, чтобы соответствовать требованиям, применимым для ваших данных.
Чтобы уменьшить время выполнения очистки:
Следуйте рекомендациям по очистке, чтобы уменьшить объем очищенных данных.
Настройте политику кэширования, так как очистка занимает больше времени для холодных данных.
Горизонтальное масштабирование кластера
Увеличьте емкость очистки кластера после тщательного рассмотрения, как описано в разделе "Экстенты очистки емкости перестроения".
Активация процесса очистки
Примечание.
Выполнение очистки вызывается путем выполнения команды записи таблицы purge tableName в конечной точке https://ingest-Управление данными [YourClusterName].[ Регион].kusto.windows.net.
Команда Purge tableName records
Команда очистки может вызываться двумя способами для различных сценариев использования:
Программный вызов — один шаг, который должен вызываться приложениями. Вызов этой команды напрямую активирует последовательность выполнения очистки.
Синтаксис
// 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.
Параметры | Description |
---|---|
DatabaseName |
Имя базы данных. |
TableName / MaterializedViewName |
Имя таблицы или материализованного представления для очистки. |
Predicate |
Определяет записи для очистки. См . ограничения предиката очистки. |
noregrets |
Если задано, активирует одношаговую активацию. |
verificationtoken |
В двухфакторном сценарии активации (noregrets не задано), этот маркер можно использовать для выполнения второго шага и фиксации действия. Если verificationtoken он не указан, он активирует первый шаг команды. Сведения о очистке будут возвращены с маркером, который должен быть передан команде для выполнения шага 2. |
Очистка ограничений предиката
- Предикат должен быть простым выбором (например, где [ColumnName] == "X / ", где [ColumnName] в ("X", "Y", "Z") и [OtherColumn] == "A".
- Несколько фильтров должны сочетаться с "и", а не отдельными
where
предложениями (например,where [ColumnName] == 'X' and OtherColumn] == 'Y'
а неwhere [ColumnName] == 'X' | where [OtherColumn] == 'Y'
). - Предикат не может ссылаться на таблицы, отличные от таблицы, очищаемой (TableName). Предикат может включать только инструкцию выбора (
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 | ПроверкаToken |
---|---|---|
1596 | 00:00:02 | e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa6575736b |
Затем проверьте 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-Управление данными [YourClusterName].[ регион].kusto.windows.net.
Состояние = "Завершено" означает успешное завершение первой фазы операции очистки, то есть записи обратимо удалены и больше не доступны для запроса. Клиенты не должны отслеживать и проверять завершение второго этапа (жесткое удаление). Этот этап отслеживается внутри системы.
Показать команду очистки
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>]
Свойства | Description | Обязательная или необязательная |
---|---|---|
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
— время выполнения команды очистки в службе интеллектуального анализа данных.Duration
— общая длительность операции очистки, включая время ожидания очереди интеллектуального анализа данных выполнения.EngineOperationId
— идентификатор операции фактической очистки, выполняемой в обработчике.State
— состояние очистки может быть одним из следующих значений:Scheduled
— операция очистки запланирована для выполнения. Если задание остается запланированным, вероятно, существует невыполненная работа операций очистки. Сведения о очистке производительности для очистки этой невыполненной работы. Если операция очистки завершается сбоем при временной ошибке, она будет возвращена dm и снова задана как запланированная (поэтому вы можете увидеть переход с Scheduled на InProgress и обратно на Scheduled).InProgress
— операция очистки выполняется в подсистеме.Completed
— очистка завершена успешно.BadInput
— очистка не выполнена при плохом входе и не будет извлечена. Эта ошибка может возникнуть из-за различных проблем, таких как синтаксическая ошибка в предикате, недопустимая предиката для команд очистки, запрос, превышающий ограничения (например, более 1M сущностей вexternaldata
операторе или более 64 МБ общего размера развернутого запроса), а также ошибки 404 или 403 дляexternaldata
БОЛЬШИХ двоичных объектов.Failed
- сбой очистки и не будет извлечен. Эта ошибка может произойти, если операция ждала в очереди слишком долго (более 14 дней), из-за невыполненной работы других операций очистки или ряда сбоев, превышающих ограничение повторных попыток. Последний вызовет внутреннее оповещение мониторинга и будет расследовано командой.
StateDetails
— описание состояния.EngineStartTime
— время выдачи команды подсистеме. Если между этим временем и ScheduledTime существует большая разница, обычно происходит значительное невыполнение операций очистки, и кластер не в курсе.EngineDuration
— время фактического выполнения очистки в подсистеме. Если очистка была выполнена несколько раз, это сумма всех длительности выполнения.Retries
— количество раз, когда операция была извлечена службой интеллектуального анализа данных из-за временной ошибки.ClientRequestId
— идентификатор действия клиента запроса на очистку dm.Principal
— удостоверение издателя команды очистки.
Очистка всей таблицы
Очистка таблицы включает удаление таблицы и маркировку ее как очистку, чтобы процесс жесткого удаления, описанный в процессе очистки, выполняется на нем.
Удаление таблицы без очистки не удаляет все артефакты хранилища. Эти артефакты удаляются в соответствии с политикой жесткого хранения, изначально заданной в таблице.
Команда purge table allrecords
является быстрой и эффективной и предпочтительнее процесса очистки записей, если применимо к вашему сценарию.
Примечание.
Эта команда вызывается с помощью команды purge tableName allrecords в конечной точке https://ingest-Управление данными [YourClusterName].[ регион].kusto.windows.net.
Команда Purge tableName allrecords
Аналогично команде '.purge table records ', эта команда может вызываться программным (однофакторным) или в режиме ручного (двухфакторного) режима.
Программное вызов (одношаговые):
Синтаксис
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table [TableName] in database [DatabaseName] allrecords with (noregrets='true')
Вызов человека (два шага):
Синтаксис
// 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>')
Параметры Description DatabaseName
Имя базы данных . TableName
Имя таблицы. noregrets
Если задано, активирует одношаговую активацию. verificationtoken
В двухфакторном сценарии активации ( noregrets
не задано), этот маркер можно использовать для выполнения второго шага и фиксации действия. Еслиverificationtoken
он не указан, он активирует первый шаг команды. На этом шаге маркер возвращается, чтобы вернуться к команде и выполнить шаг 2.
Пример: двухфакторная очистка
Чтобы начать очистку в двухфакторном сценарии активации, выполните шаг 1 команды:
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table MyTable in database MyDatabase allrecords
Выходные данные
VerificationToken
e43c7184ed2f4f23c7a9d7b124d196be2e570096987e5baadf65057fa6575736b Чтобы завершить очистку в двухфакторном сценарии активации, используйте маркер проверки, возвращенный из шага 1, чтобы выполнить шаг #2:
.purge table MyTable in database MyDatabase allrecords with (verificationtoken=h'eyJT.....')
Выходные данные совпадают с выходными данными команды .show (возвращаются без очистки таблицы).
Выходные данные
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 (возвращаются без очистки таблицы).
Выходные данные
TableName | имя_базы_данных | Папка | DocString |
---|---|---|---|
OtherTable | MyDatabase | --- | --- |