

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# CREATE MATERIALIZED VIEW
<a name="materialized-view-create-sql-command"></a>

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](c-using-spectrum.md). Para obter informações sobre consulta federada, consulte [Consultar dados com consultas federadas no Amazon Redshift](federated-overview.md).

## Sintaxe
<a name="mv_CREATE_MATERIALIZED_VIEW-synopsis"></a>

```
CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]
[ AUTO REFRESH { YES | NO } ]
AS query
```

## Parâmetros
<a name="mv_CREATE_MATERIALIZED_VIEW-parameters"></a>

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\$1attributes*   
Uma cláusula que especifica como os dados na visão materializada são distribuídos, incluindo o seguinte:  
+  O estilo de distribuição da visã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](c_choosing_dist_sort.md).
+ O código de distribuição da visão materializada, no formato `DISTKEY ( distkey_identifier )`. Para obter mais informações, consulte [Designação de estilos de distribuição](t_designating_distribution_styles.md).
+ A chave de classificação para a visão materializada, no formato `SORTKEY ( column_name [, ...] )`. Para obter mais informações, consulte [Chaves de classificação](t_Sorting_data.md).

AS *query*  
Uma instrução `SELECT` válida que define a visão materializada e seu conteúdo. O conjunto de resultados da consulta define as colunas e as linhas da visão materializada. Para obter informações sobre limitações ao criar visões materializadas, consulte [Limitações](#mv_CREATE_MATERIALIZED_VIEW-limitations).  
Além disso, os constructos de linguagem SQL específicos usados na consulta determinam se a visã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](materialized-view-refresh-sql-command.md). Para obter informações sobre as limitações da atualização incremental, consulte [Limitações para atualização incremental](materialized-view-refresh-sql-command.md#mv_REFRESH_MARTERIALIZED_VIEW_limitations).  
Se a consulta contiver um comando SQL incompatível com a atualização incremental, o Amazon Redshift exibirá uma mensagem indicando que a visã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\$1MV\$1INFO](r_STV_MV_INFO.md) para ver o tipo de atualização usado por uma visão materializada.

AUTO REFRESH  
Uma cláusula que define se a visã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 visualização materializada](materialized-view-refresh.md).

## Observações de uso
<a name="mv_CREATE_MARTERIALIZED_VIEW_usage"></a>

Para criar uma visã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.

 É possível criar uma visão materializada em um cluster remoto de unidade de compartilhamento de dados fornecendo o nome do banco de dados externo no `mv_name`. 

## Atualização incremental para visões materializadas em uma unidade de compartilhamento de dados
<a name="mv_CREATE_MARTERIALIZED_VIEW_datashare"></a>

 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](https://docs.aws.amazon.com/redshift/latest/dg/datashare-views), que contém vários exemplos de consulta.

## Atualizações em DDL para visões materializadas ou tabelas base
<a name="materialized-view-ddl"></a>

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 visã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 visão materializada. 
+ Em geral, não é possível alterar a definição de uma visão materializada (instrução SQL desta).
+ Não é possível renomear uma visão materializada. 

## Limitações
<a name="mv_CREATE_MATERIALIZED_VIEW-limitations"></a>

Você não pode definir uma visã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 visão materializada devem existir e serem válidas. 
+ Funções somente de nó líder: CURRENT\$1SCHEMA, CURRENT\$1SCHEMAS, HAS\$1DATABASE\$1PRIVILEGE, HAS\$1SCHEMA\$1PRIVILEGE, HAS\$1TABLE\$1PRIVILEGE.
+ Você não pode usar a opção AUTO REFRESH YES quando a definição de visã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 visão materializada.
+ Não é necessário executar manualmente o [ANALYZE](r_ANALYZE.md) com visões materializadas. Atualmente, isso acontece apenas via AUTO ANALYZE. Para obter mais informações, consulte [Análise de tabelas](t_Analyzing_tables.md).
+ Tabelas protegidas por RLS ou DDM. 
+ As visões materializadas criadas em clusters remotos de unidades de compartilhamento de dados não são compatíveis com referências em outras visões materializadas, tabelas do Spectrum, tabelas definidas em um cluster diferente do Redshift e UDFs. Isso é possível quando as visões materializadas são criadas no cluster local (produtor). 

## Exemplos
<a name="mv_CREATE_MARTERIALIZED_VIEW_examples"></a>

O exemplo a seguir cria uma visã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 visão materializada tickets\$1mv, os dados pré-calculados da visão materializada tickets\$1mv 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 visã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 visão materializada `mv_sales_vw`. Para obter informações sobre o comando CREATE EXTERNAL TABLE para Amazon Redshift Spectrum, consulte [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). 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 visão materializada `mv_fq` com base em uma tabela externa de consulta federada. Para obter informações sobre consulta federada, consulte [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).

```
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 visã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\$1baseball. Para verificar se a opção AUTO REFRESH está ativada para uma visão materializada, consulte [STV\$1MV\$1INFO](r_STV_MV_INFO.md).

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\$1A, está no mesmo cluster ou grupo de trabalho da visão materializada, que é criada em database\$1B. (Você pode usar seus próprios bancos de dados no exemplo.) Primeiro, crie uma tabela em database\$1A 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\$1B 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\$1A:

```
select * from cities_mv;
```

Quando você executa a instrução SELECT, *cities\$1mv* 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](materialized-view-refresh-sql-command.md).

Para obter detalhes sobre a visão geral da visão materializada e os comandos SQL usados para atualizar e descartar visões materializadas, consulte os seguintes tópicos:
+ [Visões materializadas no Amazon Redshift](materialized-view-overview.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)