materialized_view

Utilizzo

view: my_view {
  derived_table: {
    materialized_view: yes
    ...
  }
}
Gerarchia
materialized_view
Valore predefinito
no

Accetta
Un valore booleano (yes o no)

Regole speciali
materialized_view è supportato solo in dialetti specifici

Definizione

La funzionalità di vista materializzata è una funzionalità avanzata. A seconda del dialetto, una vista materializzata può consumare molte risorse, quindi è importante comprendere l'implementazione delle viste materializzate del dialetto. Consulta la documentazione del tuo dialetto per informazioni sul suo comportamento e sulla frequenza con cui aggiorna i dati per le viste materializzate.

Le viste materializzate ti consentono di sfruttare la funzionalità del database per rendere persistenti le tabelle derivate nel progetto Looker. Se il dialetto del database supporta le viste materializzate e la connessione Looker è configurata con l'opzione Tabelle derivate permanenti abilitata, puoi creare una vista materializzata specificando materialized_view: yes per una tabella derivata. Le viste materializzate sono supportate sia per le tabelle derivate native sia per le tabelle derivate basate su SQL.

Analogamente a una tabella derivata permanente (PDT), una vista materializzata è un risultato di query archiviato come tabella nello schema temporaneo del database. La differenza principale tra una tabella derivata persistente e una vista materializzata è il modo in cui vengono aggiornate le tabelle:

  • Per le PDT, la strategia di persistenza è definita in Looker e la persistenza è gestita da Looker.
  • Per le viste materializzate, il database è responsabile della manutenzione e dell'aggiornamento dei dati nella tabella.

Per questo motivo, la funzionalità di vista materializzata richiede una conoscenza avanzata del dialetto e delle sue funzionalità. Nella maggior parte dei casi, il database aggiorna la vista materializzata ogni volta che rileva nuovi dati nelle tabelle su cui viene eseguita una query dalla vista materializzata. Le viste materializzate sono ottimali per gli scenari che richiedono dati in tempo reale.

Se una tabella derivata con un'istruzione materialized_view: yes ha anche un parametro datagroup, sql_trigger_value o persist_for, l'istruzione materialized_view: yes avrà la precedenza.

Esempio

Questa tabella derivata e_flights_pdt ha l'istruzione materialized_view: yes, quindi viene creata una vista materializzata nello schema temporaneo del database:


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 Looker crea la vista materializzata

Looker genera le viste materializzate nello stesso modo delle altre PDT. Se crei la vista materializzata ed esegui query in modalità di sviluppo, Looker creerà una versione di sviluppo della vista materializzata, che può essere utilizzata anche per la produzione. Per ulteriori dettagli, consulta la sezione Tabelle persistenti in modalità di sviluppo nella pagina della documentazione Tabelle derivate in Looker.

In caso contrario, la vista materializzata viene creata durante il ciclo successivo del generatore di Looker, dopo che il codice LookML della tabella derivata associata è stato implementato in produzione con materialized_view: yes.

Viste di database stabili per le viste materializzate

Looker crea automaticamente una vista stabile del database per ogni vista materializzata. La visualizzazione stabile del database viene creata nel database stesso, in modo che possa essere interrogata al di fuori di Looker. Si tratta della stessa funzionalità di visualizzazione stabile utilizzata con il parametro publish_as_db_view.

Looker crea la visualizzazione stabile durante il ciclo successivo del rigeneratore di Looker, dopo che il LookML della vista materializzata viene implementato in produzione. Una volta pubblicata la visualizzazione stabile del database, puoi eseguire query direttamente.

Gli amministratori o gli utenti con l'autorizzazione see_pdts possono ottenere il nome della visualizzazione del database stabile dalla finestra modale Dettagli PDT nella pagina Persistent Derived Tables (Tabelle derivate persistenti) della sezione Amministrazione di Looker.

Per eseguire una query su una vista materializzata direttamente, aggiungi il nome dello schema di scratch prima del nome della tabella. Ad esempio, se il nome della vista del database stabile è NN_e_redflight_e_redflight_publish_as_db e il nome dello schema temporaneo è tmp, puoi eseguire una query sulla vista del database stabile con un comando simile a questo:


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

Requisiti per le viste materializzate

