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 zu einer Zeile und einer Spalte führt

Definition

Verwenden Sie stattdessen datagroup und datagroup_trigger, wie auf der Dokumentationsseite Abfragen im Cache speichern beschrieben.

Mit sql_trigger_value können Sie die Neugenerierung einer persistenten abgeleiteten Tabelle basierend auf einer von Ihnen angegebenen SQL-Anweisung auslösen. Wenn das Ergebnis der SQL-Anweisung sich vom vorherigen Wert unterscheidet, wird die PDT neu generiert.

Beim Parameter sql_trigger_value werden nur die erste Zeile und Spalte des von Ihnen geschriebenen SQL-Codes berücksichtigt. Wir empfehlen daher dringend, Ihre Abfrage so zu schreiben, dass nur ein Wert zurückgegeben wird (eine Zeile und eine Spalte). So werden zukünftige Entwickler nicht verwirrt und nicht streamingfähige SQL-Dialekte werden davor geschützt, große Ergebnismengen in den Arbeitsspeicher zu 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, wird die abgeleitete Tabelle in Looker neu generiert. Sie können diesen Zeitplan bei Bedarf mit der Einstellung PDT And Datagroup Maintenance Schedule in den Looker-Administratoreinstellungen ändern.

Angenommen, Sie haben MySQL ausgeführt und Folgendes verwendet:

    sql_trigger_value: SELECT CURDATE() ;;

Die Ergebnisse würden so aussehen:

Laufzeit von „sql_trigger_value“ 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.

In Looker wird keine Zeitzonenumwandlung für sql_trigger_value durchgeführt. Wenn Sie sql_trigger_value verwenden, um die Neuerstellung einer PDT 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 Berechtigung develop erteilt hat, können Sie erzwingen, dass eine abgeleitete Tabelle neu generiert wird, bevor sich die zugehörige sql_trigger_value-Abfrage ändert. 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

Erstellen Sie einen abgeleiteten Tabellen-PDT in MySQL, der 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 finden Sie den SQL-Code, der für verschiedene Strategien zum Neuerstellen von PDTs in verschiedenen Dialekten verwendet werden kann:

Google BigQuery

Gewünschter Zeitplan für die Überarbeitung Zu verwendendes SQL
Einmal täglich um Mitternacht (UTC -7/-8)
SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles')
Einmal pro Tag 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 Tageszeit, zu der die Regeneration erfolgen soll.
Zweimal täglich zu bestimmten Uhrzeiten
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 Aktualisierung erfolgen soll.
Dreimal täglich zu bestimmten Zeiten
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 Tageszeiten, zu denen die Aktualisierung 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 Regenerierungen liegen sollen.
Daten nie aktualisieren
SELECT 1

MySQL

Gewünschter Zeitplan für die Überarbeitung Zu verwendendes SQL
Einmal täglich um Mitternacht
SELECT CURDATE()
Einmal täglich zu einer bestimmten Uhrzeit (UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Tageszeit, zu der die Regeneration erfolgen soll.
Zweimal täglich zu bestimmten Uhrzeiten
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 Aktualisierung erfolgen soll.
Dreimal täglich zu bestimmten Zeiten
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 Tageszeiten, zu denen die Aktualisierung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT HOUR(CURTIME())
Alle 2 Stunden (UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))

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

Amazon Redshift

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

Ersetzen Sie die „3“ durch die Tageszeit, zu der die Regeneration erfolgen soll.
Zweimal täglich zu bestimmten Uhrzeiten
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 Aktualisierung erfolgen soll.
Dreimal täglich zu bestimmten Zeiten
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 Tageszeiten, zu denen die Aktualisierung 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 Regenerierungen liegen sollen.
Daten nie aktualisieren
SELECT 1

PostgreSQL

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

Ersetzen Sie die „3“ durch die Tageszeit, zu der die Regeneration erfolgen soll.
Zweimal täglich zu bestimmten Uhrzeiten
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 Aktualisierung erfolgen soll.
Dreimal täglich zu bestimmten Zeiten
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 Tageszeiten, zu denen die Aktualisierung 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 Regenerierungen liegen sollen.
Daten nie aktualisieren
SELECT 1

Snowflake

Gewünschter Zeitplan für die Überarbeitung Zu verwendendes SQL
Einmal täglich um Mitternacht
SELECT CURRENT_DATE()
Einmal täglich zu einer bestimmten Uhrzeit (UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

Ersetzen Sie die „3“ durch die Tageszeit, zu der die Regeneration erfolgen soll.
Zweimal täglich zu bestimmten Uhrzeiten
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 Aktualisierung erfolgen soll.
Dreimal täglich zu bestimmten Zeiten
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 Tageszeiten, zu denen die Aktualisierung erfolgen soll.
Wenn eine bestimmte Tabelle aktualisiert wird
SELECT COUNT(*) FROM table
Stündlich
SELECT HOUR(CURRENT_TIME())
Alle 2 Stunden (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 Regenerierungen liegen sollen.
Daten nie aktualisieren
SELECT 1

Häufige Herausforderungen

Für sql_trigger_value müssen Sie persistente abgeleitete Tabellen eingerichtet haben.

Die Verwendung von sql_trigger_value führt zu LookML-Validierungsfehlern, sofern Sie in den Einstellungen für die Datenbankverbindung keine Persistenz für abgeleitete Tabellen aktiviert haben. Die meisten Kunden richten beim Einrichten einer Datenbankverbindung persistente abgeleitete Tabellen ein. Die häufigste Ausnahme von dieser Regel sind Kunden, die Looker mit einem schreibgeschützten PostgreSQL-Sekundärserver mit Hot-Swap-Funktion 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 Entwicklermodus auf der Dokumentationsseite Abgeleitete Tabellen in Looker.