CREATE VIEW - Amazon Redshift

CREATE VIEW

Cria uma exibição em um banco de dados. A exibição não é materializada fisicamente. A consulta que define a exibição é executada sempre que ela é mencionada em uma consulta. Para criar uma exibição com uma tabela externa, inclua a cláusula WITH NO SCHEMA BINDING.

Para criar uma visualização padrão, você precisa acessar as tabelas subjacentes ou as visualizações subjacentes. Para consultar uma exibição padrão, você precisa selecionar permissões para a própria exibição, mas não precisa selecionar permissões para as tabelas subjacentes. Quando criar uma exibição que referencia uma tabela ou uma exibição em outro esquema ou se criar uma exibição que referencia uma visão materializada, você precisará de permissões de uso. Para consultar uma exibição de vinculação tardia, você precisa selecionar permissões para ela. Você também precisa verificar se o proprietário da exibição de vinculação tardia apresenta privilégios de seleção para os objetos referenciados (tabelas, visualizações ou funções definidas pelo usuário). Para obter mais informações sobre exibições de vinculação tardia, consulte Observações de uso.

Privilégios obrigatórios

A seguir estão os privilégios obrigatórios para CREATE VIEW:

  • Para CREATE VIEW:

    • Superusuário

    • Usuários com o privilégio CREATE [ OR REPLACE ] VIEW

  • Para REPLACE VIEW:

    • Superusuário

    • Usuários com o privilégio CREATE [ OR REPLACE ] VIEW

    • Proprietário da exibição

Sintaxe

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

Parâmetros

OR REPLACE

Se uma exibição com o mesmo nome já existir, a exibição será substituída. Você somente pode substituir uma exibição com uma consulta nova que gere o conjunto idêntico de colunas, usando os mesmos nomes de coluna e tipos de dados. CREATE OR REPLACE VIEW bloqueia a exibição para leituras e gravações até que a operação seja concluída.

Quando uma exibição é substituída, suas outras propriedades, como propriedade e privilégios concedidos, são preservadas.

name

Nome da exibição. Se um nome de esquema (como myschema.myview) for fornecido, a exibição será criada usando o esquema especificado. Caso contrário, a exibição será criada no esquema atual. O nome da exibição deve ser diferente do nome de qualquer outra exibição ou tabela no mesmo esquema.

Se você especificar um nome para a exibição que comece com “#”, a exibição é criada como temporária e será visível somente na sessão atual.

Para obter mais informações sobre nomes válidos, consulte Nomes e identificadores. Você não pode criar tabelas ou exibições nos bancos de dados do sistema template0, template1, padb_harvest ou sys:internal.

column_name

Lista opcional de nomes a serem usados para as colunas na exibição. Se nenhum nome de coluna for fornecido, os nomes de colunas serão derivados da consulta. O número máximo de colunas que você pode definir em uma única exibição é 1.600.

query

Consulta (na forma de instrução SELECT) que avalia uma tabela. Esta tabela define as colunas e linhas na exibição.

WITH NO SCHEMA BINDING

Cláusula que especifica que a exibição não está vinculada a objetos de banco de dados subjacentes, como tabelas e funções definidas pelo usuário. Como resultado, não há nenhuma dependência entre a exibição e os objetos aos quais ela faz referência. Você pode criar uma exibição mesmo se não houver objetos referenciados. Como não há dependência, você pode descartar ou alterar um objeto referenciado sem afetar a visualização. O Amazon Redshift não verifica as dependências até que a exibição seja consultada. Para consultar detalhes sobre exibições de vinculação tardia, execute a função PG_GET_LATE_BINDING_VIEW_COLS.

Quando você incluir a cláusula WITH NO SCHEMA BINDING, as tabelas e as exibições referenciadas na instrução SELECT deverão ser qualificadas com um nome de esquema. Deve haver um esquema quando a exibição for criada, mesmo se a tabela referenciada não existir. Por exemplo, a seguinte instrução retorna um erro.

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

A instrução a seguir é executada com êxito.

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

Não é possível atualizar, inserir ou excluir em uma visualização.

Observações de uso

Visualizações de vinculação tardia

Uma exibição de vinculação tardia só verifica os objetos de banco de dados subjacentes, como tabelas e outras exibições, depois que a exibição for consultada. Consequentemente, você pode alterar ou remover os objetos subjacentes sem remover e recriar a exibição. Se você eliminar objetos subjacentes, as consultas para a exibição de vinculação tardia apresentarão falha. Se a consulta à exibição de vinculação tardia fizer referência às colunas no objeto subjacente que não estão presentes, ela apresentará falha.

Se você descartar e recriar a tabela ou exibição subjacente de uma exibição de vinculação tardia, o novo objeto será criado com permissões de acesso padrão. Você precisará conceder permissões aos objetos subjacentes para usuários que farão consultas na visualização.

Para criar uma exibição de vinculação tardia, inclua a cláusula WITH NO SCHEMA BINDING. O exemplo a seguir cria uma exibição sem vinculação de esquema.

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

O exemplo a seguir mostra que você pode alterar uma tabela subjacente sem recriar a exibição.

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

Você pode fazer referência às tabelas externas do Amazon Redshift Spectrum somente em uma visualização de vinculação tardia. Uma aplicação de visualizações de vinculação tardia consulta as tabelas do Amazon Redshift e do Redshift Spectrum. Por exemplo, você pode usar o comando UNLOAD para arquivar os dados mais antigos no Amazon S3. Em seguida, crie uma tabela externa do Redshift Spectrum que faça referência aos dados no Amazon S3 e crie uma exibição que consulte as duas tabelas. O exemplo a seguir usa uma cláusula UNION ALL para unir a tabela SALES do Amazon Redshift e a tabela SPECTRUM.SALES do Redshift Spectrum.

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

Para obter mais informações sobre como criar tabelas externas do Redshift Spectrum, incluindo a tabela SPECTRUM.SALES, consulte Conceitos básicos do Amazon Redshift Spectrum.

Quando você cria uma exibição padrão a partir de uma exibição de vinculação tardia, a definição da exibição padrão contém a definição da exibição de vinculação tardia no momento em que a exibição padrão foi criada. Como a dependência da exibição de vinculação tardia não é rastreada, as alterações feitas na exibição de vinculação tardia não são rastreadas na exibição padrão.

Para atualizar a exibição padrão a fim de referenciar a definição mais recente da exibição de vinculação tardia, execute CREATE OR REPLACE VIEW com a definição de exibição inicial usada por você para criar a exibição padrão.

Consulte o exemplo a seguir da criação de uma exibição padrão a partir de uma exibição de vinculação tardia.

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)

A exibição de vinculação tardia, conforme mostrada na instrução DDL da exibição padrão, é definida quando a exibição padrão é criada e não será atualizada com nenhuma alteração feita posteriormente por você na exibição de vinculação tardia.

Exemplos

Os comandos de exemplo usam um conjunto de objetos e dados de amostra chamado banco de dados TICKIT. Para obter mais informações, consulte Banco de dados de amostra.

O comando a seguir cria uma exibição denominada myevent a partir de uma tabela denominada EVENT.

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

O comando a seguir cria uma exibição denominada myuser a partir de uma tabela denominada USERS.

create view myuser as select lastname from users;

O comando a seguir cria ou substitui uma exibição denominada myuser a partir de uma tabela denominada USERS.

create or replace view myuser as select lastname from users;

O exemplo a seguir cria uma exibição sem vinculação de esquema.

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