sql_trigger_value

Nutzung

view: my_view {
  derived_table: {
    sql_trigger_value: SELECT CURDATE() ;;
    ...
  }
}
Hierarchie
sql_trigger_value
Standardwert
Keine

Akzeptiert
Eine SQL-Anweisung, die eine Zeile und eine Spalte ergibt

Definition

Verwenden Sie stattdessen eine datagroup und einen datagroup_trigger, die auf der Dokumentationsseite Caching von Abfragen beschrieben werden.

sql_trigger_value ermöglicht Ihnen die Neugenerierung einer persistenten abgeleiteten Tabelle basierend auf einer von Ihnen angegebenen SQL-Anweisung. Wenn das Ergebnis der SQL-Anweisung sich vom vorherigen Wert unterscheidet, wird die PDT neu generiert.

Der Parameter sql_trigger_value berücksichtigt nur die erste Zeile und Spalte in der von Ihnen geschriebenen SQL-Anweisung. Daher empfehlen wir dringend, dass Sie Ihre Abfrage so schreiben, dass nur ein Wert zurückgegeben wird (eine Zeile und eine Spalte). So werden Verwirrungen für zukünftige Entwickler vermieden und verhindert, dass nicht streamende SQL-Dialekte große Ergebnismengen in den Arbeitsspeicher laden.

Standardmäßig führt Looker alle fünf Minuten die von Ihnen geschriebene SQL-Abfrage aus, sofern keine andere persistente abgeleitete Tabelle erstellt wird. Wenn sich die Ergebnisse der SQL-Abfrage ändern, generiert Looker die abgeleitete Tabelle neu. Sie können diesen Zeitplan nach Bedarf ändern. Verwenden Sie dazu in den Administratoreinstellungen von Looker die Einstellung Wartungszeitplan für PDTs und Datengruppen.

Angenommen, Sie verwenden MySQL und Folgendes:

    sql_trigger_value: SELECT CURDATE() ;;

Die Ergebnisse sehen so aus:

sql_trigger_value-Laufzeit sql_trigger_value-Ergebnis
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

Der Wert dieser SQL-Abfrage ändert sich einmal täglich um Mitternacht. Die abgeleitete Tabelle wird also zu diesen Zeiten neu generiert.

Looker führt keine Zeitzonenumwandlung für sql_trigger_value durch. Wenn Sie sql_trigger_value verwenden, um eine PDT-Neuerstellung um Mitternacht oder zu einer bestimmten Tageszeit auszulösen, erfolgt der Trigger in der Zeitzone, für die Ihre Datenbank konfiguriert ist.

Wenn Ihr Administrator Ihnen die develop Berechtigung gewährt hat, können Sie die Neuerstellung einer abgeleiteten Tabelle erzwingen, bevor sich die sql_trigger_value Abfrage geändert hat. Wählen Sie nach dem Ausführen einer Abfrage im Zahnradmenü Explore-Aktionen die Option Abgeleitete Tabellen neu erstellen und ausführen aus.

Weitere Informationen zur Option Abgeleitete Tabellen neu erstellen und ausführen finden Sie auf der Dokumentationsseite Abgeleitete Tabellen in Looker.

Beispiele

Eine PDT in MySQL erstellen, die einmal täglich um Mitternacht neu erstellt wird:

view: clean_events {
  derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
    sql_trigger_value: SELECT CURDATE() ;;
  }
}

In den folgenden Abschnitten wird die SQL-Anweisung für verschiedene PDT-Neuerstellungsstrategien in verschiedenen Dialekten gezeigt:

Google BigQuery

Gewünschter Zeitplan für die Neuerstellung Zu verwendende SQL-Anweisung
Einmal täglich um Mitternacht (Pacific Time)
SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles')
Einmal täglich zu einer bestimmten Stunde
SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Stunde des Tages, zu der die Neuerstellung erfolgen soll.
Zweimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Dreimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“, „9“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Stündlich
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
Alle zwei Stunden
SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60))

Sie können die „2“ durch die Anzahl der Stunden ersetzen, die zwischen den einzelnen Neuerstellungen liegen sollen.
Daten nie aktualisieren
SELECT 1

