valore_sql_trigger

Utilizzo

view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Gerarchia
sql_trigger_value
Valore predefinito
Nessuna

Accetta
Un'istruzione SQL che genera una riga e una colonna

Definizione

Valuta invece la possibilità di utilizzare una risorsa datagroup e datagroup_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 utilizzi sql_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.