sql_trigger_value

Uso

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

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

Definición

En su lugar, considera usar un datagroup y un 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 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 transmiten de cargar grandes conjuntos de resultados en la memoria.

De forma predeterminada, Looker ejecuta la consulta en SQL que escribes cada cinco minutos, siempre que 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 corresponda con el parámetro de configuración PDT And Datagroup Maintenance Schedule en la configuración de 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 el 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 una 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 SQL que se 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 la 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 "3" por la hora del día en la que deseas que se produzca la regeneración.
Dos veces al día en horas específicas
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 horas específicas
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 "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 la medianoche
SELECT CURDATE()
Una vez al día a una hora específica, hora universal coordinada (UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

Reemplaza "3" por la hora del día en la que deseas que se produzca la regeneración.
Dos veces al día en horas específicas
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 horas específicas
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 "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 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 "3" por la hora del día en la que deseas que se produzca la regeneración.
Dos veces al día en horas específicas
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 horas específicas
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 "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 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 "3" por la hora del día en la que deseas que se produzca la regeneración.
Dos veces al día en horas específicas
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 horas específicas
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 "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 la medianoche
SELECT CURRENT_DATE()
Una vez al día a una hora específica, hora universal coordinada (UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

Reemplaza "3" por la hora del día en la que deseas que se produzca la regeneración.
Dos veces al día en horas específicas
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 horas específicas
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 "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

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 conexión de tu 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 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 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.