CREATE MATERIALIZED VIEW
Cria uma visão materializada com base em uma ou mais tabelas do Amazon Redshift. Você também pode basear visões materializadas em tabelas externas criadas usando Spectrum ou consulta federada. Para obter informações sobre o Spectrum, consulte Amazon Redshift Spectrum. Para obter informações sobre consulta federada, consulte Consultar dados com consultas federadas no Amazon Redshift.
Sintaxe
CREATE MATERIALIZED VIEW mv_name [ BACKUP { YES | NO } ] [ table_attributes ] [ AUTO REFRESH { YES | NO } ] AS query
Parâmetros
- BACKUP
-
Uma cláusula que especifica se uma visão materializada deve ser incluída em snapshots de cluster manuais ou automáticos.
Para visões materializadas que não contêm dados críticos, especifique BACKUP NO para economizar tempo de processamento ao criar snapshosts, restaurar de snapshots e reduzir o uso de espaço de armazenamento no Amazon Simple Storage Service. A configuração BACKUP NO não tem efeito na replicação automática de dados para outros nós no cluster. Portanto, visões materializadas com BACKUP NO especificado são restauradas em caso de falha de nó. O padrão é BACKUP YES.
- table_attributes
-
Uma cláusula que especifica como os dados na visualização materializada são distribuídos, incluindo o seguinte:
-
O estilo de distribuição da visualização materializada, no formato
DISTSTYLE { EVEN | ALL | KEY }
. Se você omitir essa cláusula, o estilo da distribuição seráEVEN
. Para obter mais informações, consulte Estilos de distribuição. -
O código de distribuição da visualização materializada, no formato
DISTKEY ( distkey_identifier )
. Para obter mais informações, consulte Designação de estilos de distribuição. -
A chave de classificação para a visualização materializada, no formato
SORTKEY ( column_name [, ...] )
. Para obter mais informações, consulte Chaves de classificação.
-
- AS query
-
Uma instrução
SELECT
válida que define a visualização materializada e seu conteúdo. O conjunto de resultados da consulta define as colunas e as linhas da visualização materializada. Para obter informações sobre limitações ao criar visões materializadas, consulte Limitações.Além disso, os constructos de linguagem SQL específicos usados na consulta determinam se a visualização materializada pode ser atualizada de maneira incremental ou total. Para obter informações sobre o método de atualização, consulte REFRESH MATERIALIZED VIEW. Para obter informações sobre as limitações da atualização incremental, consulte Limitações para atualização incremental.
Se a consulta contiver um comando SQL incompatível com a atualização incremental, o Amazon Redshift exibirá uma mensagem indicando que a visualização materializada usará uma atualização total. A mensagem poderá ou não ser exibida dependendo da aplicação cliente SQL. Verifique a coluna
state
do STV_MV_INFO para ver o tipo de atualização usado por uma visualização materializada. - AUTO REFRESH
-
Uma cláusula que define se a visualização materializada deve ser atualizada automaticamente com as alterações mais recentes de suas tabelas base. O valor padrão é
NO
. Para obter mais informações, consulte Atualizar uma visão materializada.
Observações de uso
Para criar uma visualização materializada, você deve ter os seguintes privilégios:
-
Privilégios CREATE para um esquema.
-
Privilégio SELECT por tabela ou coluna para as tabelas de base a fim de criar uma visão materializada. Se você tiver privilégios por coluna para colunas específicas, poderá criar uma visão materializada somente para essas colunas.
Atualização incremental para visões materializadas em uma unidade de compartilhamento de dados
O Amazon Redshift oferece suporte à atualização automática e incremental de visões materializadas em uma unidade de compartilhamento de dados do consumidor quando as tabelas base são compartilhadas. A atualização incremental é uma operação em que o Amazon Redshift identifica alterações em uma ou mais tabelas base que ocorreram após a atualização anterior e atualiza somente os registros correspondentes na visão materializada. Ela é mais rápida do que uma atualização completa e melhora o desempenho da workload. Você não precisa alterar a definição de visão materializada para usar a atualização incremental.
Há algumas limitações a serem observadas para usar a atualização incremental com uma visão materializada:
A visão materializada deve fazer referência a um banco de dados apenas, seja local ou remoto.
A atualização incremental está disponível somente em novas visões materializadas. Portanto, você deve descartar as visões materializadas existentes e recriá-las para que ocorra a atualização incremental.
Para obter mais informações sobre a criação de visões materializadas em uma unidade de compartilhamento de dados, consulte Trabalhar com visualizações no compartilhamento de dados do Amazon Redshift, que contém vários exemplos de consulta.
Atualizações em DDL para visões materializadas ou tabelas base
Ao usar visões materializadas no Amazon Redshift, siga estas observações de uso para atualizações em linguagem de definição de dados (DDL) para visões materializadas ou tabelas base.
-
É possível adicionar colunas a uma tabela base sem afetar as visões materializadas que fazem referência à tabela-base.
-
Algumas operações podem deixar a visualização materializada em um estado que não pode ser atualizado de forma alguma. Entre os exemplos estão operações como renomeação ou descarte de uma coluna, alteração do tipo de uma coluna e alteração do nome de um esquema. Essas visões materializadas podem ser consultadas, mas não podem ser atualizadas. Nesse caso, você deve descartar e recriar a visualização materializada.
-
Em geral, não é possível alterar a definição de uma visualização materializada (instrução SQL desta).
-
Não é possível renomear uma visualização materializada.
Limitações
Você não pode definir uma visualização materializada que faça referência ou inclua o seguinte:
-
Exibições padrão ou tabelas e exibições do sistema.
-
Tabelas temporárias.
-
Funções definidas pelo usuário.
-
A cláusula ORDER BY, LIMIT ou OFFSET.
-
referências de vinculação tardia a tabelas base. Ou seja, todas as tabelas base ou colunas relacionadas referenciadas na definição da consulta SQL da visualização materializada devem existir e serem válidas.
-
Funções somente de nó líder: CURRENT_SCHEMA, CURRENT_SCHEMAS, HAS_DATABASE_PRIVILEGE, HAS_SCHEMA_PRIVILEGE, HAS_TABLE_PRIVILEGE.
Você não pode usar a opção AUTO REFRESH YES quando a definição de visualização materializada incluir funções mutáveis ou esquemas externos. Você também não pode usá-lo ao definir uma visão materializada em outra visualização materializada.
Não é necessário executar manualmente o ANALYZE com visões materializadas. Atualmente, isso acontece apenas via AUTO ANALYZE. Para ter mais informações, consulte Análise de tabelas.
Exemplos
O exemplo a seguir cria uma visualização materializada de três tabelas base que são unidas e agregadas. Cada linha representa uma categoria com o número de bilhetes vendidos. Ao consultar a visualização materializada tickets_mv, os dados pré-calculados da visualização materializada tickets_mv são acessados diretamente.
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;
O exemplo a seguir cria uma visualização materializada semelhante ao exemplo anterior e usa a função agregada 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;
O exemplo a seguir usa uma cláusula UNION ALL para unir a tabela public_sales
do Amazon Redshift e a tabela spectrum.sales
do Redshift Spectrum para criar uma visualização materializada mv_sales_vw
. Para obter informações sobre o comando CREATE EXTERNAL TABLE para Amazon Redshift Spectrum, consulte CREATE EXTERNAL TABLE. A tabela externa do Redshift Spectrum referencia os dados no 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
O exemplo a seguir cria uma visualização materializada mv_fq
com base em uma tabela externa de consulta federada. Para obter informações sobre consulta federada, consulte 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)
O exemplo a seguir mostra a definição de uma visualização materializada.
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;
O exemplo a seguir mostra como definir AUTO REFRESH na definição de visão materializada e também especifica um DISTSTYLE. Primeiro, crie uma tabela base simples.
CREATE TABLE baseball_table (ball int, bat int);
Depois, crie uma visão materializada.
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
Agora você pode consultar a visão materializada de mv_baseball. Para verificar se a opção AUTO REFRESH está ativada para uma visão materializada, consulte STV_MV_INFO.
O exemplo a seguir cria uma visão materializada que faz referência a uma tabela de origem em outro banco de dados. Ele assume que o banco de dados que contém a tabela de origem, database_A, está no mesmo cluster ou grupo de trabalho da visão materializada, que é criada em database_B. (Você pode usar seus próprios bancos de dados no exemplo.) Primeiro, crie uma tabela em database_A chamada cities, com uma coluna cityname. Defina o tipo de dado da coluna como VARCHAR. Depois de criar a tabela de origem, execute o seguinte comando em database_B para criar uma visão materializada cuja origem seja sua tabela cities. Especifique o banco de dados e o esquema da tabela de origem na cláusula FROM:
CREATE MATERIALIZED VIEW cities_mv AS SELECT cityname FROM database_A.public.cities;
Consulte a visão materializada que você criou. A consulta recupera registros cuja fonte original é a tabela cities em database_A:
select * from cities_mv;
Quando você executa a instrução SELECT, cities_mv retorna os registros. Os registros são atualizados da tabela de origem somente quando uma instrução REFRESH é executada. Além disso, observe que não é possível atualizar registros diretamente na visão materializada. Para obter informações sobre como atualizar os dados em uma visão materializada, consulte REFRESH MATERIALIZED VIEW.
Para obter detalhes sobre a visão geral da visualização materializada e os comandos SQL usados para atualizar e descartar visões materializadas, consulte os seguintes tópicos: