Utilizzo
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Gerarchia
sql_trigger_value |
Valore predefinito
NessunaAccetta
Un'istruzione SQL che genera una riga e una colonna
|
Definizione
Valuta invece la possibilità di utilizzare una risorsa
datagroup
edatagroup_trigger
, descritta nella pagina della documentazione Memorizzazione nella cache delle query e ricreazione delle PDT con i gruppi di dati.
sql_trigger_value
ti consente di attivare la rigenerazione di una tabella derivata permanente in base a un'istruzione SQL da te fornita. Se il risultato dell'istruzione SQL è diverso dal valore precedente, la PDT viene rigenerata.
Il parametro sql_trigger_value
prende in considerazione solo la prima riga e la prima colonna dell'SQL che scrivi. Ti consigliamo quindi di scrivere una query in modo che restituisca un solo valore (una riga e una colonna). Ciò rimuove qualsiasi confusione per i futuri sviluppatori e impedisce ai dialetti SQL non di streaming di caricare grandi set di risultati in memoria.
Per impostazione predefinita, ogni cinque minuti Looker esegue la query SQL che scrivi, purché un'altra tabella derivata permanente non sia in fase di creazione. Se i risultati della query SQL cambiano, Looker rigenera la tabella derivata. Puoi modificare questa programmazione come preferisci utilizzando l'impostazione PDT And Datagroup Maintenance Schedule (Pianificazione manutenzione PDT e gruppi di dati) nelle impostazioni amministrative di Looker.
Ad esempio, supponiamo che tu utilizzassi MySQL e avessi usato:
sql_trigger_value: SELECT CURDATE() ;;
Ecco i risultati:
Tempo di esecuzione sql_trigger_value | Risultato sql_trigger_value |
---|---|
01-01-2015 00:00 | 2015-01-01 |
01-01-2015 00:05 | 2015-01-01 |
01-01-2015 00:10 | 2015-01-01 |
… | … |
2015-01-01 23:55 | 2015-01-01 |
02-01-2015 00:00 | 2015-01-02 |
02-01-2015 00:05 | 2015-01-02 |
Puoi vedere 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_value
per attivare una ricostruzione delle PDT a mezzanotte o a una determinata ora del giorno, l'attivatore si verifica 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 sua query sql_trigger_value
venga modificata. Seleziona l'opzione Rebuild Derived Tables & Run (Ricostruisci tabelle derivate ed esegui) dal menu a discesa Esplora dell'ingranaggio, che trovi in alto a destra sullo schermo dopo aver eseguito una query:
Per ulteriori dettagli sull'opzione Rebuild Derived Tables & Run (Riesegui tabelle derivate ed esecuzione), consulta la pagina della documentazione Tabelle derivate in Looker.
Esempi
Crea una PDT su MySQL che viene ricreata 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() ;;
}
}
Le seguenti sezioni mostrano l'SQL da utilizzare per varie strategie di ricostruzione delle PDT su diversi dialetti:
Google BigQuery
Pianificazione di rigenerazione preferita | SQL da utilizzare |
---|---|
Una volta al giorno a mezzanotte, 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)) Sostituisci i "3" con l'ora del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4, 9 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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)) Puoi sostituire "2" con il numero di ore che vuoi tra ogni rigenerazione |
Non aggiornare mai i dati | SELECT 1 |
MySQL
Pianificazione di rigenerazione preferita | SQL da utilizzare |
---|---|
Una volta al giorno a mezzanotte | SELECT CURDATE() |
Una volta al giorno per un'ora specifica , il fuso orario UTC (Coordinated Universal Time) |
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) Sostituisci i "3" con l'ora del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4, 9 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
Quando viene aggiornata una determinata tabella | SELECT COUNT(*) FROM table |
Ogni ora | SELECT HOUR(CURTIME()) |
Ogni 2 ore Ora universale coordinato (UTC) |
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) Puoi sostituire "2" con il numero di ore che vuoi tra ogni rigenerazione |
Non aggiornare mai i dati | SELECT 1 |
Amazon Redshift
Pianificazione di rigenerazione preferita | 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)) Sostituisci i "3" con l'ora del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4, 9 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
Quando viene aggiornata una determinata tabella | SELECT COUNT(*) FROM table |
Ogni ora | SELECT DATE_PART('hour', GETDATE()) |
Ogni 2 ore | SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60)) Puoi sostituire "2" con il numero di ore che vuoi tra ogni rigenerazione |
Non aggiornare mai i dati | SELECT 1 |
PostgreSQL
Pianificazione di rigenerazione preferita | 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)) Sostituisci i "3" con l'ora del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4, 9 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
Quando viene aggiornata una determinata tabella | SELECT COUNT(*) FROM table |
Ogni ora | SELECT DATE_PART('hour', NOW()) |
Ogni 2 ore | SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60)) Puoi sostituire "2" con il numero di ore che vuoi tra ogni rigenerazione |
Non aggiornare mai i dati | SELECT 1 |
Snowflake
Pianificazione di rigenerazione preferita | SQL da utilizzare |
---|---|
Una volta al giorno a mezzanotte | SELECT CURRENT_DATE() |
Una volta al giorno per un'ora specifica , il fuso orario UTC (Coordinated Universal Time) |
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) Sostituisci i "3" con l'ora del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
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 Sostituisci 4, 9 e 18 con le ore del giorno in cui vuoi che venga eseguita la rigenerazione |
Quando viene aggiornata una determinata tabella | SELECT COUNT(*) FROM table |
Ogni ora | SELECT HOUR(CURRENT_TIME()) |
Ogni 2 ore Ora universale coordinato (UTC) |
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) Puoi sostituire "2" con il numero di ore che vuoi tra ogni rigenerazione |
Non aggiornare mai i dati | SELECT 1 |
Sfide comuni
sql_trigger_value
richiede che tu abbia configurato tabelle derivate permanenti
L'utilizzo di sql_trigger_value
causerà errori di convalida di LookML, a meno che tu non abbia attivato la persistenza per le tabelle derivate nelle impostazioni di connessione del database. La maggior parte dei clienti configura le tabelle derivate permanenti quando inizialmente configura una connessione al database. L'eccezione più comune a questa regola è per i clienti che eseguono il collegamento di Looker a un indirizzo secondario di scambio di sola lettura PostgreSQL.
sql_trigger_value
funziona in modo diverso tra la modalità di sviluppo e la modalità di produzione
sql_trigger_value
dovrebbe funzionare come previsto in modalità di produzione. In modalità sviluppatore, 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 permanenti in modalità sviluppo della pagina della documentazione Tabelle derivate in Looker.