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 TABLEper 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 autorizzazioniCREATE VIEWper 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 comeCan 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 comeCan use stable views in temp schema "docsexamples_scratch" in database "flightstats".
- Se i PDT sono abilitati nella connessione e la connessione dispone dell'autorizzazione
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: yesha anche un parametro datagroup,sql_trigger_valueopersist_for, l'istruzionematerialized_view: yesavrà 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_fornella definizione di una tabella derivata conmaterialized_view: yes. Per le viste materializzate, la tabella di origine di una vista materializzata deve essere sempre presente nel database. Le tabelle derivatepersist_forvengono eliminate dal database dopo il periodo di tempo specificato nel parametropersist_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.
- Non puoi utilizzare una tabella derivata con la strategia di persistenza
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 |