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


Обзор обратимого удаления

Область применения: ✅Azure Data Explorer

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

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

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

Случаи использования

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Основными соображениями, которые могут повлиять на производительность процесса удаления, являются:

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

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

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

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

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

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

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

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

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