CREATE VIEW - Amazon Redshift

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 VIEW

Crée une vue dans une base de données. La vue n’est pas physiquement matérialisée ; la requête qui définit la vue est exécutée chaque fois que la vue est référencée dans une requête. Pour créer une vue avec une table externe, incluez la clause WITH NO SCHEMA BINDING.

Pour créer une vue standard, vous avez besoin d’un accès aux tables sous-jacentes ou à des vues sous-jacentes. Pour interroger une vue standard, vous devez sélectionner des autorisations pour la vue elle-même, mais vous ne devez pas en sélectionner pour les tables sous-jacentes. Dans le cas où vous créez une vue qui fait référence à une table ou à une vue d’un autre schéma, ou si vous créez une vue qui fait référence à une vue matérialisée, vous aurez peut-être besoin d’autorisations d’utilisation. Pour interroger une vue à liaison tardive, vous devez sélectionner des autorisations pour la vue elle-même. Vous devez également vous assurer que le propriétaire de la vue à liaison tardive a des privilèges select pour les objets référencés (tables, vues ou fonctions définies par l’utilisateur). Pour plus d’informations sur les vues à liaison tardive, consultez Notes d’utilisation.

Privilèges requis

Les privilèges suivants sont requis pour CREATE VIEW :

  • Pour CREATE VIEW :

    • Superuser

    • Utilisateurs disposant du privilège CREATE [ OR REPLACE ] VIEW

  • Pour REPLACE VIEW :

    • Superuser

    • Utilisateurs disposant du privilège CREATE [ OR REPLACE ] VIEW

    • Propriétaire de la vue

Syntaxe

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]

Paramètres

OR REPLACE

Si une vue du même nom existe déjà, la vue est remplacée. Vous pouvez remplacer uniquement par une nouvelle requête qui génère le même ensemble de colonnes, à l’aide des mêmes noms de colonne et des mêmes types de données. CREATE OR REPLACE VIEW verrouille l’affichage pour les lectures et les écritures jusqu’à la fin de l’opération.

Lorsqu’une vue est remplacée, ses autres propriétés telles que la propriété et les privilèges accordés sont conservées.

nom

Nom de la vue. Si un nom de schéma est fourni (tel que myschema.myview), la vue est créée à l’aide du schéma spécifié. Sinon, la vue est créée dans le schéma en cours. Le nom de la vue doit être différent du nom de toute autre vue ou table du même schéma.

Si vous spécifiez un nom de vue commençant par « # », la vue est créée comme vue temporaire qui n’est visible que dans la séance en cours.

Pour plus d’informations sur les noms valides, consultez Noms et identificateurs. Vous ne pouvez pas créer de tables ni de vues dans les bases de données système template0, template1, padb_harvest ou sys:internal.

column_name

Liste facultative des noms à utiliser pour les colonnes de la vue. Si aucun nom de colonne n’est fourni, les noms de colonnes sont dérivés de la requête. Le nombre maximal de colonnes que vous pouvez définir dans une seule vue est de 1 600.

query

Requête (sous la forme d’une instruction SELECT) qui est analysée comme table. La table définit les colonnes et les lignes de la vue.

WITH NO SCHEMA BINDING

Clause qui spécifie que la vue n’est pas liée aux objets de base de données sous-jacents, tels que les tables et les fonctions définies par l’utilisateur. Par conséquent, il n’y a aucune dépendance entre la vue et les objets auxquels elle fait référence. Vous pouvez créer une vue même si les objets référencés n’existent pas. Parce qu’il n’y a aucune dépendance, vous pouvez supprimer ou modifier un objet référencé sans affecter la vue. Amazon Redshift ne vérifie pas les dépendances tant que la vue n’est pas interrogée. Pour afficher les détails relatifs aux vues à liaison tardive, exécutez la fonction PG_GET_LATE_BINDING_VIEW_COLS.

Lorsque vous incluez la clause WITH NO SCHEMA BINDING, les tables et vues référencées dans l’instruction SELECT doivent être qualifiées par un nom de schéma. Le schéma doit exister lorsque la vue est créée, même si la table référencée n’existe pas. Par exemple, l’instruction suivante renvoie une erreur.

create view myevent as select eventname from event with no schema binding;

L’instruction suivante s’exécute avec succès.

