Utilisation
view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
|
Hiérarchie
sql_trigger_value |
Valeur par défaut
Aucun
Acceptation
Instruction SQL qui génère une ligne et une colonne
|
Définition
Envisagez plutôt d'utiliser
datagroupetdatagroup_trigger, décrits sur la page de documentation Mise en cache des requêtes.
sql_trigger_value vous permet de déclencher la régénération d'une table dérivée persistante en fonction d'une instruction SQL que vous fournissez. Si le résultat de l'instruction SQL est différent de la valeur précédente, la table PDT est régénérée.
Le paramètre sql_trigger_value ne prendra en compte que la première ligne et la première colonne du code SQL que vous écrivez. Par conséquent, nous vous recommandons vivement d'écrire votre requête de manière à ce qu'elle ne renvoie qu'une seule valeur (une ligne et une colonne). Cela évite toute confusion pour les futurs développeurs et protège les dialectes SQL non diffusés en flux continu contre le chargement de grands ensembles de résultats en mémoire.
Par défaut, Looker exécute la requête SQL que vous écrivez toutes les cinq minutes, à condition qu'une autre table dérivée persistante ne soit pas en cours de création. Si les résultats de la requête SQL changent, Looker régénère la table dérivée. Vous pouvez modifier ce calendrier selon vos besoins à l'aide du paramètre Calendrier de maintenance PDT et des groupes de données dans les paramètres d'administration de Looker.
Par exemple, supposons que vous exécutiez MySQL et que vous utilisiez :
sql_trigger_value: SELECT CURDATE() ;;
Les résultats ressemblent à ceci :
| Durée d'exécution de sql_trigger_value | Résultat sql_trigger_value |
|---|---|
| 2015-01-01 00:00 | 01-01-2015 |
| 2015-01-01 00:05 | 01-01-2015 |
| 2015-01-01 00:10 | 01-01-2015 |
| … | … |
| 2015-01-01 23:55 | 01-01-2015 |
| 2015-01-02 00:00 | 2015-01-02 |
| 2015-01-02 00:05 | 2015-01-02 |
Vous pouvez constater que la valeur de cette requête SQL change une fois par jour à minuit. La table dérivée sera donc régénérée à ces moments-là.
Looker ne convertit pas le fuseau horaire pour
sql_trigger_value. Lorsque vous utilisezsql_trigger_valuepour déclencher une reconstruction de PDT à minuit ou à une heure spécifique de la journée, le déclencheur se produit dans le fuseau horaire configuré pour votre base de données.
Si votre administrateur vous a accordé l'autorisation develop, vous pouvez forcer la régénération d'une table dérivée avant que sa requête sql_trigger_value ne soit modifiée. Après avoir exécuté une requête, sélectionnez l'option Reconstruire les tables dérivées et exécuter dans le menu en forme de roue dentée Actions sur les explorations.
Pour en savoir plus sur l'option Reconstruire les tables dérivées et exécuter, consultez la page de documentation Tables dérivées dans Looker.
Exemples
Créez une PDT sur MySQL qui se reconstruit une fois par jour à minuit :
view: clean_events {
derived_table: {
sql:
SELECT *
FROM events
WHERE type NOT IN ('test', 'staff') ;;
sql_trigger_value: SELECT CURDATE() ;;
}
}
Les sections suivantes indiquent le code SQL à utiliser pour différentes stratégies de reconstruction des PDT dans différents dialectes :
Google BigQuery
| Calendrier de régénération souhaité | SQL à utiliser |
|---|---|
| Une fois par jour à minuit (heure du Pacifique) | SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles') |
| Une fois par jour à une heure précise | SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24)) |
| Deux fois par jour à des heures spécifiques | 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 |
| Trois fois par jour à des heures spécifiques | 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 |
| Toutes les heures | SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP()) |
| Toutes les 2 heures | SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60)) |
| Ne jamais actualiser les données | SELECT 1 |
MySQL
| Calendrier de régénération souhaité | SQL à utiliser |
|---|---|
| Une fois par jour à minuit | SELECT CURDATE() |
| Une fois par jour à une heure spécifique (temps universel coordonné, UTC) | SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) |
| Deux fois par jour à des heures spécifiques | 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 |
| Trois fois par jour à des heures spécifiques | 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 |
| Lorsqu'une table spécifique est mise à jour | SELECT COUNT(*) FROM table |
| Toutes les heures | SELECT HOUR(CURTIME()) |
| Toutes les deux heures (temps universel coordonné, UTC) | SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) |
| Ne jamais actualiser les données | SELECT 1 |
Amazon Redshift
| Calendrier de régénération souhaité | SQL à utiliser |
|---|---|
| Une fois par jour à minuit | SELECT CURRENT_DATE |
| Une fois par jour à une heure précise | SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24)) |
| Deux fois par jour à des heures spécifiques | 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 |
| Trois fois par jour à des heures spécifiques | 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 |
| Lorsqu'une table spécifique est mise à jour | SELECT COUNT(*) FROM table |
| Toutes les heures | SELECT DATE_PART('hour', GETDATE()) |
| Toutes les 2 heures | SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60)) |
| Ne jamais actualiser les données | SELECT 1 |
PostgreSQL
| Calendrier de régénération souhaité | SQL à utiliser |
|---|---|
| Une fois par jour à minuit | SELECT CURRENT_DATE |
| Une fois par jour à une heure précise | SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24)) |
| Deux fois par jour à des heures spécifiques | 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 |
| Trois fois par jour à des heures spécifiques | 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 |
| Lorsqu'une table spécifique est mise à jour | SELECT COUNT(*) FROM table |
| Toutes les heures | SELECT DATE_PART('hour', NOW()) |
| Toutes les 2 heures | SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60)) |
| Ne jamais actualiser les données | SELECT 1 |
Snowflake
| Calendrier de régénération souhaité | SQL à utiliser |
|---|---|
| Une fois par jour à minuit | SELECT CURRENT_DATE() |
| Une fois par jour à une heure spécifique (temps universel coordonné, UTC) | SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) |
| Deux fois par jour à des heures spécifiques | 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 |
| Trois fois par jour à des heures spécifiques | 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 |
| Lorsqu'une table spécifique est mise à jour | SELECT COUNT(*) FROM table |
| Toutes les heures | SELECT HOUR(CURRENT_TIME()) |
| Toutes les deux heures (temps universel coordonné, UTC) | SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) |
| Ne jamais actualiser les données | SELECT 1 |
Difficultés courantes
Vous devez configurer des tables dérivées persistantes pour sql_trigger_value
L'utilisation de sql_trigger_value entraînera des erreurs de validation LookML, sauf si vous avez activé la persistance pour les tables dérivées dans les paramètres de connexion à votre base de données. La plupart des clients configurent des tables dérivées persistantes lorsqu'ils configurent une connexion à une base de données pour la première fois. L'exception la plus courante à cette règle concerne les clients qui connectent Looker à un serveur secondaire PostgreSQL en lecture seule et à chaud.
sql_trigger_value fonctionne différemment en mode Développement et en mode Production
sql_trigger_value devrait fonctionner comme prévu en mode Production. En mode Développement, toutes les tables dérivées sont traitées comme si persist_for: 24 hours avait été utilisé, quel que soit le paramètre que vous avez implémenté. Pour en savoir plus, consultez la section Tables persistantes en mode Développement de la page de documentation Tables dérivées dans Looker.