Nutzung
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Hierarchie
sql_trigger_value |
Standardwert
KeineAkzeptiert
Eine SQL-Anweisung, die zu einer Zeile und einer Spalte führt
|
Definition
Verwenden Sie stattdessen
datagroup
unddatagroup_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 Siesql_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.