sql_trigger_value

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 datagroup y datagroup_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 usas 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 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))

Reemplaza el "3" por la hora del día en la que deseas que se produzca 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 4 y 18 por las horas del día en las que deseas que se produzca 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 las que deseas que se produzca 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 el "2" por la cantidad de horas que desees entre cada regeneración
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))

Reemplaza el "3" por la hora del día en la que deseas que se produzca 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 4 y 18 por las horas del día en las que deseas que se produzca 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 las que deseas que se produzca 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 el "2" por la cantidad de horas que desees entre cada regeneración
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))

Reemplaza el "3" por la hora del día en la que deseas que se produzca 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 4 y 18 por las horas del día en las que deseas que se produzca 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 las que deseas que se produzca 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 el "2" por la cantidad de horas que desees entre cada regeneración
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))

Reemplaza el "3" por la hora del día en la que deseas que se produzca 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 4 y 18 por las horas del día en las que deseas que se produzca 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 las que deseas que se produzca 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 el "2" por la cantidad de horas que desees entre cada regeneración
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))

Reemplaza el "3" por la hora del día en la que deseas que se produzca 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 4 y 18 por las horas del día en las que deseas que se produzca 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 las que deseas que se produzca 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 el "2" por la cantidad de horas que desees entre cada regeneración
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 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.