Команда .replace extents
Область применения: ✅Azure Data Explorer
Эта команда удаляет и перемещает экстенты в одной транзакции в контексте определенной базы данных. Команда удаляет все указанные экстенты из целевой таблицы и перемещает указанные экстенты из исходных таблиц в целевую таблицу.
Примечание.
Сегменты данных называются экстентами, и все команды используют "экстент" или "экстенты" в качестве синонима. Дополнительные сведения об экстентах см. в обзоре экстентов (сегментов данных).
Разрешения
Для исходных и целевых таблиц необходимо иметь по крайней мере разрешения администратора таблиц.
Ограничения
- Исходные и целевые таблицы должны находиться в базе данных контекста.
- Ожидается, что все экстенты, указанные в extentsToDropQuery , относятся к целевой таблице.
- Все столбцы в исходных таблицах должны существовать в целевой таблице с одинаковым именем и типом данных.
- Если целевая таблица является исходной таблицей материализованного представления, команда может завершиться ошибкой, так как материализованное представление не может обрабатывать записи в перемещаемых экстентах. Дополнительные сведения см. на странице ограничений материализованных представлений . Эту ошибку можно обойти, задав новое время приема во время команды перемещения. См
setNewIngestionTime
. сведения о поддерживаемых свойствах.
Синтаксис
.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
}