materialized_view

Uso

view: my_view {
  derived_table: {
    materialized_view: yes
    ...
  }
}
Hierarquia
materialized_view
Valor padrão
no

Aceita
Um booleano (yes ou no)

Regras especiais
O materialized_view só está disponível em dialetos específicos

Definição

A funcionalidade de visualização materializada é um recurso avançado. Dependendo do dialeto, uma visualização materializada pode consumir muitos recursos. Por isso, é importante entender a implementação de visualizações materializadas do seu dialeto. Consulte a documentação do seu dialeto para informações sobre o comportamento dele e a frequência com que ele atualiza os dados para visualizações materializadas.

Com as visualizações materializadas, é possível aproveitar a funcionalidade do banco de dados para manter tabelas derivadas no projeto do Looker. Se o dialeto do seu banco de dados aceitar visualizações materializadas e sua conexão do Looker estiver configurada com a opção Tabelas derivadas permanentes ativada, você poderá criar uma visualização materializada especificando materialized_view: yes para uma tabela derivada. As visualizações materializadas são compatíveis com tabelas derivadas nativas e tabelas derivadas baseadas em SQL.

Semelhante a uma tabela derivada persistente (PDT), uma visualização materializada é um resultado de consulta armazenado como uma tabela no esquema inicial do banco de dados. A principal diferença entre uma PDT e uma visualização materializada é como as tabelas são atualizadas:

  • Para TDPs, a estratégia de persistência é definida no Looker, e a persistência é gerenciada pelo Looker.
  • Para visualizações materializadas, o banco de dados é responsável por manter e atualizar os dados na tabela.

Por isso, a funcionalidade de visualização materializada exige conhecimento avançado do seu dialeto e dos recursos dele. Na maioria dos casos, o banco de dados atualiza a visualização materializada sempre que detecta novos dados nas tabelas consultadas por ela. As visualizações materializadas são ideais para cenários que exigem dados em tempo real.

Se uma tabela derivada com uma instrução materialized_view: yes também tiver um datagroup, um sql_trigger_value ou um parâmetro persist_for, a instrução materialized_view: yes terá precedência.

Exemplo

Essa tabela derivada e_flights_pdt tem a instrução materialized_view: yes. Portanto, uma visualização materializada é criada no esquema inicial do banco de dados:


view: e_flights_pdt {
  derived_table: {
    materialized_view: yes
    explore_source: ontime {
      column: flight_num {}
      column: carrier {}
      column: arr_date {}
    }
  }
  dimension: flight_num {}
  dimension: carrier {}
  dimension: arr_date {
    type: date
  }
}

Quando o Looker cria a visualização materializada

O Looker gera visualizações materializadas da mesma forma que outras TDPs. Se você criar e consultar a visualização materializada no modo de desenvolvimento, o Looker vai criar uma versão de desenvolvimento dela, que também pode ser usada para produção. Consulte a seção Tabelas persistentes no modo de desenvolvimento na página de documentação Tabelas derivadas no Looker para mais detalhes.

Caso contrário, a visualização materializada será criada durante o próximo ciclo do regenerador do Looker, depois que a LookML da tabela derivada associada for implantada na produção com materialized_view: yes.

Visualizações de banco de dados estáveis para visualizações materializadas

O Looker cria automaticamente uma visualização de banco de dados estável para cada visualização materializada. A visualização estável do banco de dados é criada no próprio banco de dados para que possa ser consultada fora do Looker. Essa é a mesma funcionalidade de visualização estável usada com o parâmetro publish_as_db_view.

O Looker cria a visualização estável durante o próximo ciclo do regenerador do Looker, depois que a LookML da visualização materializada é implantada na produção. Depois que a visualização estável do banco de dados é publicada, é possível consultá-la diretamente.

Os administradores ou usuários com a permissão see_pdts podem acessar o nome da visualização estável do banco de dados no modal Detalhes da TDP na página "Tabelas derivadas persistentes" da seção Administrador do Looker.

Para consultar uma visualização materializada diretamente, basta adicionar o nome do esquema de rascunho antes do nome da tabela. Por exemplo, se o nome da visualização estável do banco de dados for NN_e_redflight_e_redflight_publish_as_db e o nome do esquema de teste for tmp, você poderá consultar a visualização estável do banco de dados com um comando como este:


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

Requisitos para visualizações materializadas

