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 genera una riga e una colonna

Definizione

Valuta la possibilità di utilizzare un datagroup e un datagroup_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 utilizzi sql_trigger_value per 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))

Sostituisci "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 che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "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 UTC (Coordinated Universal Time)
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 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))

Sostituisci "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 che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "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 che trascorrano tra una rigenerazione e l'altra
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))

Sostituisci "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 UTC (Coordinated Universal Time)
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 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.