MySQL

Gewünschter Zeitplan für die Neuerstellung Zu verwendende SQL-Anweisung
Einmal täglich um Mitternacht
SELECT CURDATE()
Einmal täglich zu einer bestimmten Stunde (koordinierte Weltzeit, UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Stunde des Tages, zu der die Neuerstellung erfolgen soll.
Zweimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Dreimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“, „9“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT HOUR(CURTIME())
Alle zwei Stunden (koordinierte Weltzeit, UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))

Sie können die „2“ durch die Anzahl der Stunden ersetzen, die zwischen den einzelnen Neuerstellungen liegen sollen.
Daten nie aktualisieren
SELECT 1

Amazon Redshift

Gewünschter Zeitplan für die Neuerstellung Zu verwendende SQL-Anweisung
Einmal täglich um Mitternacht
SELECT CURRENT_DATE
Einmal täglich zu einer bestimmten Stunde
SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Stunde des Tages, zu der die Neuerstellung erfolgen soll.
Zweimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Dreimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“, „9“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT DATE_PART('hour', GETDATE())
Alle zwei Stunden
SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60))

Sie können die „2“ durch die Anzahl der Stunden ersetzen, die zwischen den einzelnen Neuerstellungen liegen sollen.
Daten nie aktualisieren
SELECT 1

PostgreSQL

Gewünschter Zeitplan für die Neuerstellung Zu verwendende SQL-Anweisung
Einmal täglich um Mitternacht
SELECT CURRENT_DATE
Einmal täglich zu einer bestimmten Stunde
SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Stunde des Tages, zu der die Neuerstellung erfolgen soll.
Zweimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Dreimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“, „9“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT DATE_PART('hour', NOW())
Alle zwei Stunden
SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))

Sie können die „2“ durch die Anzahl der Stunden ersetzen, die zwischen den einzelnen Neuerstellungen liegen sollen.
Daten nie aktualisieren
SELECT 1

Snowflake

Gewünschter Zeitplan für die Neuerstellung Zu verwendende SQL-Anweisung
Einmal täglich um Mitternacht
SELECT CURRENT_DATE()
Einmal täglich zu einer bestimmten Stunde (koordinierte Weltzeit, UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Stunde des Tages, zu der die Neuerstellung erfolgen soll.
Zweimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Dreimal täglich zu bestimmten Stunden
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

Ersetzen Sie „4“, „9“ und „18“ durch die Stunden des Tages, zu denen die Neuerstellung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT HOUR(CURRENT_TIME())
Alle zwei Stunden (koordinierte Weltzeit, UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))

Sie können die „2“ durch die Anzahl der Stunden ersetzen, die zwischen den einzelnen Neuerstellungen liegen sollen.
Daten nie aktualisieren
SELECT 1

Häufige Herausforderungen

Für sql_trigger_value müssen persistente abgeleitete Tabellen eingerichtet sein

Wenn Sie sql_trigger_value verwenden, werden LookML-Validierungsfehler verursacht, es sei denn, Sie haben die Persistenz für abgeleitete Tabellen aktiviert in den Einstellungen für die Datenbankverbindung. Die meisten Kunden richten persistente abgeleitete Tabellen ein, wenn sie eine Datenbankverbindung zum ersten Mal konfigurieren. Die häufigste Ausnahme von dieser Regel sind Kunden, die Looker mit einer schreibgeschützten, Hot-Swap-fähigen sekundären PostgreSQL-Datenbank verbinden.

sql_trigger_value funktioniert im Entwicklungsmodus und im Produktionsmodus unterschiedlich

sql_trigger_value sollte im Produktionsmodus wie erwartet funktionieren. Im Entwicklungsmodus werden alle abgeleiteten Tabellen so behandelt, als ob persist_for: 24 hours verwendet wurde, unabhängig von der von Ihnen implementierten Einstellung. Weitere Informationen finden Sie im Abschnitt Persistente Tabellen im Entwicklungsmodus auf der Dokumentationsseite Abgeleitete Tabellen in Looker.