Очистка данных
Примечание
В этой статье приведены пошаговые инструкции по удалению персональных данных с устройства или из службы. Эти сведения можно использовать для соблюдения обязательств согласно Общему регламенту по защите данных (GDPR). Общие сведения о GDPR см. в разделе, посвященном GDPR, в Центре управления безопасностью Майкрософт и на портале Service Trust Portal.
Как платформа данных Azure Data Explorer поддерживает возможность удаления отдельных записей с помощью Kusto .purge
и связанных команд. Можно также очистить всю таблицу или очистить записи в материализованном представлении.
Предупреждение
Удаление данных с помощью .purge
команды предназначено для защиты персональных данных и не должно использоваться в других сценариях. Он не предназначен для поддержки частых запросов на удаление или удаления больших объемов данных и может существенно повлиять на производительность службы.
Рекомендации по очистке
Тщательно разработайте схему данных и изучите соответствующие политики перед сохранением персональных данных в Azure Data Explorer.
- В лучшем случае срок хранения этих данных достаточно короткий, и данные автоматически удаляются.
- Если использование периода хранения невозможно, изолируйте все данные, на которые распространяются правила конфиденциальности, в нескольких таблицах Data Explorer Azure. Оптимально использовать только одну таблицу и связать с ней все остальные таблицы. Такая изоляция позволяет запустить процесс очистки данных в нескольких таблицах, в которой содержатся конфиденциальные данные, и избежать всех остальных таблиц.
- Вызывающий объект должен выполнять каждую попытку пакетного
.purge
выполнения команд до 1–2 команд на таблицу в день. Не выдавайте несколько команд с уникальными предикатами удостоверений пользователей. Вместо этого отправьте одну команду, предикат которой включает все удостоверения пользователей, требующие очистки.
Процесс очистки
Процесс выборочной очистки данных из Azure Data Explorer выполняется в следующих шагах.
Этап 1. Предоставьте входные данные с именем таблицы azure Data Explorer и предикатом для каждой записи, указывая, какие записи следует удалить. 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
:- Используйте оператор 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 МБ.
- Используйте оператор in, например
Производительность очистки
В любой момент времени в кластере можно выполнить только один запрос на очистку. Все остальные запросы помещаются в очередь в 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 , эту команду можно вызывать в программном (одноэтапном) или в ручном (двухэтапном) режиме.
Программный вызов (один шаг):
Синтаксис
// 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>')
Параметры Описание 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
e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b Чтобы завершить очистку в сценарии двухфакторной активации, используйте маркер проверки, возвращенный на шаге 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 | --- | --- |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по