Vistas materializadas

Se aplica a: ✅Microsoft FabricAzure Data Explorer

Las vistas materializadas exponen una consulta de agregación sobre una tabla de origen o sobre otra vista materializada.

Las vistas materializadas siempre devuelven un resultado actualizado de la consulta de agregación (siempre fresca). La consulta de una vista materializada es más eficaz que ejecutar la agregación directamente sobre la tabla de origen.

Nota:

¿Por qué usar vistas materializadas?

Al invertir recursos (almacenamiento de datos, ciclos de CPU en segundo plano) para vistas materializadas de agregaciones usadas habitualmente, se obtienen las siguientes ventajas:

  • Mejora del rendimiento: la consulta de una vista materializada normalmente funciona mejor que consultar la tabla de origen para las mismas funciones de agregación.

  • Actualización: una consulta de vista materializada siempre devuelve los resultados más actualizados, independientemente de cuándo se produjo la materialización por última vez. La consulta combina la parte materializada de la vista con los registros de la tabla de origen, que aún no se han materializado (la delta parte), siempre proporcionando los resultados más actualizados.

  • Reducción de costos: la consulta de una vista materializada consume menos recursos que realizar la agregación en la tabla de origen. La directiva de retención de la tabla de origen se puede reducir si solo se requiere agregación. Esta configuración reduce los costos de caché activa de la tabla de origen.

Para ver casos de uso de ejemplo, consulte Casos de uso de vistas materializadas.

Funcionamiento de las vistas materializadas

Una vista materializada se compone de dos componentes:

  • Elemento materializado : una tabla que contiene registros agregados de la tabla de origen, que ya se han procesado. Esta tabla siempre contiene un único registro por combinación de agrupación por agregación.
  • Delta: los registros recién ingeridos en la tabla de origen que aún no se han procesado.

La consulta de la vista materializada combina la parte materializada con la parte delta, lo que proporciona un resultado actualizado de la consulta de agregación. El proceso de materialización sin conexión ingiere registros nuevos del delta a la tabla materializada y actualiza los registros existentes. Si la intersección entre el delta y la parte materializada es grande y muchos registros requieren actualizaciones, esto podría tener un impacto negativo en el proceso de materialización. Consulte Supervisión de vistas materializadas sobre cómo solucionar este tipo de situaciones.

Consultas de vistas materializadas

Hay dos maneras de consultar una vista materializada:

  • Consultar toda la vista: al consultar la vista materializada por su nombre, de forma similar a consultar una tabla, la consulta de vista materializada combina la parte materializada de la vista con los registros de la tabla de origen que aún no se han materializado ().delta

    • La consulta de la vista materializada siempre devuelve los resultados más actualizados, en función de todos los registros ingeridos en la tabla de origen. Para obtener más información sobre las partes materializadas frente a no materializadas en la vista materializada, vea cómo funcionan las vistas materializadas.
    • Esta opción podría no funcionar mejor, ya que necesita materializar el elemento durante el delta tiempo de consulta. El rendimiento en este caso depende de la antigüedad de la vista y de los filtros aplicados en la consulta. La sección optimizador de consultas de vista materializada incluye posibles maneras de mejorar el rendimiento de las consultas al consultar toda la vista.
  • Consultar solo la parte materializada: otra forma de consultar la vista es mediante la materialized_view() función . Esta opción admite la consulta solo de la parte materializada de la vista, al tiempo que especifica la latencia máxima que el usuario está dispuesta a tolerar.

    • No se garantiza que esta opción devuelva los registros más actualizados, pero siempre debe ser más eficaz que consultar toda la vista.
    • Esta función es útil para escenarios en los que está dispuesto a sacrificar cierta actualización del rendimiento, por ejemplo, para los paneles de telemetría.

Sugerencia

Las consultas sobre la parte materializada solo siempre funcionan mejor que consultar toda la vista. Use siempre la materialized_view() función cuando sea aplicable para su caso de uso.

  • Las vistas materializadas participan en consultas entre clústeres o entre bases de datos, pero no se incluyen en uniones o búsquedas con caracteres comodín.

    • En los ejemplos siguientes se incluyen vistas materializadas por el nombre ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • En los ejemplos siguientes no se incluyen registros de vistas materializadas:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    
  • Las vistas materializadas participan en consultas entre centros de eventos o entre bases de datos, pero no se incluyen en uniones o búsquedas con caracteres comodín.

    • En los ejemplos siguientes se incluyen vistas materializadas por el nombre ViewName:
    cluster("<serviceURL>").database('db').ViewName
    cluster("<serviceURL>").database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • En los ejemplos siguientes no se incluyen registros de vistas materializadas:
    cluster("<serviceURL>").database('db').*
    database('*').View*
    search in (*)
    search * 
    

Optimizador de consultas de vista materializada

Al consultar toda la vista, la parte materializada se combina con durante el delta tiempo de consulta. Esto incluye agregar y delta combinarlo con la parte materializada.

  • La consulta de toda la vista funciona mejor si la consulta incluye filtros en el grupo por claves de la consulta de vista materializada. Consulte más sugerencias sobre cómo crear la vista materializada, en función del patrón de consulta, en la .create materialized-view sección sugerencias de rendimiento.
  • El optimizador de consultas elige estrategias de resumen o combinación que se espera que mejore el rendimiento de las consultas. Por ejemplo, la decisión sobre si se va a ordenar aleatoriamente la consulta se basa en el número de registros en delta parte. Las siguientes propiedades de solicitud de cliente proporcionan algún control sobre las optimizaciones aplicadas. Puede probar estas propiedades con las consultas de vista materializadas y evaluar su impacto en el rendimiento de las consultas.
Nombre de propiedad de solicitud de cliente Tipo Descripción
materialized_view_query_optimization_costbased_enabled bool Si se establece falseen , deshabilita las optimizaciones de resumen o combinación en consultas de vista materializadas. Usa estrategias predeterminadas. El valor predeterminado es true.
materialized_view_shuffle dynamic Forzar orden aleatorio de la consulta de vista materializada y ,opcionalmente, proporcionar claves específicas para realizar orden aleatorios. Consulte los ejemplos siguientes.

ingestion_time() función en el contexto de vistas materializadas

ingestion_time() función devuelve valores NULL, cuando se usa en el contexto de una vista materializada, si consulta toda la vista. Al consultar la parte materializada de la vista, el valor devuelto depende del tipo de vista materializada:

  • En las vistas materializadas que incluyen una sola arg_max()/arg_min()take_any()/agregación, ingestion_time() es igual al ingestion_time() del registro correspondiente de la tabla de origen.
  • En todas las demás vistas materializadas, el valor de ingestion_time() es aproximadamente el tiempo de materialización (vea cómo funcionan las vistas materializadas).

Ejemplos

  1. Consulte toda la vista. Se incluyen los registros más recientes de la tabla de origen:

    ViewName
    
  2. Consulte solo la parte materializada de la vista, independientemente de cuándo se materializó por última vez.

    materialized_view("ViewName")
    
  3. Consulte toda la vista y proporcione una "sugerencia" para usar shuffle la estrategia. Se incluyen los registros más recientes de la tabla de origen:

    • Ejemplo 1: orden aleatorio basado en la Id columna (de forma similar al uso hint.shufflekey=Idde ):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Ejemplo 2: orden aleatorio basado en todas las claves (de forma similar al uso hint.strategy=shufflede ):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Consideraciones sobre el rendimiento

Los principales colaboradores que pueden afectar a un estado de vista materializado son:

  • Recursos de clúster: al igual que cualquier otro proceso que se ejecute en el clúster, las vistas materializadas consumen recursos (CPU, memoria) del clúster. Si el clúster está sobrecargado, agregar vistas materializadas a él puede provocar una degradación en el rendimiento del clúster. Supervise el estado del clúster mediante métricas de estado del clúster. El escalado automático optimizado actualmente no tiene en cuenta el estado de las vistas materializadas como parte de las reglas de escalado automático.
    • El proceso de materialización está limitado por la cantidad de memoria y cpu que puede consumir. Estos límites se definen y se pueden cambiar en el grupo de cargas de trabajo vistas materializadas.
  • Superponerse con datos materializados: durante la materialización, todos los registros nuevos ingeridos en la tabla de origen desde la última materialización (delta) se procesan y materializan en la vista. Cuanto mayor sea la intersección entre los nuevos registros y los registros ya materializados, peor será el rendimiento de la vista materializada. Una vista materializada funciona mejor si el número de registros que se actualizan (por ejemplo, en arg_max la vista) es un pequeño subconjunto de la tabla de origen. Si todos o la mayoría de los registros de vista materializados deben actualizarse en cada ciclo de materialización, es posible que la vista materializada no funcione bien.

  • Tasa de ingesta: no hay límites codificados de forma rígida en el volumen de datos o la tasa de ingesta en la tabla de origen de la vista materializada. Sin embargo, la tasa de ingesta recomendada para las vistas materializadas no es superior a 1-2 GB/s. Las tasas de ingesta más altas pueden seguir funcionando bien. El rendimiento depende del tamaño de la base de datos, los recursos disponibles y la cantidad de intersección con los datos existentes.

  • Número de vistas materializadas en el clúster: las consideraciones anteriores se aplican a cada vista materializada individual definida en el clúster. Cada vista consume sus propios recursos y muchas vistas compiten entre sí en los recursos disponibles. Aunque no hay límites codificados de forma rígida para el número de vistas materializadas en un clúster, es posible que el clúster no pueda controlar todas las vistas materializadas, cuando hay muchas definidas. La directiva de capacidad se puede ajustar si hay más de una vista materializada en el clúster. Aumente el valor de ClusterMinimumConcurrentOperations en la directiva para ejecutar vistas más materializadas simultáneamente.
  • Definición de vista materializada: la definición de vista materializada debe definirse según los procedimientos recomendados de consulta para mejorar el rendimiento de las consultas. Para obtener más información, consulte Crear sugerencias de rendimiento de comandos.

Vista materializada sobre la vista materializada

Se puede crear una vista materializada sobre otra vista materializada si la vista materializada de origen es una vista de desduplicación. En concreto, la agregación de la vista materializada de origen debe ser take_any(*) para desduplicar los registros de origen. La segunda vista materializada puede usar cualquier función de agregación admitida. Para obtener información específica sobre cómo crear una vista materializada sobre una vista materializada, consulte .create materialized-view el comando .

Sugerencia

Al consultar una vista materializada definida sobre otra vista materializada, se recomienda consultar la parte materializada solo con la materialized_view() función . La consulta de toda la vista no es eficaz cuando ambas vistas no están completamente materializadas. Para obtener más información, consulte consultas de vistas materializadas.