Directivas de vistas materializadas

En este artículo se incluye información sobre las directivas que se pueden establecer en vistas materializadas.

Directiva de retención y almacenamiento en caché

Una vista materializada tiene una directiva de retención y una directiva de almacenamiento en caché. La vista materializada deriva las directivas de retención y almacenamiento en caché de la base de datos de forma predeterminada. Estas directivas se pueden cambiar mediante comandos de administración de directivas de retención o comandos de administración de directivas de almacenamiento en caché.

Ambas directivas solo se aplican en la parte materializada de la vista materializada. Para obtener una explicación de las diferencias entre la parte materializada y la parte delta, vea cómo funcionan las vistas materializadas. Por ejemplo, si la directiva de almacenamiento en caché de una vista materializada se establece en 7d, pero la directiva de almacenamiento en caché de su tabla de origen se establece en 0d, puede que todavía haya errores de disco al consultar la vista materializada. Este comportamiento se produce porque la tabla de origen (parte delta) también participa en la consulta.

La directiva de retención de la vista materializada no está relacionada con la directiva de retención de la tabla de origen. La directiva de retención de la tabla de origen puede ser más corta que la directiva de retención de la vista materializada, si los registros de origen son necesarios durante un período más corto. Se recomienda una directiva de retención mínima de al menos unos días y la capacidad de recuperación establecida en true en la tabla de origen. Esta configuración permite una recuperación rápida para errores y para fines de diagnóstico.

Nota

No se admite la directiva de retención cero en la tabla de origen.

Las directivas de retención y almacenamiento en caché dependen del tiempo de creación de la extensión. La última actualización de un registro determina el tiempo de creación de la extensión de una vista materializada.

Nota

El proceso de materialización intenta minimizar la cantidad de actualizaciones de la parte materializada de la vista. En los casos en los que no es necesario actualizar un registro en la vista, no se actualizará. Por ejemplo, cuando la vista materializada es una take_any(*) agregación, los nuevos registros de las mismas claves de agrupación por no se reingerirán en la vista y, por lo tanto, la directiva de retención sería por el registro más antiguo ingerido.

Directiva de creación de particiones

Se puede aplicar una directiva de creación de particiones en una vista materializada. Se recomienda configurar una directiva de creación de particiones en una vista materializada solo cuando la mayoría o todas las consultas de vista filtran por una de las claves agrupadas por la vista materializada. Esta situación es común en las soluciones multiinquilino, donde una de las claves de agrupación por de la vista materializada es el identificador del inquilino (por ejemplo, tenantId, customerId). Para obtener más información, consulte el primer caso de uso descrito en la página escenarios admitidos por la directiva de particiones .

Para que los comandos modifiquen la directiva de creación de particiones de una vista materializada, consulte comandos de directiva de creación de particiones.

Agregar una directiva de creación de particiones en una vista materializada aumenta el número de extensiones en la vista materializada y crea más "trabajo" para el proceso de materialización. Para obtener más información sobre el motivo de este comportamiento, vea el proceso de recompilación de extensiones mencionado en cómo funcionan las vistas materializadas.

Directiva de seguridad de nivel de fila

Se puede aplicar una seguridad de nivel de fila en una vista materializada, con varias limitaciones:

  • La directiva solo se puede aplicar a vistas materializadas con funciones de agregación arg_max()/arg_min()/take_any() o cuando la consulta de seguridad de nivel de fila hace referencia al grupo por claves de la agregación de vistas materializada.
  • La directiva solo se aplica a la parte materializada de la vista.
    • Si la misma directiva de seguridad de nivel de fila no está definida en la tabla de origen de la vista materializada, la consulta de la vista materializada puede devolver registros que la directiva debe ocultar. Esto sucede porque la consulta de la vista materializada también consulta la tabla de origen.
    • Se recomienda definir la misma directiva de seguridad de nivel de fila tanto en la tabla de origen como en la vista materializada si la vista es una arg_max() o arg_min()/take_any()).
  • Al definir una directiva de seguridad de nivel de fila en la tabla de origen de una vista materializada arg_max() o arg_min()/take_any(), el comando produce un error si no hay ninguna directiva de seguridad de nivel de fila definida en la propia vista materializada. El propósito del error es alertar al usuario de una posible fuga de datos, ya que la vista materializada puede exponer información. Para mitigar este error, realice una de las siguientes acciones:
    • Defina la directiva de seguridad de nivel de fila en la vista materializada.
    • Elija omitir el error agregando allowMaterializedViewsWithoutRowLevelSecurity la propiedad al comando alter policy. Por ejemplo:
    .alter table SourceTable policy row_level_security enable with (allowMaterializedViewsWithoutRowLevelSecurity=true) "RLS_function"

Para ver los comandos para configurar una directiva de seguridad de nivel de fila en una vista materializada, consulte row_level_security comandos de directiva.