Para usar visualizações materializadas no seu projeto do Looker, você precisa do seguinte:

  • Um dialeto de banco de dados que oferece suporte a visualizações materializadas. Consulte a seção Suporte a dialetos para visualizações materializadas nesta página para conferir a lista de dialetos que oferecem suporte a visualizações materializadas.
  • Um esquema temporário no seu banco de dados. Pode ser qualquer esquema no seu banco de dados, mas recomendamos criar um novo esquema que será usado apenas para essa finalidade. O administrador do banco de dados precisa configurar o esquema com permissão de gravação para o usuário do banco de dados do Looker.
  • Uma conexão do Looker configurada com a opção Tabelas derivadas persistentes ativada. Isso geralmente é configurado quando você configura inicialmente sua conexão do Looker. Consulte a página de documentação Dialetos do Looker para instruções sobre o dialeto do seu banco de dados. No entanto, também é possível ativar as TDPs para sua conexão após a configuração inicial.
  • Uma conexão do Looker com a permissão CREATE TABLE para o esquema temporário no seu banco de dados. Essa é a mesma permissão necessária para criar PDTs. Além disso, para criar a visualização estável do banco de dados para a visualização materializada, a conexão precisa ter permissões CREATE VIEW para o esquema temporário no banco de dados. Você pode testar a conexão para verificar se ela tem estas permissões:
    • Se as PDTs estiverem ativadas na conexão e ela tiver a permissão CREATE TABLE, o teste de conexão vai retornar um resultado como Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db".
    • Se a conexão permitir visualizações estáveis e tiver a permissão CREATE VIEW, o teste de conexão vai retornar um resultado como Can use stable views in temp schema "docsexamples_scratch" in database "flightstats".

Considerações importantes sobre visualizações materializadas

Com as visualizações materializadas, o Looker não mantém nem atualiza os dados na tabela. Por isso, a funcionalidade de visualização materializada exige conhecimento avançado do seu dialeto e dos recursos dele. Confira algumas considerações ao criar uma visualização materializada:

  • Alguns dialetos têm limitações para visualizações materializadas, como intervalos máximos de atualização padrão e suporte para junções. O Looker não gera erros de LookML sobre a funcionalidade específica do dialeto das visualizações materializadas. Em vez disso, o Looker vai gerar um erro se a visualização materializada não for criada, seja como um evento no registro de eventos de PDT ou como um erro de tempo de execução se você tentar consultar a visualização materializada. Consulte a documentação do seu dialeto sobre limitações para visualizações materializadas.
  • Alguns dialetos verificam a atualização da consulta quando as visualizações materializadas são consultadas, o que pode adicionar um pequeno atraso na obtenção dos resultados. Consulte a documentação do seu dialeto para saber se esse é o caso.
  • Alguns dialetos tentam atualizar a visualização materializada de forma incremental em vez de reconstruí-la completamente. Consulte a documentação do dialeto para mais informações.
  • Se a visualização materializada usar uma tabela base que foi removida do banco de dados, talvez não seja possível consultar a visualização materializada, e novas versões não serão criadas.
  • Se uma tabela derivada com uma instrução materialized_view: yes também tiver um datagroup, um sql_trigger_value ou um parâmetro persist_for, a instrução materialized_view: yes terá precedência.
  • As visualizações materializadas são compatíveis com os mesmos parâmetros específicos do dialeto que são aceitos pelas tabelas derivadas em geral, como particionamento, chaves de classificação e índices.
  • No caso de tabelas derivadas em cascata, as visualizações materializadas podem depender de PDTs do Looker, com as seguintes ressalvas:
    • Não é possível usar uma tabela derivada com a estratégia de persistência persist_for na definição de uma tabela derivada com materialized_view: yes. Para visualizações materializadas, a tabela de origem precisa estar sempre presente no banco de dados. As tabelas derivadas persist_for são descartadas do banco de dados após o período especificado no parâmetro persist_for. Portanto, não há garantia de que elas estejam presentes no banco de dados.
    • As PDTs são recriadas com um nome exclusivo. Portanto, se uma visualização materializada usar uma PDT na definição, ela será atualizada para apontar para a nova versão da PDT sempre que ela for recriada. Isso significa que a visualização materializada será essencialmente reconstruída do zero se uma dependência for totalmente reconstruída, o que pode afetar a performance. Nesse caso, uma opção melhor é referenciar uma tabela de base que seja somente de anexação ou um PDT incremental definido usando o Looker.

Suporte a dialetos para visualizações materializadas

A capacidade de transformar uma tabela derivada em uma visualização materializada depende do dialeto do banco de dados que sua conexão do Looker está usando. Na versão atual do Looker, os seguintes dialetos são compatíveis com visualizações materializadas:

Dialeto Compatível?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica