CREATE MATERIALIZED VIEW - Amazon Redshift

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 Consultar dados externos usando o 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 Trabalhar com 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 visualizaçõ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 visualizaçã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 visualizações materializadas ou tabelas base

Ao usar visualizações materializadas no Amazon Redshift, siga estas observações de uso para atualizações em linguagem de definição de dados (DDL) para visualizações materializadas ou tabelas base.

  • É possível adicionar colunas a uma tabela base sem afetar as visualizaçõ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 visualizaçõ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 visualizações materializadas, consulte os seguintes tópicos: