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 su dialetti specifici
|
Definizione
La funzionalità della 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. Per informazioni sul comportamento del dialetto e sulla frequenza con cui il dialetto aggiorna i dati per le viste materializzate, consulta la documentazione del dialetto.
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 PDT e una vista materializzata è il modo in cui le tabelle vengono aggiornate:
- 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à della vista materializzata richiede una conoscenza avanzata del dialetto e delle relative funzionalità. Nella maggior parte dei casi, il database aggiornerà la vista materializzata ogni volta che rileva nuovi dati nelle tabelle su cui viene eseguita la 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 una query in modalità di sviluppo, Looker creerà una versione di sviluppo della vista materializzata, che può essere utilizzata anche per la produzione. Per i dettagli, consulta la sezione Tabelle persistenti in modalità di sviluppo nella pagina della documentazione dedicata alle tabelle derivate in Looker.
In caso contrario, la vista materializzata viene creata durante il ciclo successivo del rigeneratore Looker, dopo che il LookML della tabella derivata associata viene eseguito il deployment in produzione con materialized_view: yes.
Viste di database stabili per le viste materializzate
Looker crea automaticamente una vista di database stabile per ogni vista materializzata. La vista di database stabile viene creata sul database stesso, in modo che possa essere sottoposta a query al di fuori di Looker. Si tratta della stessa funzionalità di visualizzazione stabile utilizzata con il publish_as_db_view parametro.
Looker crea la visualizzazione stabile durante il ciclo successivo del rigeneratore Looker, dopo che il LookML della vista materializzata viene eseguito il deployment in produzione. Una volta pubblicata la vista di database stabile, puoi eseguirne direttamente la query.
Gli amministratori o gli utenti con l'autorizzazione see_pdts possono recuperare il nome della vista di database stabile dalla finestra modale Dettagli PDT nella pagina Tabelle derivate permanenti nella sezione Amministratore di Looker.
Per eseguire una query direttamente su una vista materializzata, aggiungi il nome dello schema temporaneo prima del nome della tabella. Ad esempio, se il nome della vista di database stabile è NN_e_redflight_e_redflight_publish_as_db e il nome dello schema temporaneo è tmp, puoi eseguire una query sulla vista di database stabile con un comando simile al seguente:
SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db
Requisiti per le viste materializzate
Per utilizzare le viste materializzate nel progetto Looker, devi disporre di:
- Un dialetto del database che supporta le viste materializzate. Per un elenco dei dialetti che supportano le viste materializzate, consulta la sezione Supporto del dialetto per le viste materializzate in questa pagina.
- Uno schema temporaneo sul database. Può essere qualsiasi schema del database, ma ti consigliamo di crearne uno nuovo da utilizzare solo per 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 quando configuri inizialmente la connessione Looker (per istruzioni sul dialetto del database, consulta la pagina della documentazione relativa ai dialetti di Looker), ma puoi anche abilitare le PDT per la connessione dopo la configurazione iniziale.
- Una connessione Looker con l'autorizzazione
CREATE TABLEper lo schema temporaneo del database. Si tratta della stessa autorizzazione richiesta per la creazione di PDT. Inoltre, per creare la vista di database stabile per la vista materializzata, la connessione deve disporre delle autorizzazioniCREATE VIEWper lo schema temporaneo del database. Puoi testare la connessione per verificare che disponga di queste autorizzazioni:- Se le PDT sono abilitate nella connessione e la connessione dispone dell'autorizzazione
CREATE TABLE, il test di connessione restituirà un risultato simile aCan use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db". - Se la connessione consente le visualizzazioni stabili e dispone dell'autorizzazione
CREATE VIEW, il test di connessione restituirà un risultato simile aCan use stable views in temp schema "docsexamples_scratch" in database "flightstats".
- Se le PDT sono abilitate nella connessione e la connessione dispone dell'autorizzazione
Considerazioni importanti per le viste materializzate
Con le viste materializzate, Looker non gestisce e non aggiorna i dati nella tabella. Per questo motivo, la funzionalità della vista materializzata richiede una conoscenza avanzata del dialetto e delle relative funzionalità. Ecco alcune cose da considerare quando crei una vista materializzata:
- Alcuni dialetti hanno limitazioni per le viste materializzate, come intervalli di aggiornamento massimi predefiniti e supporto per le unioni. Looker non genera errori LookML relativi alla funzionalità specifica del dialetto delle viste materializzate. Al contrario, Looker genererà un errore se la creazione della vista materializzata non riesce, come evento nel log eventi PDT o come errore di runtime se provi a eseguire una query sulla vista materializzata. Consulta la documentazione del dialetto sulle limitazioni per le viste materializzate.
- Alcuni dialetti verificano l'aggiornamento delle query quando vengono eseguite query sulle viste materializzate, il che potrebbe aggiungere un piccolo ritardo all'ottenimento dei risultati delle query. Consulta la documentazione del dialetto per verificare se è il tuo caso.
- Alcuni dialetti tenteranno di aggiornare la vista materializzata in modo incrementale anziché ricostruirla 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, quindi non è garantito che siano presenti nel database. - Le PDT vengono ricostruite 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 la PDT viene ricostruita. Ciò significa che la vista materializzata verrà ricostruita da zero se una dipendenza viene ricostruita completamente, il che potrebbe influire sulle prestazioni. In questo caso, un'opzione migliore è fare riferimento a una tabella di base di tipo append-only o a una PDT incrementale definita utilizzando Looker.
- Non puoi utilizzare una tabella derivata con la strategia di persistenza
Supporto del dialetto 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 |