Utilizzo
view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
|
Gerarchia
sql_trigger_value |
Valore predefinito
Nessuno
Accetta
Un'istruzione SQL che genera una riga e una colonna
|
Definizione
Valuta la possibilità di utilizzare un
datagroupe undatagroup_trigger, descritti nella pagina di documentazione Memorizzazione nella cache delle query.
sql_trigger_value consente di attivare la rigenerazione di una tabella derivata permanente in base a un'istruzione SQL fornita. Se il risultato dell'istruzione SQL è diverso dal valore precedente, la PDT 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 il caricamento in memoria di set di risultati di grandi dimensioni per i dialetti SQL non in streaming.
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 rigenera la tabella derivata. Puoi modificare questa pianificazione in base alle tue esigenze utilizzando l'impostazione Pianificazione della manutenzione di PDT e datagroup nelle impostazioni di amministrazione di Looker.
Ad esempio, supponiamo che tu stia eseguendo MySQL e abbia utilizzato:
sql_trigger_value: SELECT CURDATE() ;;
I risultati saranno simili a questi:
| Tempo di esecuzione di sql_trigger_value | Risultato sql_trigger_value |
|---|---|
| 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 a questi orari.
Looker non esegue la conversione del fuso orario per
sql_trigger_value. Quando utilizzisql_trigger_valueper attivare una ricompilazione del PDT a mezzanotte o a una determinata ora del giorno, l'attivazione avverrà nel fuso orario per cui è configurato il database.
Se l'amministratore ti ha concesso l'autorizzazione develop, puoi forzare la rigenerazione di una tabella derivata prima che la relativa query sql_trigger_value venga modificata. Seleziona l'opzione Ricostruisci tabelle derivate ed esegui dal menu a forma di ingranaggio Azioni di esplorazione dopo aver eseguito una query.
Per ulteriori dettagli sull'opzione Ricostruisci tabelle derivate ed esegui, 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 sezioni seguenti mostrano l'SQL da utilizzare per varie strategie di ricompilazione delle PDT in dialetti diversi:
Google BigQuery
| Pianificazione della rigenerazione desiderata | SQL da utilizzare |
|---|---|
| Una volta al giorno alla 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 della 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 (Coordinated Universal Time) | 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 determinata tabella | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT HOUR(CURTIME()) |
| Ogni 2 ore UTC (Coordinated Universal Time) | SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) |
| Non aggiornare mai i dati | SELECT 1 |
Amazon Redshift
| Pianificazione della 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 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)) |
| Non aggiornare mai i dati | SELECT 1 |
PostgreSQL
| Pianificazione della 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 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)) |
| Non aggiornare mai i dati | SELECT 1 |
Snowflake
| Pianificazione della 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 (Coordinated Universal Time) | 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 determinata tabella | SELECT COUNT(*) FROM table |
| Ogni ora | SELECT HOUR(CURRENT_TIME()) |
| Ogni 2 ore UTC (Coordinated Universal Time) | 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 di 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 sostituibile a caldo.
sql_trigger_value funziona in modo diverso tra la modalità di sviluppo e la modalità 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à Development (Sviluppo) della pagina della documentazione Tabelle derivate in Looker.