create view myevent as select eventname from public.event with no schema binding;
Note

Vous ne pouvez pas mettre à jour, insérer ou supprimer à partir d’une vue.

Notes d’utilisation

Vues à liaison tardive

Une vue à liaison tardive ne contrôle pas les objets de base de données sous-jacents, tels que les autres vues, tant que la vue n’est pas interrogée. En conséquence, vous pouvez supprimer ou modifier les objets sous-jacents sans supprimer la vue et la recréer. Si vous supprimez des objets sous-jacents, les requêtes à la vue à liaison tardive échoueront. Si la requête à la vue à liaison tardive fait référence à des colonnes de l’objet sous-jacent qui ne sont pas présentes, la requête échouera.

Si vous supprimez puis recréez une table ou une vue sous-jacente d’une vue à liaison tardive, le nouvel objet est créé avec des autorisations d’accès par défaut. Vous devrez peut-être accorder des autorisations sur les objets sous-jacents aux utilisateurs qui utiliseront la requête.

Pour créer une vue à liaison tardive, incluez la clause WITH NO SCHEMA BINDING. L’exemple suivant crée une vue sans liaison de schéma.

create view event_vw as select * from public.event with no schema binding;
select * from event_vw limit 1; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

L’exemple suivant montre que vous pouvez modifier une table sous-jacente sans recréer la vue.

alter table event rename column eventname to title;
select * from event_vw limit 1; eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

Vous ne pouvez faire référence aux tables externes Amazon Redshift Spectrum que dans une vue à liaison tardive. Une application des vues à liaison tardive consiste à interroger les tables Amazon Redshift et Redshift Spectrum. Par exemple, vous pouvez utiliser la commande UNLOAD pour archiver les données plus anciennes dans Amazon S3. Ensuite, créez une table externe Redshift Spectrum qui fait référence aux données sur Amazon S3 et créez une vue qui interroge les deux tables. L’exemple suivant utilise une clause UNION ALL pour joindre la table SALES Amazon Redshift et la table SPECTRUM.SALES Redshift Spectrum.

create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;

Pour plus d’informations sur la création de tables externes Redshift Spectrum, y compris la table SPECTRUM.SALES, consultez Mise en route avec Amazon Redshift Spectrum.

Lorsque vous créez une vue standard à partir d’une vue à liaison tardive, la définition de la vue standard contient la définition de la vue à liaison tardive au moment où la vue standard a été créée. La dépendance de la vue à liaison tardive n’est pas suivie, de sorte que les modifications apportées à la vue de liaison tardive ne sont pas suivies dans la vue standard.

Pour mettre à jour la vue standard afin qu’elle fasse référence à la dernière définition de la vue à liaison tardive, exécutez CREATE OR REPLACE VIEW avec la définition de vue initiale que vous avez utilisée pour créer la vue standard.

Consultez l’exemple suivant de création d’une vue standard à partir d’une vue à liaison tardive.

create view sales_vw_lbv as select * from public.sales with no schema binding; show view sales_vw_lbv; Show View DDL statement -------------------------------------------------------------------------------- create view sales_vw_lbv as select * from public.sales with no schema binding; (1 row) create view sales_vw as select * from sales_vw_lbv; show view sales_vw; Show View DDL statement --------------------------------------------------------------------------------------------------------------------- SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv; (1 row)

Notez que la vue à liaison tardive, telle qu’indiquée dans l’instruction DDL pour la vue standard, est définie lors de la création de la vue standard et ne sera pas mise à jour avec les modifications que vous apporterez ultérieurement à la vue à liaison tardive.

Exemples

Les exemples de commandes utilisent un ensemble d’objets et de données appelé base de données TICKIT. Pour plus d’informations, consultez Exemple de base de données.

La commande suivante crée une vue nommée myevent à partir d’une table appelée EVENT.

create view myevent as select eventname from event where eventname = 'LeAnn Rimes';

La commande suivante crée une vue nommée myuser à partir d’une table appelée USERS.

create view myuser as select lastname from users;

La commande suivante crée ou remplace une vue nommée myuser à partir d’une table appelée USERS.

create or replace view myuser as select lastname from users;

L’exemple suivant crée une vue sans liaison de schéma.

create view myevent as select eventname from public.event with no schema binding;