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


Общие сведения о обратимом удалении

Как платформа данных, azure Data Explorer поддерживает возможность удаления отдельных записей. Удаление записей обычно выполняется одним из следующих способов:

  • Чтобы удалить записи с гарантией системы, что артефакты хранилища, содержащие эти записи, также будут удалены, используйте .purge
  • Чтобы удалить записи без такой гарантии, используйте .delete , как описано в этой статье. Эта команда помечает записи как удаленные, но не обязательно удаляет данные из артефактов хранилища. Этот метод удаления выполняется быстрее, чем очистка.

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

Варианты использования

Этот метод удаления следует использовать только для незапланированного удаления отдельных записей. Например, если вы обнаружите, что устройство Интернета вещей сообщает о поврежденных данных телеметрии в течение некоторого времени, рекомендуется использовать этот метод для удаления поврежденных данных.

Если требуется часто удалять записи для дедупликации или обновлений, рекомендуется использовать материализованные представления. См. раздел Выбор между материализованными представлениями и обратимым удалением для дедупликации данных.

Процесс удаления

Процесс обратимого удаления выполняется с помощью следующих действий.

  1. Выполнение запроса предиката. Таблица проверяется для определения экстентов данных, содержащих записи, которые необходимо удалить. Определены экстенты с одной или несколькими записями, возвращаемыми запросом предиката.
  2. Замена экстентов. Обнаруженные экстенты заменяются новыми экстентами, указывающими на исходные большие двоичные объекты данных, а также имеют новый скрытый столбец типа bool , указывающий на запись, была ли она удалена. Если новые данные не будут приниматься после завершения, запрос предиката не вернет никаких записей при повторном выполнении.

Рекомендации и ограничения

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

  • Обратимое удаление поддерживается для собственных таблиц и материализованных представлений. Он не поддерживается для внешних таблиц.

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

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

  • Не выполняйте команды обратимого удаления и очистки в одной таблице параллельно. Сначала дождитесь завершения одной команды и только затем выполните другую команду.

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

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

  • Ограничения предиката:

    • Он должен содержать по крайней мере один where оператор.
    • Он может ссылаться только на таблицу, из которой необходимо удалить записи.
    • Разрешены только следующие операторы: extend, order, projecttake и where. В toscalar()оператор summarize также разрешен.

Производительность удаления

Ниже приведены main рекомендации, которые могут повлиять на производительность процесса удаления.

  • Выполнение запроса предиката. Производительность этого шага очень похожа на производительность самого предиката. Это может быть немного быстрее или медленнее в зависимости от предиката, но разница, как ожидается, будет незначительной.
  • Замена экстентов. Производительность этого шага зависит от следующего:
    • Распределение записей между экстентами данных в кластере
    • Количество узлов в кластере

В отличие от .purge, .delete команда не выполняет повторное прием данных. Он просто помечает записи, возвращаемые запросом предиката, как удаленные и поэтому выполняется гораздо быстрее.

Производительность запросов после удаления

Ожидается, что производительность запросов заметно не изменится после удаления записей.

Снижение производительности не ожидается, так как фильтр, который автоматически добавляется ко всем запросам, которые отфильтровывают удаленные записи, является эффективным.

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

Влияние на COGS (стоимость проданных товаров)

В большинстве случаев удаление записей не приведет к изменению COGS.

  • Уменьшение не будет, так как записи на самом деле не удаляются. Записи помечаются как удаленные только с помощью скрытого столбца типа bool, размер которого незначим.
  • В большинстве случаев увеличение не будет, так как .delete операция не требует подготовки дополнительных ресурсов.
  • В некоторых случаях экстенты, в которых удаляется большинство записей, периодически сжимаются, заменяя их новыми экстентами, содержащими только те записи, которые еще не были удалены. Это приводит к удалению старых артефактов хранилища, содержащих большое количество удаленных записей. Новые экстенты имеют меньший размер и, следовательно, занимают меньше места как в учетной записи хранения, так и в горячем кэше. Однако в большинстве случаев влияние этого на COGS незначительно.