Uso
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Jerarquía
sql_trigger_value |
Valor predeterminado
NingunaAcepta
Una instrucción de SQL que da como resultado una fila y una columna
|
Definición
En su lugar, usa
datagroup
ydatagroup_trigger
, que se describen en la página de documentación sobre el almacenamiento en caché y la compilación de PDT con grupos de datos.
sql_trigger_value
te permite activar la regeneración de una tabla derivada persistente en función de una instrucción de SQL que proporciones. Si el resultado de la instrucción de SQL es diferente del valor anterior, se vuelve a generar el PDT.
El parámetro sql_trigger_value
solo considerará la primera fila y columna del SQL que escribas. Por lo tanto, recomendamos que escribas tu consulta para mostrar solo un valor (una fila y una columna). Esto evita confusiones para los desarrolladores futuros y protege los dialectos de SQL que no transmiten a fin de que no carguen grandes conjuntos de resultados en la memoria.
De forma predeterminada, cada cinco minutos de Looker ejecuta la consulta de SQL que escribes, siempre que otra tabla derivada persistente no esté en proceso de compilación. Si los resultados de la consulta de SQL cambian, Looker volverá a generar la tabla derivada. Puedes cambiar este programa como desees mediante el parámetro de configuración Programa de mantenimiento del PDT y el grupo de datos en la configuración de administrador de Looker.
Por ejemplo, supongamos que ejecuta MySQL y usa:
sql_trigger_value: SELECT CURDATE() ;;
Los resultados serían:
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 |
Puede ver que el valor de esta consulta en SQL cambiará una vez al día a medianoche, por lo que la tabla derivada se volverá a generar en esos momentos.
Looker no realiza una conversión de zona horaria para
sql_trigger_value
. Cuando usessql_trigger_value
para 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 se configuró 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 & amp; Run en el menú desplegable Explorar ajustes, que encontrarás en la esquina superior derecha de la pantalla 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 Volver a compilar tablas derivadas y ejecutar.
Ejemplos
Cree un PDT en MySQL que se vuelva a compilar una vez al día a 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 uso de SQL 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 la medianoche (hora del Pacífico) | SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles') |
Una vez al día en una hora específica | SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24)) Reemplaza “3” con la hora del día en que deseas que se realice la regeneración |
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 Reemplaza los números 4 y 18 por las horas del día en que deseas que se realice la regeneración. |
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 Reemplaza 4, 9 y 18 por las horas del día en que deseas que se realice la regeneración. |
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)) Puedes reemplazar "2" por la cantidad de horas que deseas entre cada regeneración |
Nunca actualizar datos | SELECT 1 |
MySQL
Programa de regeneración deseado | SQL para usar |
---|---|
Una vez al día a medianoche | SELECT CURDATE() |
Una vez al día a una hora específica Horario universal coordinado (UTC) |
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) Reemplaza “3” con la hora del día en que deseas que se realice la regeneración |
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 Reemplaza los números 4 y 18 por las horas del día en que deseas que se realice la regeneración. |
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 Reemplaza 4, 9 y 18 por las horas del día en que deseas que se realice la regeneración. |
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)) Puedes reemplazar "2" por la cantidad de horas que deseas entre cada regeneración |
Nunca actualizar datos | SELECT 1 |
Amazon Redshift
Programa de regeneración deseado | SQL para usar |
---|---|
Una vez al día a medianoche | SELECT CURRENT_DATE |
Una vez al día en una hora específica | SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24)) Reemplaza “3” con la hora del día en que deseas que se realice la regeneración |
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 Reemplaza los números 4 y 18 por las horas del día en que deseas que se realice la regeneración. |
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 Reemplaza 4, 9 y 18 por las horas del día en que deseas que se realice la regeneración. |
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)) Puedes reemplazar "2" por la cantidad de horas que deseas entre cada regeneración |
Nunca actualizar datos | SELECT 1 |
PostgreSQL
Programa de regeneración deseado | SQL para usar |
---|---|
Una vez al día a medianoche | SELECT CURRENT_DATE |
Una vez al día en una hora específica | SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24)) Reemplaza “3” con la hora del día en que deseas que se realice la regeneración |
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 Reemplaza los números 4 y 18 por las horas del día en que deseas que se realice la regeneración. |
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 Reemplaza 4, 9 y 18 por las horas del día en que deseas que se realice la regeneración. |
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)) Puedes reemplazar "2" por la cantidad de horas que deseas entre cada regeneración |
Nunca actualizar datos | SELECT 1 |
Snowflake
Programa de regeneración deseado | SQL para usar |
---|---|
Una vez al día a medianoche | SELECT CURRENT_DATE() |
Una vez al día a una hora específica Horario universal coordinado (UTC) |
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) Reemplaza “3” con la hora del día en que deseas que se realice la regeneración |
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 Reemplaza los números 4 y 18 por las horas del día en que deseas que se realice la regeneración. |
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 Reemplaza 4, 9 y 18 por las horas del día en que deseas que se realice la regeneración. |
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)) Puedes reemplazar "2" por la cantidad de horas que deseas entre cada regeneración |
Nunca actualizar datos | SELECT 1 |
Desafíos habituales
sql_trigger_value
requiere que hayas configurado tablas derivadas persistentes.
Si usas sql_trigger_value
, se generarán errores de validación de LookML, a menos que habilites la persistencia para las tablas derivadas en la configuración de la conexión a 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 instancia secundaria de intercambio directo de solo lectura de PostgreSQL.
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 se haya implementado. Consulta la sección Tablas persistentes en modo de desarrollo de la página de documentación Tablas derivadas en Looker para obtener más información.