Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
CREATE MATERIALIZED VIEW
Crée une vue matérialisée basée sur une ou plusieurs tables Amazon Redshift. Vous pouvez également baser les vues matérialisées sur des tables externes créées à l’aide de Spectrum ou d’une requête fédérée. Pour obtenir des informations sur Spectrum, consultez Amazon Redshift Spectrum. Pour obtenir des informations sur la requête fédérée, consultez Interrogation de données avec requête fédérée dans Amazon Redshift.
Syntaxe
CREATE MATERIALIZED VIEW mv_name [ BACKUP { YES | NO } ] [ table_attributes ] [ AUTO REFRESH { YES | NO } ] AS query
Paramètres
- BACKUP
-
Clause qui indique si la vue matérialisée doit être incluse dans les instantanés de cluster automatisés et manuels.
Pour les vues matérialisées qui ne contiennent pas de données critiques, spécifiez BACKUP NON pour gagner du temps de traitement lors de la création de clichés et de la restauration à partir d'instantanés et pour réduire l'espace de stockage sur Amazon Simple Storage Service. Le paramètre BACKUP NO n'a aucun effet sur la réplication automatique des données vers les autres nœuds du cluster, de sorte que les vues matérialisées pour lesquelles BACKUP AUCUN n'est spécifié sont restaurées en cas de défaillance d'un nœud. La valeur par défaut est BACKUPYES.
- table_attributes
-
Clause qui spécifie la manière dont les données de la vue matérialisée sont distribuées, notamment :
-
Style de distribution de la vue matérialisée, au format
DISTSTYLE { EVEN | ALL | KEY }
. Si vous omettez cette clause, le style de distribution estEVEN
. Pour plus d'informations, consultez Styles de distribution. -
Clé de distribution de la vue matérialisée, au format
DISTKEY ( distkey_identifier )
. Pour plus d'informations, consultez Détermination des styles de distribution. -
Clé de tri de la vue matérialisée, au format
SORTKEY ( column_name [, ...] )
. Pour plus d'informations, consultez Clés de tri.
-
- AS requête
-
Une instruction
SELECT
valide qui définit la vue matérialisée et son contenu. L’ensemble de résultats de la requête définit les colonnes et les lignes de la vue matérialisée. Pour obtenir des informations sur les limitations lors de la création de vues matérialisées, consultez Limites.En outre, les structures SQL linguistiques spécifiques utilisées dans la requête déterminent si la vue matérialisée peut être actualisée de manière incrémentielle ou complète. Pour obtenir des informations sur la méthode d’actualisation, consultez REFRESH MATERIALIZED VIEW. Pour obtenir des informations sur les limitations de l’actualisation progressive, consultez Limites d’actualisation incrémentielle.
Si la requête contient une SQL commande qui ne prend pas en charge l'actualisation incrémentielle, Amazon Redshift affiche un message indiquant que la vue matérialisée utilisera une actualisation complète. Le message peut être affiché ou non, selon l'application SQL cliente. Cochez la colonne
state
de STV_MV_ INFO pour voir le type d’actualisation utilisé par une vue matérialisée. - AUTO REFRESH
-
Clause qui définit si la vue matérialisée doit être automatiquement actualisée avec les dernières modifications de ses tables de base ou non. La valeur par défaut est
NO
. Pour plus d'informations, consultez Actualisation d’une vue matérialisée.
Notes d’utilisation
Pour créer une vue matérialisée, vous devez disposer des privilèges suivants :
-
CREATEprivilèges pour un schéma.
-
SELECTPrivilège au niveau des tables ou des colonnes sur les tables de base pour créer une vue matérialisée. Si vous disposez de privilèges au niveau de colonnes spécifiques, vous pouvez créer une vue matérialisée uniquement avec ces colonnes.
Actualisation incrémentielle des vues matérialisées dans un partage de données
Amazon Redshift prend en charge l'actualisation automatique et incrémentielle des vues matérialisées dans un partage de données client lorsque les tables de base sont partagées. L'actualisation incrémentielle est une opération au cours de laquelle Amazon Redshift identifie les modifications apportées à la table de base ou aux tables après l'actualisation précédente et met à jour uniquement les enregistrements correspondants dans la vue matérialisée. Cela s'exécute plus rapidement qu'une actualisation complète et améliore les performances de la charge de travail. Il n'est pas nécessaire de modifier la définition de votre vue matérialisée pour tirer parti de l'actualisation incrémentielle.
Il existe quelques limites à prendre en compte pour tirer parti de l'actualisation incrémentielle avec une vue matérialisée :
La vue matérialisée ne doit référencer qu'une seule base de données, locale ou distante.
L'actualisation incrémentielle n'est disponible que sur les nouvelles vues matérialisées. Par conséquent, vous devez supprimer les vues matérialisées existantes et les recréer pour qu'une actualisation incrémentielle ait lieu.
Pour plus d'informations sur la création de vues matérialisées dans un partage de données, consultez Utilisation des vues dans le partage de données Amazon Redshift, qui contient plusieurs exemples de requêtes.
DDLmises à jour des vues matérialisées ou des tables de base
Lorsque vous utilisez des vues matérialisées dans Amazon Redshift, suivez ces notes d'utilisation pour les mises à jour du langage de définition des données DDL () des vues matérialisées ou des tables de base.
-
Vous pouvez ajouter des colonnes à une table de base sans affecter les vues matérialisées qui référencent cette table.
-
Certaines opérations peuvent laisser la vue matérialisée dans un état qui ne peut pas du tout être actualisé. Par exemple, des opérations telles que le renommage ou la suppression d’une colonne, le modification d’un type de colonne et le changement de nom d’un schéma. Ce type de vue matérialisée peut être interrogé mais pas actualisé. Dans ce cas, vous devez annuler et recréer la vue matérialisée.
-
En général, vous ne pouvez pas modifier la définition d'une vue matérialisée (son SQL énoncé).
-
Vous ne pouvez pas renommer une vue matérialisée.
Limites
Vous ne pouvez pas définir de vue matérialisée qui référence ou comprend l’un des éléments suivants :
-
Vues standard ou tables et vues système.
-
Tables temporaires.
-
Fonctions définies par l’utilisateur.
-
La OFFSET clause ORDER BYLIMIT, ou.
-
Références de liaison tardive aux tables de base. En d'autres termes, toutes les tables de base ou colonnes associées référencées dans la SQL requête de définition de la vue matérialisée doivent exister et être valides.
-
Fonctions réservées au nœud leader : CURRENT _SCHEMA, CURRENT _SCHEMAS, _ HAS _PRIVILEGE, DATABASE _ HAS _PRIVILEGE, SCHEMA _ HAS _TABLE. PRIVILEGE
Vous ne pouvez pas utiliser AUTO REFRESH YES cette option lorsque la définition de la vue matérialisée inclut des fonctions mutables ou des schémas externes. Vous ne pouvez pas non plus l’utiliser lorsque vous définissez une vue matérialisée sur une autre vue matérialisée.
Vous n’avez pas besoin d’exécuter manuellement ANALYZE sur les vues matérialisées. Cela se produit actuellement uniquement via AUTOANALYZE. Pour de plus amples informations, veuillez consulter Analyse des tables.
Exemples
L’exemple suivant montre comment créer une vue matérialisée à partir de trois tables de base qui sont jointes et agrégées. Chaque ligne représente une catégorie avec le nombre de billets vendus. Lorsque vous interrogez la vue matérialisée tickets_mv, vous accédez directement aux données précalculées dans la vue matérialisée tickets_mv.
CREATE MATERIALIZED VIEW tickets_mv AS select catgroup, sum(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup;
L'exemple suivant crée une vue matérialisée similaire à l'exemple précédent et utilise la fonction d'agrégation MAX ().
CREATE MATERIALIZED VIEW tickets_mv_max AS select catgroup, max(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup; SELECT name, state FROM STV_MV_INFO;
L'exemple suivant utilise une UNION ALL clause pour joindre la table Amazon Redshift et la public_sales
table Redshift Spectrum afin de créer une spectrum.sales
vue matérielle. mv_sales_vw
Pour plus d'informations sur la CREATE EXTERNAL TABLE commande pour Amazon Redshift Spectrum, CREATE EXTERNAL TABLE consultez. La table externe Redshift Spectrum fait référence aux données sur Amazon S3.
CREATE MATERIALIZED VIEW mv_sales_vw as select salesid, qtysold, pricepaid, commission, saletime from public.sales union all select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
L’exemple suivant crée une vue matérialisée mv_fq
basée sur une table externe de requête fédérée. Pour obtenir des informations sur la requête fédérée, consultez CREATE EXTERNAL SCHEMA.
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example; select firstname, lastname from mv_fq; firstname | lastname -----------+---------- John | Day Jane | Doe (2 rows)
L’exemple suivant montre la définition d’une vue matérialisée.
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true); pg_get_viewdef --------------------------------------------------- create materialized view mv_sales_vw as select a from t;
L'exemple suivant montre comment définir la définition AUTO REFRESH de la vue matérialisée et spécifie également unDISTSTYLE. Commencez par créer une table de base simple.
CREATE TABLE baseball_table (ball int, bat int);
Créez ensuite une vue matérialisée.
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
Vous pouvez maintenant interroger la vue matérialisée mv_baseball. Pour vérifier si cette AUTO REFRESH option est activée pour une vue matérialisée, consultezSTV_MV_ INFO.
L’exemple suivant crée une vue matérialisée qui fait référence à une table source dans une autre base de données. Cela suppose que la base de données contenant la table source, database_A, se trouve dans le même cluster ou groupe de travail que votre vue matérialisée, que vous créez dans database_B. (Vous pouvez remplacer vos propres bases de données par l’exemple.) Tout d’abord, créez une table dans database_A appelée cities pour les villes, avec une colonne cityname pour les noms de villes. Définissez le type de données de la colonne VARCHAR a. Après avoir créé la table source, exécutez la commande suivante dans database_B pour créer une vue matérialisée dont la source est votre table cities. Assurez-vous de spécifier la base de données et le schéma de la table source dans la FROM clause :
CREATE MATERIALIZED VIEW cities_mv AS SELECT cityname FROM database_A.public.cities;
Interrogez la vue matérialisée que vous avez créée. La requête extrait les enregistrements dont la source d’origine est la table cities dans database_A :
select * from cities_mv;
Lorsque vous exécutez l'SELECTinstruction, cities_mv renvoie les enregistrements. Les enregistrements sont actualisés à partir de la table source uniquement lorsqu'une REFRESH instruction est exécutée. Notez également que vous ne pouvez pas mettre à jour les enregistrements directement dans la vue matérialisée. Pour plus d’informations sur l’actualisation des données dans une vue matérialisée, consultez REFRESH MATERIALIZED VIEW.
Pour plus de détails sur la vue d'ensemble des vues matérialisées et SQL les commandes utilisées pour actualiser et supprimer les vues matérialisées, consultez les rubriques suivantes :