Per utilizzare le viste materializzate nel tuo progetto Looker, devi disporre di quanto segue:

  • Un dialetto del database che supporta le viste materializzate. Consulta la sezione Supporto dei dialetti per le viste materializzate in questa pagina per l'elenco dei dialetti che supportano le viste materializzate.
  • Uno schema temporaneo sul database. Può essere qualsiasi schema del tuo database, ma ti consigliamo di crearne uno nuovo da utilizzare solo a questo scopo. L'amministratore del database deve configurare lo schema con l'autorizzazione di scrittura per l'utente del database Looker.
  • Una connessione Looker configurata con l'opzione Tabelle derivate permanenti abilitata. Questa impostazione viene in genere configurata durante la configurazione iniziale della connessione Looker (consulta la pagina di documentazione Dialetti di Looker per istruzioni sul dialetto del tuo database), ma puoi anche abilitare le PDT per la connessione dopo la configurazione iniziale.
  • Una connessione Looker con l'autorizzazione CREATE TABLE per lo schema temporaneo sul tuo database. Si tratta della stessa autorizzazione necessaria per creare PDT. Inoltre, per creare la visualizzazione stabile del database per la vista materializzata, la connessione deve disporre delle autorizzazioni CREATE VIEW per lo schema temporaneo sul database. Puoi testare la connessione per verificare che disponga delle seguenti autorizzazioni:
    • Se i PDT sono abilitati nella connessione e la connessione dispone dell'autorizzazione CREATE TABLE, il test di connessione restituirà un risultato come Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db".
    • Se la connessione consente visualizzazioni stabili e dispone dell'autorizzazione CREATE VIEW, il test di connessione restituirà un risultato come Can use stable views in temp schema "docsexamples_scratch" in database "flightstats".

Considerazioni importanti per le viste materializzate

Con le viste materializzate, Looker non gestisce e aggiorna i dati nella tabella. Per questo motivo, la funzionalità di vista materializzata richiede una conoscenza avanzata del dialetto e delle sue funzionalità. Ecco alcuni aspetti da considerare quando crei una vista materializzata:

  • Alcuni dialetti presentano limitazioni per le viste materializzate, ad esempio intervalli di aggiornamento massimi predefiniti e supporto per i join. Looker non genera errori LookML relativi alla funzionalità specifica del dialetto delle viste materializzate. Looker genererà invece un errore se la vista materializzata non viene creata, come evento nel log eventi PDT o come errore di runtime se provi a eseguire query sulla vista materializzata. Consulta la documentazione del dialetto in merito alle limitazioni per le viste materializzate.
  • Alcuni dialetti verificano la freschezza della query quando vengono interrogate le viste materializzate, il che potrebbe aggiungere un piccolo ritardo all'ottenimento dei risultati della query. Consulta la documentazione del tuo dialetto per verificare se è così.
  • Alcuni dialetti tenteranno di aggiornare la vista materializzata in modo incrementale anziché ricrearla completamente. Per informazioni, consulta la documentazione del dialetto.
  • Se la vista materializzata utilizza una tabella di base eliminata dal database, potresti non essere in grado di eseguire query sulla vista materializzata e le nuove versioni non verranno create.
  • Se una tabella derivata con un'istruzione materialized_view: yes ha anche un parametro datagroup, sql_trigger_value o persist_for, l'istruzione materialized_view: yes avrà la precedenza.
  • Le viste materializzate supportano gli stessi parametri specifici del dialetto supportati dalle tabelle derivate in generale, come partizionamento, chiavi di ordinamento e indici.
  • Nel caso di tabelle derivate a cascata, le viste materializzate possono dipendere dalle PDT di Looker, con le seguenti avvertenze:
    • Non puoi utilizzare una tabella derivata con la strategia di persistenza persist_for nella definizione di una tabella derivata con materialized_view: yes. Per le viste materializzate, la tabella di origine di una vista materializzata deve essere sempre presente nel database. Le tabelle derivate persist_for vengono eliminate dal database dopo il periodo di tempo specificato nel parametro persist_for, pertanto non è garantito che siano presenti nel database.
    • Le PDT vengono ricreate con un nome univoco, quindi se una vista materializzata utilizza una PDT nella sua definizione, la vista materializzata verrà aggiornata in modo da puntare alla nuova versione della PDT ogni volta che viene ricreata. Ciò significa che la vista materializzata verrà essenzialmente ricreata da zero se una dipendenza viene ricreata completamente, il che potrebbe influire sulle prestazioni. In questo caso, un'opzione migliore è fare riferimento a una tabella di base di sola aggiunta o a una PDT incrementale definita utilizzando Looker.

Supporto dei dialetti per le viste materializzate

La possibilità di trasformare una tabella derivata in una vista materializzata dipende dal dialetto del database utilizzato dalla connessione Looker. Nella versione attuale di Looker, i seguenti dialetti supportano le viste materializzate:

Dialetto Supportata?
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