Catégories :

Table, vue et séquence DDL

CREATE MATERIALIZED VIEW

Crée une nouvelle vue matérialisée dans le schéma actuel/spécifié, en fonction d’une requête d’une table existante, et remplit la vue avec des données.

Pour plus de détails, voir Travailler avec des vues matérialisées.

Voir aussi :

ALTER MATERIALIZED VIEW , DROP MATERIALIZED VIEW , SHOW MATERIALIZED VIEWS

Syntaxe

CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
  [ COPY GRANTS ]
  ( <column_list> )
  [ <col1> [ WITH ] MASKING POLICY <policy_name>
           [ WITH ] TAG ( <tag_key> = 'tag_value' [ , <tag_key> = 'tag_value' , ... ] ) ]
  [ , <col2> [ ... ] ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ WITH ] TAG ( <tag_key> = 'tag_value' [ , <tag_key> = 'tag_value' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
  [ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
  AS <select_statement>

Paramètres requis

nom

Spécifie l’identificateur de la vue ; il doit être unique pour le schéma dans lequel la vue est créée.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

instruction_select

Spécifie la requête utilisée pour créer la vue. Cette requête sert de texte/définition pour la vue. Cette requête est affichée dans les résultats de SHOW VIEWS et SHOW MATERIALIZED VIEWS.

sélect_instruction est limité. Pour plus de détails, voir :

Paramètres facultatifs

column_list :

Si vous ne souhaitez pas que les noms de colonne de la vue soient identiques à ceux de la table sous-jacente, vous pouvez inclure une liste de colonnes dans laquelle vous spécifiez les noms de colonne. (Vous n’avez pas besoin de spécifier les types de données des colonnes.)

Si vous incluez une clause CLUSTER BY pour la vue matérialisée, vous devez inclure la liste des noms de colonnes.

MASKING POLICY = nom_politique

Spécifie la politique de masquage à définir sur une colonne.

ROW ACCESS POLICY nom_politique ON ( nom_colonne [ , nom_colonne ... ] )

Spécifie la politique d’accès aux lignes à définir sur la vue matérialisée.

TAG ( clé_balise = 'valeur_balise' [ , blé_balise = 'valeur_balise' , ... ] ) ]

Spécifie le nom de la balise (c’est-à-dire la clé) et la valeur de la balise.

La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.

littéral_chaine

Spécifie un commentaire pour la vue. Le littéral de chaîne doit être entre guillemets simples. (Le littéral de chaîne ne doit pas contenir de guillemets simples, sauf s’ils sont échappés.)

Par défaut : aucune valeur.

expr#

Spécifie une expression sur laquelle baser l’opération de clustering de la vue matérialisée. En règle générale, l’expression est le nom d’une colonne dans la vue matérialisée.

Pour plus d’informations sur le clustering des vues matérialisées, voir : Vues matérialisées et clustering. Pour plus d’informations sur le clustering en général, voir : Qu’est-ce que le clustering de données ?.

SECURE

Indique que la vue est sécurisée. Pour plus d’informations sur les vues sécurisées, voir Utilisation de vues sécurisées.

Par défaut : aucune valeur (la vue n’est pas sécurisée)

COPY GRANTS

Si vous remplacez une vue existante à l’aide de la clause OR REPLACE, la vue de remplacement conserve les autorisations d’accès de la vue d’origine. Ce paramètre copie tous les privilèges, sauf OWNERSHIP, de la vue existante vers la nouvelle vue. La nouvelle vue n’autorise pas les attributions futures définies pour le type d’objet dans le schéma. Par défaut, le rôle qui exécute l’instruction CREATE MATERIALIZED VIEW possède la nouvelle table.

Si le paramètre n’est pas inclus dans l’instruction CREATE VIEW, la nouvelle vue n’hérite pas des privilèges d’accès explicites accordés sur la vue d’origine, mais des attributions futures définies pour le type d’objet dans le schéma.

Notez que l’opération de copie des attributions s’effectue de manière atomique avec l’instruction CREATE VIEW (c’est-à-dire dans la même transaction).

Par défaut : aucune valeur (les attributions ne sont pas copiées)

Notes sur l’utilisation

  • La création d’une vue matérialisée nécessite un privilège CREATE MATERIALIZED VIEW sur le schéma et un privilège SELECT sur la table de base. Pour plus d’informations sur les privilèges et les vues matérialisées, voir Privilèges sur le schéma d’une vue matérialisée.

  • Lorsque vous choisissez un nom pour la vue matérialisée, notez qu’un schéma ne peut pas contenir une table et une vue portant le même nom. Une instruction CREATE [ MATERIALIZED ] VIEW produit une erreur si une table portant le même nom existe déjà dans le schéma.

  • Lorsque vous spécifiez instruction_select, notez ce qui suit :

    • Vous ne pouvez pas spécifier une clause HAVING ou une clause ORDER BY.

    • Si vous incluez une clause CLUSTER BY pour la vue matérialisée, vous devez inclure la clause liste_colonnes .

    • Si vous faites référence à la table de base plus d’une fois dans instruction_select, utilisez le même qualificatif pour toutes les références à la table de base.

      Par exemple, n’utilisez pas un mélange de base_table, schema.base_table et database.schema.base_table dans la même instruction_select. Choisissez plutôt l’une de ces formes (par exemple database.schema.base_table), et utilisez-la de manière cohérente dans l’ensemble de instruction_select.

  • Les vues matérialisées comportent un certain nombre d’autres restrictions. Pour plus de détails, voir Limitations relatives à la création de vues matérialisées et Travailler avec des vues matérialisées : limites.

  • Les définitions de vue ne sont pas mises à jour si le schéma de la table source sous-jacente est modifié de sorte que la définition de vue ne soit plus valide. Par exemple :

    • Une vue est créée en faisant référence à une colonne spécifique dans une table source et la colonne est ensuite détruite de la table.

    • Une vue est créée à l’aide de SELECT * à partir d’une table et toute colonne est ensuite détruite de la table.

    Dans l’un ou l’autre de ces scénarios, l’interrogation de la vue renvoie une erreur.

  • Si une table source d’une vue matérialisée est détruite, l’interrogation de la vue renvoie l’erreur suivante : Materialized View <nom_vue> is invalid.

  • Utiliser OR REPLACE équivaut à utiliser DROP MATERIALIZED VIEW sur la vue matérialisée existante, puis à créer une nouvelle vue avec le même nom. Les actions de destruction et de création se produisent en une seule opération atomique. Cela signifie que toutes les requêtes simultanées à l’opération CREATE OR REPLACE MATERIALIZED VIEW utilisent soit l’ancienne soit la nouvelle version de la vue matérialisée.

Exemples

Créer une vue matérialisée dans le schéma actif, avec un commentaire, qui sélectionne toutes les lignes d’une table :

CREATE MATERIALIZED VIEW mymv
    COMMENT='Test view'
    AS
    SELECT col1, col2 FROM mytable;

Pour plus d’exemples, voir les exemples dans Travailler avec des vues matérialisées.