sql_trigger_value [valor_activador_sql]

Uso

vista: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Jerarquía
sql_trigger_value
Valor predeterminado
Ninguna

Acepta
Una instrucción de SQL que da como resultado una fila y una columna

Definición

En su lugar, usa datagroup y datagroup_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 uses sql_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 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.