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


Команда .replace extents

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

Эта команда удаляет и перемещает экстенты в одной транзакции в контексте определенной базы данных. Команда удаляет все указанные экстенты из целевой таблицы и перемещает указанные экстенты из исходных таблиц в целевую таблицу.

Примечание.

Сегменты данных называются экстентами, и все команды используют "экстент" или "экстенты" в качестве синонима. Дополнительные сведения об экстентах см. в обзоре экстентов (сегментов данных).

Разрешения

Для исходных и целевых таблиц необходимо иметь по крайней мере разрешения администратора таблиц.

Ограничения

Синтаксис

.replace[async] extents table in DestinationTableName [ with(PropertyName = PropertyValue [, ...]] <|{)ExtentsToDropQuery},{ExtentsToMoveQuery}

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
async string Если задано, команда выполняется асинхронно.
DestinationTableName string ✔️ Имя таблицы, в которую перемещаются экстенты.
FromDate datetime Дата начала окна запроса.
ToDate datetime Дата окончания окна запроса.
PropertyName, PropertyValue string Одно или несколько поддерживаемых свойств.
ExtentsToDropQuery string ✔️ Результаты этого запроса должны содержать ExtentId столбец, содержащий идентификаторы экстентов, которые необходимо удалить из целевой таблицы.
ExtentsToMoveQuery string ✔️ Результаты этого запроса должны содержать ExtentId столбцы и TableName столбцы, содержащие исходные таблицы и идентификаторы экстентов, которые необходимо переместить в целевую таблицу.

Поддерживаемые свойства

Имя свойства Тип Обязательно Описание
setNewIngestionTime bool Если задано значение true, новое время приема назначается всем записям в перемещаемых экстентах. Это полезно при обработке записей рабочими нагрузками, зависящими от курсоров базы данных, таких как материализованные представления и непрерывный экспорт данных.
extentCreatedOnFrom datetime ✔️ Применить к экстентам, созданным после этого момента времени.
extentCreatedOnTo datetime ✔️ Применяется к экстентам, созданным до этого момента времени.

Примечание.

Для повышения производительности задайте для параметра extentCreatedOnFrom и extentCreatedOnTo наименьший возможный диапазон.

Возвраты

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

Выходной параметр Тип Описание
OriginalExtentId string Уникальный идентификатор (GUID) для исходной экстенты в исходной таблице, которая была перемещена в целевую таблицу, или экстент в целевой таблице, которая была удалена.
ResultExtentId string Уникальный идентификатор (GUID) для экстента результата, перемещаемого из исходной таблицы в целевую таблицу. Пусто, если экстент был удален из целевой таблицы. При сбое: "Сбой".
Сведения string Включает сведения о сбое при сбое операции.

При асинхронном выполнении команды возвращается идентификатор операции (GUID). Отслеживайте состояние операции с помощью команды .show operations и извлеките результаты успешного выполнения с помощью команды сведений о операции .show.

Примечание.

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

Примеры

Перемещение всех экстентов в заданном диапазоне времени создания из двух таблиц

Перемещение всех экстентов из двух определенных таблиц (MyTable1, MyTable2) в заданном диапазоне времени создания в таблицу MyOtherTableи удаление всех экстентов в MyOtherTable тегах с drop-by:MyTagпомощью:

.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        .show table MyOtherTable extents where tags has 'drop-by:MyTag'
    },
    {
        .show tables (MyTable1,MyTable2) extents
    }

Пример полученных результатов

OriginalExtentId ResultExtentId Сведения
e133f050-a1e2-4dad-8552-1f5cf47cab69 0d96ab2d-9dd2-4d2c-a45e-b24c65aa6687
cdbeb35b-87ea-499f-b545-defbae091b57 a90a303c-8a14-4207-8f35-d8ea94ca45be
4fcb4598-9a31-4614-903c-0c67c286da8c 97aafea1-59ff-4312-b06b-08f42187872f
2dfdef64-62a3-4950-a130-96b5b1083b5a 0fb7f3da-5e28-4f09-a00-e62eb41592df

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

Переместите все экстенты в заданном диапазоне времени создания из одной конкретной таблицы (MyTable1) MyOtherTableв таблицу и удалите определенную экстенту по MyOtherTableего идентификатору:

.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        print ExtentId = "2cca5844-8f0d-454e-bdad-299e978be5df"
    },
    {
        .show table MyTable1 extents 
    }
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
    {
        .show table MyOtherTable extents
        | where ExtentId == guid(2cca5844-8f0d-454e-bdad-299e978be5df) 
    },
    {
        .show table MyTable1 extents 
    }

Реализация идемпотентной логики

Реализуйте идемпотентную логику, чтобы Kusto отбрасывает экстенты из таблицы t_dest , только если есть экстенты для перемещения из таблицы в таблицу t_source t_dest:

.replace async extents in table t_dest with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
    let any_extents_to_move = toscalar( 
        t_source
        | where extent_tags() has 'drop-by:blue'
        | summarize count() > 0
    );
    let extents_to_drop =
        t_dest
        | where any_extents_to_move and extent_tags() has 'drop-by:blue'
        | summarize by ExtentId = extent_id()
    ;
    extents_to_drop
},
{
    let extents_to_move = 
        t_source
        | where extent_tags() has 'drop-by:blue'
        | summarize by ExtentId = extent_id(), TableName = 't_source'
    ;
    extents_to_move
}