Utilizzo
view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
|
Gerarchia
sql_trigger_value |
Valore predefinito
Nessuno
Accetta
Un'istruzione SQL che restituisce una riga e una colonna
|
Definizione
Ti consigliamo di utilizzare invece un
datagroupe undatagroup_trigger, descritti nella pagina della documentazione Memorizzazione nella cache delle query.
sql_trigger_value ti consente di attivare la rigenerazione di una tabella derivata permanente in base a un'istruzione SQL che fornisci. Se il risultato dell'istruzione SQL è diverso dal valore precedente, la tabella derivata permanente viene rigenerata.
Il parametro sql_trigger_value prenderà in considerazione solo la prima riga e la prima colonna dell'SQL che scrivi. Pertanto, ti consigliamo vivamente di scrivere la query in modo che restituisca un solo valore (una riga e una colonna). In questo modo, si evita qualsiasi confusione per gli sviluppatori futuri e si impedisce ai dialetti SQL non di streaming di caricare set di risultati di grandi dimensioni in memoria.
Per impostazione predefinita, ogni cinque minuti Looker esegue la query SQL che scrivi, a condizione che non sia in corso la creazione di un'altra tabella derivata permanente. Se i risultati della query SQL cambiano, Looker rigenererà la tabella derivata. Puoi modificare questa pianificazione in base alle esigenze utilizzando l'impostazione PDT And Datagroup Maintenance Schedule (Pianificazione della manutenzione di tabelle derivate permanenti e gruppi di dati) nelle impostazioni di amministrazione di Looker.
Ad esempio, supponiamo di aver eseguito MySQL e di aver utilizzato:
sql_trigger_value: SELECT CURDATE() ;;
I risultati saranno simili a:
| sql_trigger_value Run Time | sql_trigger_value Result |
|---|---|
| 2015-01-01 00:00 | 2015-01-01 |
| 2015-01-01 00:05 | 2015-01-01 |
| 2015-01-01 00:10 | 2015-01-01 |
| … | … |
| 2015-01-01 23:55 | 2015-01-01 |
| 2015-01-02 00:00 | 2015-01-02 |
| 2015-01-02 00:05 | 2015-01-02 |
Puoi notare che il valore di questa query SQL cambierà una volta al giorno a mezzanotte, quindi la tabella derivata verrà rigenerata in questi orari.
Looker non esegue la conversione del fuso orario per
sql_trigger_value. Quando utilizzisql_trigger_valueper attivare una ricostruzione della tabella derivata permanente a mezzanotte o a un'ora specifica del giorno, l'attivazione avverrà nel fuso orario configurato per il tuo database.
Se l'amministratore ti ha concesso l'autorizzazione develop, puoi forzare la rigenerazione di una tabella derivata prima che la query sql_trigger_value sia cambiata. Seleziona l'opzione Rebuild Derived Tables &Run (Ricostruisci tabelle derivate ed esegui) dal menu a forma di ingranaggio Explore actions (Azioni di Esplora) dopo aver eseguito una query.
Per ulteriori dettagli sull'opzione Rebuild Derived Tables & Run (Ricostruisci tabelle derivate ed esegui), consulta la pagina della documentazione dedicata alle tabelle derivate in Looker.
Esempi
Crea una tabella derivata permanente in MySQL che viene ricostruita una volta al giorno a mezzanotte:
view: clean_events {
derived_table: {
sql:
SELECT *
FROM events
WHERE type NOT IN ('test', 'staff') ;;
sql_trigger_value: SELECT CURDATE() ;;
}
}
Nelle sezioni seguenti viene illustrato l'SQL da utilizzare per varie strategie di ricostruzione delle tabelle derivate permanenti in diversi dialetti:
Google BigQuery
| Pianificazione di rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno a mezzanotte del fuso orario del Pacifico | SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles') |
| Una volta al giorno a un'ora specifica | SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24)) |
| Due volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Tre volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Ogni ora | SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP()) |
| Ogni 2 ore | SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
MySQL
| Pianificazione di rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno a mezzanotte | SELECT CURDATE() |
| Una volta al giorno a un'ora specifica del fuso orario UTC (Tempo Coordinato Universale) | SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) |
| Due volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Tre volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Quando viene aggiornata una tabella specifica | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT HOUR(CURTIME()) |
| Ogni 2 ore del fuso orario UTC (Tempo Coordinato Universale) | SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
Amazon Redshift
| Pianificazione di rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno a mezzanotte | SELECT CURRENT_DATE |
| Una volta al giorno a un'ora specifica | SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24)) |
| Due volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Tre volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Quando viene aggiornata una tabella specifica | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT DATE_PART('hour', GETDATE()) |
| Ogni 2 ore | SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
PostgreSQL
| Pianificazione di rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno a mezzanotte | SELECT CURRENT_DATE |
| Una volta al giorno a un'ora specifica | SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24)) |
| Due volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Tre volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Quando viene aggiornata una tabella specifica | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT DATE_PART('hour', NOW()) |
| Ogni 2 ore | SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
Snowflake
| Pianificazione di rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno a mezzanotte | SELECT CURRENT_DATE() |
| Una volta al giorno a un'ora specifica del fuso orario UTC (Tempo Coordinato Universale) | SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) |
| Due volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Tre volte al giorno a orari specifici | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| Quando viene aggiornata una tabella specifica | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT HOUR(CURRENT_TIME()) |
| Ogni 2 ore del fuso orario UTC (Tempo Coordinato Universale) | SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
Sfide comuni
sql_trigger_value richiede la configurazione di tabelle derivate permanenti
L'utilizzo di sql_trigger_value causerà errori di convalida LookML a meno che tu non abbia abilitato la persistenza per le tabelle derivate nelle impostazioni di connessione al database. La maggior parte dei clienti configura le tabelle derivate permanenti quando configura inizialmente una connessione al database. L'eccezione più comune a questa regola riguarda i clienti che collegano Looker a un database secondario PostgreSQL di sola lettura e hot-swap.
sql_trigger_value funziona in modo diverso in modalità di sviluppo e in modalità di produzione
sql_trigger_value dovrebbe funzionare come previsto in modalità di produzione. In modalità di sviluppo, tutte le tabelle derivate vengono trattate come se fosse stato utilizzato persist_for: 24 hours, indipendentemente dall'impostazione implementata. Per ulteriori informazioni, consulta la sezione Tabelle persistenti in modalità di sviluppo della pagina della documentazione dedicata alle tabelle derivate in Looker.