Uso
view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
|
Jerarquía
sql_trigger_value |
Valor predeterminado
Ninguno
Acepta
Instrucción de SQL que genera una fila y una columna
|
Definición
En su lugar, considera usar
datagroupydatagroup_trigger, que se describen en la página de documentación Almacenamiento en caché de consultas.
sql_trigger_value te permite activar la regeneración de una tabla derivada persistente basada en una instrucción de SQL que tú proporcionas. Si el resultado de la instrucción de SQL es diferente del valor anterior, se vuelve a generar la PDT.
El parámetro sql_trigger_value solo tendrá en cuenta la primera fila y columna del código SQL que escribas. Por lo tanto, te recomendamos que escribas tu consulta para que muestre solo un valor (una fila y una columna). Esto elimina cualquier confusión para los desarrolladores futuros y protege los dialectos de SQL que no son de transmisión de cargar grandes conjuntos de resultados en la memoria.
De forma predeterminada, Looker ejecuta la consulta en SQL que escribes cada cinco minutos, siempre y cuando no se esté compilando otra tabla derivada persistente. Si cambian los resultados de la consulta en SQL, Looker volverá a generar la tabla derivada. Puedes cambiar este programa según sea necesario con el parámetro de configuración PDT And Datagroup Maintenance Schedule en la configuración del administrador de Looker.
Por ejemplo, supongamos que ejecutabas MySQL y usabas lo siguiente:
sql_trigger_value: SELECT CURDATE() ;;
Los resultados serían los siguientes:
| Tiempo de ejecución de sql_trigger_value | Resultado de sql_trigger_value |
|---|---|
| 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 |
Puedes ver que el valor de esta consulta en SQL cambiará una vez al día a la medianoche, por lo que la tabla derivada se volverá a generar en esos momentos.
Looker no realiza la conversión de zona horaria para
sql_trigger_value. Cuando usassql_trigger_valuepara activar una recompilación de PDT a la medianoche o en un momento específico del día, el activador se producirá en la zona horaria para la que está configurada tu base de datos.
Si tu administrador te otorgó el permiso develop, puedes forzar la regeneración de una tabla derivada antes de que cambie su consulta sql_trigger_value. Selecciona la opción Rebuild Derived Tables & Run en el menú de ajustes Explore actions después de ejecutar una consulta.
Consulta la página de documentación Tablas derivadas en Looker para obtener más detalles sobre la opción Rebuild Derived Tables & Run.
Ejemplos
Crea un PDT en MySQL que se vuelva a compilar una vez al día a la medianoche:
view: clean_events {
derived_table: {
sql:
SELECT *
FROM events
WHERE type NOT IN ('test', 'staff') ;;
sql_trigger_value: SELECT CURDATE() ;;
}
}
En las siguientes secciones, se muestra el código SQL que se debe usar para varias estrategias de recompilación de PDT en diferentes dialectos:
Google BigQuery
| Programa de regeneración deseado | SQL para usar |
|---|---|
| Una vez al día, a medianoche (hora del Pacífico) | SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles') |
| Una vez al día a una hora específica | SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24)) |
| Dos veces al día en horarios específicos | 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 |
| Tres veces al día en horarios específicos | 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 |
| Cada 1 hora | SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP()) |
| Cada 2 horas | SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60)) |
| Nunca actualizar los datos | SELECT 1 |
MySQL
| Programa de regeneración deseado | SQL para usar |
|---|---|
| Una vez al día a la medianoche | SELECT CURDATE() |
| Una vez al día a una hora específica en hora universal coordinada (UTC) | SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) |
| Dos veces al día en horarios específicos | 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 |
| Tres veces al día en horarios específicos | 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 |
| Cuando se actualiza una tabla en particular | SELECT COUNT(*) FROM table |
| Cada 1 hora | SELECT HOUR(CURTIME()) |
| Cada 2 horas (hora universal coordinada, UTC) | SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) |
| Nunca actualizar los datos | SELECT 1 |
Amazon Redshift
| Programa de regeneración deseado | SQL para usar |
|---|---|
| Una vez al día a la medianoche | SELECT CURRENT_DATE |
| Una vez al día a una hora específica | SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24)) |
| Dos veces al día en horarios específicos | 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 |
| Tres veces al día en horarios específicos | 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 |
| Cuando se actualiza una tabla en particular | SELECT COUNT(*) FROM table |
| Cada 1 hora | SELECT DATE_PART('hour', GETDATE()) |
| Cada 2 horas | SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60)) |
| Nunca actualizar los datos | SELECT 1 |
PostgreSQL
| Programa de regeneración deseado | SQL para usar |
|---|---|
| Una vez al día a la medianoche | SELECT CURRENT_DATE |
| Una vez al día a una hora específica | SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24)) |
| Dos veces al día en horarios específicos | 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 |
| Tres veces al día en horarios específicos | 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 |
| Cuando se actualiza una tabla en particular | SELECT COUNT(*) FROM table |
| Cada 1 hora | SELECT DATE_PART('hour', NOW()) |
| Cada 2 horas | SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60)) |
| Nunca actualizar los datos | SELECT 1 |
Snowflake
| Programa de regeneración deseado | SQL para usar |
|---|---|
| Una vez al día a la medianoche | SELECT CURRENT_DATE() |
| Una vez al día a una hora específica en hora universal coordinada (UTC) | SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) |
| Dos veces al día en horarios específicos | 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 |
| Tres veces al día en horarios específicos | 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 |
| Cuando se actualiza una tabla en particular | SELECT COUNT(*) FROM table |
| Cada 1 hora | SELECT HOUR(CURRENT_TIME()) |
| Cada 2 horas (hora universal coordinada, UTC) | SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) |
| Nunca actualizar los datos | SELECT 1 |
Desafíos habituales
sql_trigger_value requiere que hayas configurado tablas derivadas persistentes
El uso de sql_trigger_value provocará errores de validación de LookML, a menos que hayas habilitado la persistencia para las tablas derivadas en la configuración de la conexión de la base de datos. La mayoría de los clientes sí configuran tablas derivadas persistentes cuando configuran inicialmente una conexión de base de datos. La excepción más común a esta regla es para los clientes que conectan Looker a una secundaria de intercambio en caliente de PostgreSQL de solo lectura.
sql_trigger_value funciona de manera diferente entre el modo de desarrollo y el modo de producción
sql_trigger_value debería funcionar como se espera en el modo de producción. En el modo de desarrollo, todas las tablas derivadas se tratan como si se hubiera usado persist_for: 24 hours, sin importar la configuración que hayas implementado. Consulta la sección Tablas persistentes en el modo de desarrollo de la página de documentación Tablas derivadas en Looker para obtener más información.