sql_trigger_value

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 datagroup e un datagroup_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 utilizzi sql_trigger_value per 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))

Sostituisci "3" con l'ora del giorno in cui vuoi che avvenga 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 avvenga 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 avvenga 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 che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "3" con l'ora del giorno in cui vuoi che avvenga 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 avvenga 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 avvenga la rigenerazione
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))

Puoi sostituire "2" con il numero di ore che vuoi che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "3" con l'ora del giorno in cui vuoi che avvenga 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 avvenga 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 avvenga la rigenerazione
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))

Puoi sostituire "2" con il numero di ore che vuoi che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "3" con l'ora del giorno in cui vuoi che avvenga 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 avvenga 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 avvenga la rigenerazione
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))

Puoi sostituire "2" con il numero di ore che vuoi che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "3" con l'ora del giorno in cui vuoi che avvenga 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 avvenga 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 avvenga la rigenerazione
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))

Puoi sostituire "2" con il numero di ore che vuoi che trascorrano tra una rigenerazione e l'altra
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.