sql_trigger_value (SQL-Triggerwert)

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. Eine Beschreibung dazu finden Sie auf der Dokumentationsseite Caching-Abfragen erstellen und PDTs mit Datengruppen neu erstellen.

Mit sql_trigger_value können Sie die Regeneration einer persistenten abgeleiteten Tabelle auf der Grundlage einer von Ihnen bereitgestellten SQL-Anweisung auslösen. 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 sie nur einen Wert zurückgibt (eine Zeile und eine Spalte). So vermeiden Sie Unklarheiten für zukünftige Entwickler und verhindern, dass SQL-Dialekte ohne Streaming große Ergebnismengen in den Arbeitsspeicher laden.

Standardmäßig führt Looker alle fünf Minuten die von Ihnen geschriebene SQL-Abfrage aus, solange keine weitere persistente abgeleitete Tabelle gerade erstellt wird. Wenn sich die Ergebnisse der SQL-Abfrage ändern, generiert Looker die abgeleitete Tabelle neu. Sie können diesen Zeitplan nach Bedarf mithilfe der Einstellung PDT And Datagroup Maintenance Schedule (PDT- und Datengruppenwartungsplan) in den Administratoreinstellungen von Looker ä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
01.01.2015 00:00 2015-01-01
01.01.2015 00:05 2015-01-01
01.01.2015 00:10 2015-01-01
01.01.2015 23:55 2015-01-01
02.01.2015 00:00 2015-01-02
02.01.2015 00:05 2015-01-02

Sie können sehen, dass sich der Wert dieser SQL-Abfrage einmal täglich um Mitternacht ändert. Daher wird die abgeleitete Tabelle zu diesen Zeiten neu generiert.

Looker führt keine Zeitzonenkonvertierung 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, wird der Trigger in der Zeitzone ausgeführt, für die Ihre Datenbank konfiguriert ist.

Wenn Ihr Administrator Ihnen die Berechtigung develop gewährt hat, können Sie die Neugenerierung einer abgeleiteten Tabelle erzwingen, bevor sich ihre sql_trigger_value-Abfrage geändert hat. Wählen Sie nach dem Ausführen einer Abfrage rechts oben auf dem Bildschirm die Option Abgeleitete Tabellen und Ausführung neu erstellen aus:

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

Beispiele

Erstellen Sie ein PDT in MySQL, das 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 der SQL-Code dargestellt, der für verschiedene Strategien zur Neuerstellung der PDT in verschiedenen Dialekten verwendet werden kann:

Google BigQuery

Gewünschter Zeitplan für Regeneration SQL zu verwenden
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 „3“ durch die Tageszeit, zu der die Regeneration stattfinden soll.
Zweimal pro Tag zu bestimmten Zeiten 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 Tageszeiten, zu denen die Regeneration stattfinden soll.
Dreimal am Tag 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, an denen die Neugenerierung stattfinden 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))
Du kannst die „2“ durch die gewünschte Anzahl von Stunden zwischen den einzelnen Regenerationen ersetzen.
Daten nie aktualisieren SELECT 1

MySQL

Gewünschter Zeitplan für Regeneration SQL zu verwenden
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 „3“ durch die Tageszeit, zu der die Regeneration stattfinden soll.
Zweimal pro Tag zu bestimmten Zeiten 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 Tageszeiten, zu denen die Regeneration stattfinden soll.
Dreimal am Tag 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, an denen die Neugenerierung stattfinden soll.
Wenn eine bestimmte Tabelle aktualisiert wird SELECT COUNT(*) FROM table
Stündlich SELECT HOUR(CURTIME())
Alle 2 Stunden
Koordinierte Weltzeit (UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))
Du kannst die „2“ durch die gewünschte Anzahl von Stunden zwischen den einzelnen Regenerationen ersetzen.
Daten nie aktualisieren SELECT 1

Amazon Redshift

Gewünschter Zeitplan für Regeneration SQL zu verwenden
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 „3“ durch die Tageszeit, zu der die Regeneration stattfinden soll.
Zweimal pro Tag zu bestimmten Zeiten 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 Tageszeiten, zu denen die Regeneration stattfinden soll.
Dreimal am Tag 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, an denen die Neugenerierung stattfinden 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))
Du kannst die „2“ durch die gewünschte Anzahl von Stunden zwischen den einzelnen Regenerationen ersetzen.
Daten nie aktualisieren SELECT 1

PostgreSQL

Gewünschter Zeitplan für Regeneration SQL zu verwenden
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 „3“ durch die Tageszeit, zu der die Regeneration stattfinden soll.
Zweimal pro Tag zu bestimmten Zeiten 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 Tageszeiten, zu denen die Regeneration stattfinden soll.
Dreimal am Tag 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, an denen die Neugenerierung stattfinden 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))
Du kannst die „2“ durch die gewünschte Anzahl von Stunden zwischen den einzelnen Regenerationen ersetzen.
Daten nie aktualisieren SELECT 1

Snowflake

Gewünschter Zeitplan für Regeneration SQL zu verwenden
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 „3“ durch die Tageszeit, zu der die Regeneration stattfinden soll.
Zweimal pro Tag zu bestimmten Zeiten 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 Tageszeiten, zu denen die Regeneration stattfinden soll.
Dreimal am Tag 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, an denen die Neugenerierung stattfinden soll.
Wenn eine bestimmte Tabelle aktualisiert wird SELECT COUNT(*) FROM table
Stündlich SELECT HOUR(CURRENT_TIME())
Alle 2 Stunden
Koordinierte Weltzeit (UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))
Du kannst die „2“ durch die gewünschte Anzahl von Stunden zwischen den einzelnen Regenerationen ersetzen.
Daten nie aktualisieren SELECT 1

Häufige Herausforderungen

sql_trigger_value erfordert, dass Sie persistente abgeleitete Tabellen eingerichtet haben

Die Verwendung von sql_trigger_value führt zu LookML-Validierungsfehlern, es sei denn, Sie haben in den Einstellungen für die Datenbankverbindung die Persistenz für abgeleitete Tabellen aktiviert. Die meisten Kunden richten dauerhaft persistente abgeleitete Tabellen ein, wenn sie eine Datenbankverbindung konfigurieren. Die gängigste Ausnahme von dieser Regel sind Kunden, die Looker mit einem schreibgeschützten PostgreSQL – Hot-Swap-Sekundär 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 sei persist_for: 24 hours verwendet worden, unabhängig davon, welche Einstellung Sie implementiert haben. Weitere Informationen finden Sie im Abschnitt Persistenz Tabellen im Entwicklungsmodus auf der Dokumentationsseite Abgeleitete Tabellen in Looker.