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
datagroupunddatagroup_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_valuedurchgeführt. Wenn Siesql_trigger_valueverwenden, 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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.