Restricciones de tabla de consulta materializada

Las tablas de consulta materializada (MQT), incluidas las tablas duplicadas, están sujetas a determinadas restricciones.

Las sentencias fullselect que forman parte de la definición de MQT están sujetas a las restricciones siguientes:
  • Cada elemento de selección debe tener un nombre.
  • Una selección completa no debe hacer referencia a ninguno de los siguientes tipos de objeto:
    • Tablas temporales globales creadas
    • Tablas temporales globales declaradas
    • Tablas de consulta materializada
    • Apodos que ha creado utilizando la cláusula DISALLOW CACHING de la sentencia CREATE NICKNAME o ALTER NICKNAME
    • Tablas protegidas
    • Tablas de etapas
    • Tablas de catálogos del sistema
    • Tablas con tipo
    • Vistas que violan cualquier restricción MQT
    • Vistas que dependen directa o indirectamente de tablas protegidas
  • Una selección completa no debe contener ninguna referencia de columna o expresión que implique los siguientes tipos de datos:
    • LOB
    • LONG
    • XML
    • Referencia
    • Tipos estructurados definidos por el usuario
    • Cualquier tipo diferenciado que se base en estos tipos de datos
  • Una selección completa no debe contener ninguna referencia de columna, expresión o función que cumpla los criterios siguientes:
    • Depende de las características físicas de los datos, como DBPARTITIONNUM, HASHEDVALUE, RID_BIT y RID
    • Dependen de los cambios en los datos, como una expresión de cambio de fila o una columna de indicación de fecha y hora de cambio de fila
    • estén definidas como EXTERNAL ACTION
    • Se definen como LANGUAGE SQL, CONTAINS SQL, READS SQL DATA o MODIFIES SQL DATA
  • Una selección completa no debe incluir una cláusula CONNECT BY.
  • Si especifica la opción MAINTAINED BY FEDERATED_TOOL para la sentencia CREATE TABLE, la cláusula SELECT no debe contener una referencia a una tabla base.
  • Si especifica la opción REFRESH IMMEDIATE para la sentencia CREATE TABLE, se aplican las restricciones siguientes:
    • La sentencia CREATE TABLE para la MQT no debe contener conjuntos de agrupaciones duplicados.
    • La tabla no debe ser una MQT de columnas mantenida por el sistema.
    • Al menos una clave exclusiva de cada tabla a la que se hace referencia debe estar en la lista de selección.
    • La selección completa debe ser una subselección. La excepción es que UNION ALL está soportado en la expresión de tabla de entrada de una cláusula GROUP BY.
    • Las expresiones de tabla de entrada de UNION ALL o JOIN no deben contener funciones de agregación.
    • La selección completa no debe contener ninguno de los elementos siguientes:
      • Funciones de agregación sin la selección completa que también contiene una cláusula GROUP BY
      • Cualquier expresión que utilice el resultado de las funciones agregadas
      • Funciones incorporadas que dependen del valor de un registro especial
      • Funciones que no sean deterministas
      • Funciones OLAP
      • expresiones de tabla comunes recursivas
      • Referencias a variables globales
      • Referencias a apodos
      • Referencias a registros especiales
      • Funciones de muestreo
      • Sentencias SELECT DISTINCT
      • Subconsultas
      • Funciones de texto
  • Si especifica la opción REFRESH IMMEDIATE para la sentencia CREATE TABLE y la selección completa contiene una cláusula GROUP BY, se aplican las condiciones y restricciones siguientes:
    • La lista de selección debe contener la función COUNT () o COUNT_BIG ().
    • Para cada columna anulable C, si la lista de selección contiene la función SUM (C), también es necesaria la función COUNT (C).
    • Debe incluir la función de agregación SUM () o GROUPING (). No puede incluir ninguna otra función de agregación.
    • No puede especificar la cláusula HAVING.
    • Para entornos de bases de datos particionadas, las columnas GROUP BY deben contener la clave de particionamiento de la tabla de consulta materializada.
    • No se permite la anidación de funciones agregadas.
  • Si especifica la opción REFRESH IMMEDIATE para la sentencia CREATE TABLE y la cláusula FROM hace referencia a más de una tabla, una unión interna que no utiliza la sintaxis INNER JOIN explícita es el único tipo de unión soportado.
  • Si especifica la opción DISTRIBUTED BY REPLICATION para la sentencia CREATE TABLE, se aplican las restricciones siguientes:
    • Las funciones agregadas y la cláusula GROUP BY no están permitidas.
    • La MQT sólo debe hacer referencia a una única tabla. No puede incluir una unión, unión o subconsulta.
    • No puede especificar la cláusula PARTITIONING KEY.
    • Los índices exclusivos no están permitidos para las MQT mantenidas por el sistema.
  • Para crear una MQT mantenida por el usuario que tenga una tabla organizada por columnas como tabla base, debe especificar la cláusula MAINTAINED BY USER para la sentencia CREATE TABLE.
Las tablas MQT y duplicadas organizadas en columnas están sujetas a las siguientes restricciones adicionales:
  • Las MQT organizadas en columnas no están soportadas en entornos Db2® pureScale® .
  • Una MQT que no sea una tabla duplicada debe hacer referencia a una tabla con la misma organización que la MQT.
  • Debe especificar la cláusula ORGANIZE BY COLUMN al crear una MQT organizada por columnas.
  • La cláusula MAINTAINED BY SYSTEM sólo está soportada para MQT organizadas en columnas cuando se define con las opciones REFRESH DEFERRED y DISTRIBUTE BY REPLICATION.
Las tablas duplicadas están sujetas a las siguientes restricciones adicionales:
  • Debe especificarse MAINTAINED BY REPLICATION.
  • Debe especificarse REFRESH DEFERRED.
  • REFRESH IMMEDIATE no está soportado.
  • Debe crearse una clave primaria en la tabla duplicada y debe corresponder a una clave primaria o restricción de unicidad en la tabla base.
  • La sentencia CREATE TABLE o la selección completa no deben hacer referencia a ninguno de los siguientes tipos de objeto:
    • Tablas particionadas.
    • Tablas de clúster multidimensional (MDC).
    • Tablas agrupadas por clústeres de rangos (RCT).
    • Tablas que contienen columnas LONG VARCHAR o LONG VARGRAPHIC. Estos tipos de datos han quedado en desuso desde la versión 9.5 Fixpack 1.
    • Tablas que están protegidas con control de acceso a filas y columnas (RCAC) o control de acceso basado en etiquetas (LBAC).
    • Tablas temporales.
  • Un permiso o máscara no puede hacer referencia a una tabla duplicada.
  • Sólo una tabla duplicada puede hacer referencia a una tabla base.
  • Las restricciones siguientes se aplican a la selección completa en una definición de tabla duplicada:
    • La selección completa sólo puede hacer referencia a una tabla base; las uniones no están soportadas.
    • La tabla base debe ser una tabla organizada por filas.
    • La subselección sólo puede contener una cláusula-select y una cláusula-from.
    • La lista de proyección de la tabla duplicada sólo puede hacer referencia a columnas de tabla base que sean válidas en una tabla organizada por columnas. Las expresiones no están soportadas en la lista de proyección. No puede renombrar las columnas a las que se hace referencia en la lista de proyección utilizando la lista de columnas o la cláusula AS.
    • La lista de proyección de la tabla de duplicación debe incluir al menos un conjunto de restricciones de unicidad impuestas o columnas de clave primaria de la tabla base.
    • La selección completa no puede incluir referencias a un apodo, una tabla con tipo o una vista o contener la cláusula SELECT DISTINCT.
  • No se puede crear una tabla de consulta materializada como tabla de distribución aleatoria.