Comando .replace extents
Se aplica a: ✅Azure Data Explorer
Este comando quita y mueve extensiones en una sola transacción dentro del contexto de una base de datos específica. El comando quita las extensiones especificadas de la tabla de destino y mueve las extensiones especificadas de las tablas de origen a la tabla de destino.
Nota:
Las particiones de datos se denominan extensiones y todos los comandos usan "extensiones" o "extensiones" como sinónimo. Para obtener más información sobre las extensiones, consulte Información general sobre extensiones (particiones de datos).
Permisos
Debe tener al menos permisos de administrador de tablas para las tablas de origen y destino.
Restricciones
- Las tablas de origen y destino deben estar en la base de datos de contexto.
- Se espera que todas las extensiones especificadas por ExtentsToDropQuery pertenezcan a la tabla de destino.
- Se espera que todas las columnas de las tablas de origen existan en la tabla de destino con el mismo nombre y tipo de datos.
- Si la tabla de destino es una tabla de origen de una vista materializada, es posible que se produzca un error en el comando, ya que la vista materializada no puede procesar los registros en las extensiones movidas. Consulte más detalles en la página de limitaciones de vistas materializadas. Puede solucionar este error estableciendo un nuevo tiempo de ingesta durante el comando move. Consulte
setNewIngestionTime
en las propiedades admitidas.
Sintaxis
.replace
[async
] extents
table
in
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...]] <|
{
)
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
async |
string |
Si se especifica, el comando se ejecuta de forma asincrónica. | |
DestinationTableName | string |
✔️ | Nombre de la tabla a la que se van a mover las extensiones. |
FromDate | datetime |
Fecha de inicio de la ventana de consulta. | |
ToDate | datetime |
Fecha de finalización de la ventana de consulta. | |
PropertyName, PropertyValue | string |
Una o varias propiedades admitidas. | |
ExtentsToDropQuery | string |
✔️ | Los resultados de esta consulta deben incluir la ExtentId columna , que contiene los identificadores de extensión que se van a quitar de la tabla de destino. |
ExtentsToMoveQuery | string |
✔️ | Los resultados de esta consulta deben incluir las ExtentId columnas y TableName , que contienen las tablas de origen y los identificadores de extensión que se van a mover a la tabla de destino. |
Propiedades admitidas
Nombre de propiedad | Type | Obligatorio | Descripción |
---|---|---|---|
setNewIngestionTime |
bool |
Si se establece true en , se asigna un nuevo tiempo de ingesta a todos los registros en extensiones que se mueven. Esto resulta útil cuando las cargas de trabajo procesan registros que dependen de cursores de base de datos, como vistas materializadas y exportación continua de datos. |
|
extentCreatedOnFrom |
datetime |
✔️ | Aplicar en extensiones creadas después de este momento dado. |
extentCreatedOnTo |
datetime |
✔️ | Aplicar en extensiones creadas antes de este momento dado. |
Nota:
Para mejorar el rendimiento, establezca los parámetros extentCreatedOnFrom y extentCreatedOnTo en el intervalo más pequeño posible.
Devoluciones
Cuando el comando se ejecuta de forma sincrónica, se devuelve una tabla con el esquema siguiente.
Parámetro de salida | Tipo | Descripción |
---|---|---|
OriginalExtentId | string |
Identificador único (GUID) para la extensión original de la tabla de origen que se movió a la tabla de destino o la extensión de la tabla de destino que se quitó. |
ResultExtentId | string |
Identificador único (GUID) para la extensión del resultado movido de la tabla de origen a la tabla de destino. Vacío, si la extensión se quitó de la tabla de destino. Tras un error: "Error". |
Detalles | string |
Incluye los detalles del error si se produce un error en la operación. |
Cuando el comando se ejecuta de forma asincrónica, se devuelve un identificador de operación (GUID). Supervise el estado de la operación con el comando .show operations y recupere los resultados de una ejecución correcta con el comando .show operation details .
Nota:
El comando producirá un error si las extensiones devueltas por la consulta ExtentsToDropQuery no existen en la tabla de destino. Esto puede ocurrir si las extensiones se combinaron antes de que se ejecutara el comando replace. Para asegurarse de que el comando produce un error en las extensiones que faltan, compruebe que la consulta devuelve los valores de ExtentId esperados. El primer ejemplo producirá un error si la extensión que se va a quitar no existe en la tabla MyOtherTable. Sin embargo, el segundo ejemplo se realizará correctamente aunque la medida en que no exista la eliminación, ya que la consulta que se va a quitar no devolvió ningún identificador de extensión.
Ejemplos
Mover todas las extensiones en un intervalo de tiempo de creación especificado de dos tablas
Mueva todas las extensiones de dos tablas específicas (MyTable1
, MyTable2
) en un intervalo de tiempo de creación especificado a la tabla MyOtherTable
y quite todas las extensiones de MyOtherTable
etiquetadas con 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
}
Salida de ejemplo
OriginalExtentId | ResultExtentId | Detalles |
---|---|---|
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-a000-e62eb41592df |
Mover todas las extensiones de un intervalo de tiempo de creación especificado de una tabla a otra, quitar una extensión específica
Mueva todas las extensiones de un intervalo de tiempo de creación especificado de una tabla específica (MyTable1
) a la tabla MyOtherTable
y quite una extensión específica en MyOtherTable
, por su identificador:
.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
}
Implementación de una lógica idempotente
Implemente una lógica idempotente para que Kusto quite las extensiones de la tabla t_dest
solo si hay extensiones para pasar de la tabla t_source
a la tabla 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
}