Casos de uso de vistas materializadas

Las vistas materializadas exponen una consulta de agregación sobre una tabla de origen u otra vista materializada. En este artículo se tratan los casos de uso comunes y avanzados de las vistas materializadas.

Casos de uso comunes

A continuación se muestran escenarios comunes que se pueden abordar mediante una vista materializada:

  • Actualizar datos: Actualice los datos devolviendo el último registro por entidad mediante arg_max() (función de agregación). Por ejemplo, cree una vista que solo materialice los registros ingeridos desde ahora:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Reducir la resolución de datos Reduzca la resolución de datos calculando estadísticas periódicas sobre los datos sin procesar. Use varias funciones de agregación por período de tiempo. Por ejemplo, mantenga una instantánea actualizada de distintos usuarios al día:

    .create materialized-view UsersByDay on table T
    {
        T | summarize dcount(User) by bin(Timestamp, 1d)
    }
    
  • Desduplicar registros: Desduplicar registros en una tabla mediante take_any() (función de agregación). Por ejemplo, cree una vista materializada que desduplica la tabla de origen basada en la EventId columna, con una búsqueda de 6 horas. Los registros se desduplican solo en los registros ingeridos 6 horas antes de los registros actuales.

    .create materialized-view with(lookback=6h) DeduplicatedTable on table T
    {
        T
        | summarize take_any(*) by EventId
    }
    

    Nota

    Puede ocultar la tabla de origen mediante la creación de una función con el mismo nombre que la tabla que hace referencia a la vista materializada en su lugar. Este patrón garantiza que los autores de llamadas que consultan la tabla tengan acceso a la vista materializada desduplicada porque las funciones invalidan las tablas con el mismo nombre. Para evitar referencias cíclicas en la definición de vista, use la función table() para hacer referencia a la tabla de origen:

    .create materialized-view DeduplicatedTable on table T
    {
        table('T')
        | summarize take_any(*) by EventId
    } 
    

Para obtener más ejemplos, vea el comando .create materialized-view.

Escenario avanzado

Puede usar una vista materializada para el procesamiento de eventos create/update/delete. Al controlar registros con información incompleta o obsoleta para cada columna, una vista materializada puede proporcionar las actualizaciones más recientes para cada columna, excepto las entidades que se han eliminado.

Tenga en cuenta la tabla de entrada siguiente denominada Events:

Entrada

Timestamp Cud ID col1 col2 col3
2023-10-24 00:00:00.0000000 C 1 1 2
2023-10-24 01:00:00.0000000 U 1 22 33
2023-10-24 02:00:00.0000000 U 1 23
2023-10-24 00:00:00.0000000 C 2 1 2
2023-10-24 00:10:00.0000000 U 2 4
2023-10-24 02:00:00.0000000 D 2

Cree una vista materializada para obtener la actualización más reciente por columna mediante la función de agregación arg_max():

.create materialized-view ItemHistory on table Events
{
    Events
    | extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
                Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
                Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
    | summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}

Salida

ID Timestamp_col1 col1 Timestamp_col2 col2 Timestamp_col3 col3 Timestamp Cud
2 2023-10-24 00:00:00.0000000 1 2023-10-24 00:10:00.0000000 4 1970-01-01 00:00:00.0000000 2023-10-24 02:00:00.0000000 D
1 2023-10-24 00:00:00.0000000 1 2023-10-24 02:00:00.0000000 23 2023-10-24 01:00:00.0000000 33 2023-10-24 02:00:00.0000000 U

Puede crear una función almacenada para limpiar aún más los resultados:

ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud

Salida final

La actualización más reciente de cada columna para el identificador 1, ya que se eliminó el identificador 2 .

Timestamp Id. col1 col2 col3
2023-10-24 02:00:00.0000000 1 1 23 33

Vistas materializadas frente a directivas de actualización

Las vistas materializadas y las directivas de actualización funcionan de forma diferente y sirven diferentes casos de uso. Use las instrucciones siguientes para identificar cuál debe usar:

  • Las vistas materializadas son adecuadas para agregaciones, mientras que las directivas de actualización no. Las directivas de actualización se ejecutan por separado para cada lote de ingesta y, por tanto, solo pueden realizar agregaciones dentro del mismo lote de ingesta. Si necesita una consulta de agregación, use siempre vistas materializadas.

  • Las directivas de actualización son útiles para las transformaciones de datos, enriquecimientos con tablas de dimensiones (normalmente mediante el operador de búsqueda) y otras manipulaciones de datos que se pueden ejecutar en el ámbito de una sola ingesta.

  • Las directivas de actualización se ejecutan durante el tiempo de ingesta. Los datos no están disponibles para las consultas de la tabla de origen o la tabla de destino hasta que se ejecuten todas las directivas de actualización. Por otro lado, las vistas materializadas no forman parte de la canalización de ingesta. El proceso de materialización se ejecuta periódicamente en segundo plano, después de la ingesta. Los registros de la tabla de origen están disponibles para las consultas antes de materializarse.

  • Tanto las directivas de actualización como las vistas materializadas pueden incorporar combinaciones, pero su eficacia se limita a escenarios específicos. En concreto, las combinaciones solo son adecuadas cuando los datos necesarios para la combinación de ambos lados son accesibles en el momento de la directiva de actualización o el proceso de materialización. Si se ingieren entidades coincidentes cuando se ejecuta la directiva de actualización o materialización, existe el riesgo de pasar por alto los datos. Obtenga más información sobre dimension tables en el parámetro de consulta de vista materializada y en las tablas de hechos y dimensiones.

Nota

Si necesita materializar combinaciones, que no son adecuadas para las directivas de actualización y las vistas materializadas, puede orquestar su propio proceso para hacerlo, mediante herramientas de orquestación e ingesta de comandos de consulta.