CREATE VIEW - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CREATE VIEW

Crea una vista in un database. La vista non è materializzata fisicamente, la query che definisce la vista viene eseguita ogni volta che vi si fa riferimento in una query. Per creare una vista con una tabella esterna, includi la clausola WITH NO SCHEMA BINDING.

Per creare una vista standard, devi accedere alle tabelle o alle viste sottostanti. Per eseguire una query su una vista standard, devi selezionare le autorizzazioni per la vista, ma non quelle per le tabelle sottostanti. Nel caso in cui crei una vista che fa riferimento a una tabella o a una vista in un altro schema o a una vista materializzata, potrebbero essere necessarie autorizzazioni aggiuntive. Per eseguire una query su una vista con associazione tardiva, devi selezionare le autorizzazioni per la vista con associazione tardiva stessa. È inoltre necessario assicurarsi che il proprietario della vista di associazione tardiva disponga delle autorizzazioni di selezione per gli oggetti a cui si fa riferimento (tabelle, viste o funzioni definite dall'utente). Per ulteriori informazioni sulle viste con associazione tardiva, consulta Note per l'utilizzo.

Autorizzazioni richieste

Per utilizzare CREATE VIEW, è richiesta una delle seguenti autorizzazioni.

  • Per creare una vista utilizzando CREATE [OR REPLACE] VIEW:

    • Superuser

    • Utenti con l'autorizzazione CREATE [REPLACE] VIEW

  • Per sostituire una vista esistente utilizzando CREATE OR REPLACE VIEW:

    • Superuser

    • Utenti con l'autorizzazione CREATE [OR REPLACE] VIEW

    • Proprietario della visualizzazione

Se un utente desidera accedere a una vista che incorpora una funzione definita dall'utente, deve disporre dell'autorizzazione EXECUTE per quella funzione.

Sintassi

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

Parametri

OR REPLACE

Se esiste già una vista con lo stesso nome, la vista viene sostituita. Puoi sostituire una vista solo con una nuova query che genera un set identico di colonne, usando gli stessi nomi di colonna e tipi di dati. CREATE OR REPLACE VIEW blocca le operazioni di lettura e scrittura della vista fino al completamento dell'operazione.

Quando una vista viene sostituita, vengono mantenute le altre proprietà, ad esempio la proprietà e i privilegi concessi.

name

Nome della vista. Se viene specificato un nome schema (come myschema.myview), la vista viene creata utilizzando lo schema specificato. Altrimenti, la vista viene creata nello schema corrente. Il nome della vista deve essere diverso dal nome di qualsiasi altra vista o tabella nello stesso schema.

Se specifichi un nome di vista che inizia con "#", la vista viene creata come vista temporanea visibile solo nella sessione corrente.

Per ulteriori informazioni sui nomi validi, consultare Nomi e identificatori. Non è possibile creare tabelle o viste nei database di sistema template0, template1, padb_harvest o sys:internal.

column_name

Elenco facoltativo di nomi da utilizzare per le colonne nella vista. Se non vengono specificati nomi di colonne, i nomi delle colonne vengono ricavati dalla query. Il numero massimo di colonne che puoi definire in una singola vista è 1.600.

query

Query (sotto forma di istruzione SELECT) che valuta una tabella. Questa tabella definisce le colonne e le righe nella vista.

WITH NO SCHEMA BINDING

Clausola che specifica che la vista non è vincolata agli oggetti del database sottostante, come le tabelle e le funzioni definite dall'utente. Di conseguenza, non esiste alcuna dipendenza tra la vista e gli oggetti a cui fa riferimento. Puoi creare una vista anche se gli oggetti di riferimento non esistono. Poiché non esiste alcuna dipendenza, è possibile rimuovere o modificare un oggetto di riferimento senza influire sulla vista. Amazon Redshift non controlla le dipendenze finché non viene interrogata la vista. Per visualizzare i dettagli sulle viste con associazione tardiva, esegui la funzione PG_GET_LATE_BINDING_VIEW_COLS.

Quando includi la clausola WITH NO SCHEMA BINDING, le tabelle e le viste a cui si fa riferimento nell'istruzione SELECT devono essere qualificate con un nome schema. Lo schema deve esistere quando viene creata la vista, anche se la tabella di riferimento non esiste. Ad esempio, la seguente istruzione restituisce un errore.

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

La seguente istruzione viene eseguita normalmente.

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

Non puoi eseguire operazioni di aggiornamento, inserimento o eliminazione da una vista.

Note per l'utilizzo

Viste con associazione tardiva

Una vista con associazione tardiva non controlla gli oggetti del database sottostante, come le tabelle e altre viste, finché non viene eseguita la query sulla vista. Di conseguenza, puoi modificare o rimuovere gli oggetti sottostanti senza rimuovere e ricreare la vista. Se rimuovi gli oggetti sottostanti, le query sulla vista con associazione tardiva avranno esito negativo. Se la query sulla vista con associazione tardiva fa riferimento a colonne nell'oggetto sottostante che non sono presenti, la query avrà esito negativo.

Se rimuovi e quindi ricrei una vista o una tabella sottostante di una vista con associazione tardiva, il nuovo oggetto viene creato con le autorizzazioni di accesso predefinite. Potrebbe essere necessario concedere le autorizzazioni agli oggetti sottostanti per gli utenti che eseguono query sulla vista.

Per creare una vista con associazione tardiva, includi la clausola WITH NO SCHEMA BINDING. Nell'esempio seguente viene creata una vista senza associazione di schema.

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'esempio seguente mostra che puoi modificare una tabella sottostante senza ricreare la vista.

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

È possibile fare riferimento alle tabelle esterne di Amazon Redshift Spectrum solo in una vista con associazione tardiva. Un'applicazione delle viste con associazione tardiva è quella di eseguire la query sulle tabelle Amazon Redshift e Redshift Spectrum. Ad esempio, è possibile utilizzare il comando UNLOAD per archiviare i dati meno recenti in Amazon S3. Quindi, creare una tabella esterna Redshift Spectrum che fa riferimento ai dati in Amazon S3 e una vista che esegue le query su entrambe le tabelle. Nell'esempio seguente viene utilizza una clausola UNION ALL per eseguire il join alla tabella SALES di Amazon Redshift e alla tabella SPECTRUM.SALES di Redshift Spectrum.

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

Per ulteriori informazioni sulla creazione di tabelle esterne di Redshift Spectrum, inclusa la tabella SPECTRUM.SALES, vedi Nozioni di base su Amazon Redshift Spectrum.

Importante

Quando si crea una vista standard da una visualizzazione con associazione tardiva, la definizione della vista standard contiene la definizione della vista di associazione tardiva al momento della creazione della visualizzazione standard, incluso il proprietario della vista con associazione tardiva. Se apporti una modifica alla vista di associazione tardiva sottostante, tali modifiche non verranno utilizzate nella vista standard finché non ricreerai la visualizzazione standard. Pertanto, quando viene eseguita una query sulla visualizzazione standard, utilizzerà sempre la definizione della vista con associazione tardiva e il proprietario della visualizzazione tardiva per il controllo delle autorizzazioni al momento della creazione della vista standard.

Per aggiornare la vista standard in modo che faccia riferimento alla definizione più recente della vista con associazione tardiva, esegui CREATE OR REPLACE VIEW con la definizione iniziale utilizzata per creare la vista standard.

Di seguito è riportato un esempio di creazione di una vista standard da una vista con associazione tardiva.

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)

Tieni presente che la vista con associazione tardiva, come illustrata nell'istruzione DDL per la vista standard, viene definita al momento della creazione della vista standard e non verrà aggiornata con le modifiche apportate successivamente alla vista con associazione tardiva.

Esempi

I comandi di esempio utilizzano un set di oggetti e dati di esempio chiamato database TICKIT. Per ulteriori informazioni, consulta Database di esempio.

Il seguente comando crea una vista chiamata myevent da una tabella chiamata EVENT.

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

Il seguente comando crea una vista chiamata myuser da una tabella chiamata USERS.

create view myuser as select lastname from users;

Il seguente comando crea o sostituisce una vista chiamata myuser da una tabella chiamata USERS.

create or replace view myuser as select lastname from users;

Nell'esempio seguente viene creata una vista senza associazione di schema.

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