Almacena consultas en caché

Looker reduce la carga en tu base de datos y mejora el rendimiento mediante el uso de los resultados almacenados en caché de las consultas de SQL anteriores cuando están disponibles y cuando tu política de almacenamiento en caché permite esta función. En esta página, se describe la política de almacenamiento en caché predeterminada de Looker, junto con las opciones disponibles para modificar la duración de los resultados almacenados en caché en tu instancia de Looker.

Cómo usa Looker las consultas almacenadas en caché

Para las consultas en SQL, el mecanismo de almacenamiento en caché en Looker funciona de la siguiente manera:

  1. Cuando se ejecuta una consulta en SQL desde una exploración, una vista o un panel, Looker verifica la caché a fin de ver si ya hay resultados almacenados en caché para esa consulta. Los resultados almacenados en caché se usarán solo si todos los aspectos de la consulta son iguales, incluidos los campos, los filtros, los parámetros y los límites de filas.

  2. Si se encuentran resultados almacenados en caché, Looker verifica la política de almacenamiento en caché que se define en el modelo de LookML para determinar si los resultados almacenados en caché caducaron. Si los resultados almacenados en caché no han vencido, Looker usará esos resultados para la consulta.

  3. Si no se encuentran resultados almacenados en caché para la consulta o si estos vencieron, Looker ejecutará la consulta en la base de datos. Los resultados de la consulta nueva se almacenarán en caché.

La política de retención de caché predeterminada es de una hora. En la siguiente sección, Modifica las políticas de retención de caché, se analiza cómo acortar o alargar este tiempo, y se describen las opciones para sincronizar la política de retención de caché con el proceso ETL (extracción, transformación y carga) de la base de datos.

Modifica las políticas de retención de caché

Puedes especificar políticas de retención de caché a nivel de exploración de LookML y a nivel de modelo de LookML.

El mecanismo de almacenamiento en caché recomendado es usar un parámetro datagroup a nivel del modelo. Los grupos de datos te permiten sincronizar la política de retención de caché de un modelo con el programa de ETL de la base de datos mediante el parámetro sql_trigger y la configuración de un intervalo de vencimiento de la caché con el parámetro max_cache_age. Para obtener más información, consulta la sección Almacena consultas en caché y vuelve a compilar las PDT con los grupos de datos.

Si prefieres un enfoque más simple, puedes usar el parámetro persist_for en el nivel del modelo o en el nivel del explorador. Usar el parámetro persist_for de esta manera te permite establecer un intervalo de vencimiento de la caché que anule el intervalo predeterminado de una hora. Sin embargo, usar persist_for es menos sólido que usar grupos de datos por varios motivos, como se explica en la sección Cómo almacenar consultas en caché con persistencia_for.

Si una exploración o un modelo tienen un grupo de datos o persist_for definidos, la política de almacenamiento en caché se modifica de la siguiente manera:

  • Antes de que venza el intervalo persist_for o el intervalo max_cache_age del grupo de datos: Si se vuelve a ejecutar la consulta, Looker extrae datos de la caché.
  • Cuando vence el intervalo persist_for o el intervalo max_cache_age del grupo de datos, Looker borra los datos de la caché.
  • Después de que venza el intervalo persist_for o el intervalo max_cache_age del grupo de datos: Si se vuelve a ejecutar la consulta, Looker extrae los datos de la base de datos directamente y restablece el intervalo persist_for o max_cache_age.

Un punto clave es que los datos se borran de la caché cuando vence el intervalo persist_for o max_cache_age.

Si la caché alcanza el límite de almacenamiento, los datos se expulsan según el algoritmo menos utilizado (LRU), sin garantía de que los datos con intervalos de persist_for o max_cache_age vencidos se borrarán de una sola vez.

Minimiza el tiempo que tus datos pasan en la caché

Looker siempre escribirá los resultados de las consultas en la caché. Incluso si los intervalos persist_for y max_cache_age se establecen en cero, los datos almacenados en caché pueden almacenarse por hasta 10 minutos. Todos los datos del cliente que se almacenan en la caché de disco están encriptados por el estándar de encriptación avanzada (AES).

Para minimizar la cantidad de tiempo que los datos se almacenan en la caché, haz lo siguiente:

  • En el caso de cualquier parámetro persist_for (para un modelo o una exploración) o el parámetro max_cache_age (para un grupo de datos), establece el valor en 0 minutes. Looker borra la caché cuando vence el intervalo persist_for o cuando los datos alcanzan el intervalo max_cache_age que se especifica en su grupo de datos. (No es necesario establecer el parámetro persist_for de las PDT en 0 minutes para minimizar la cantidad de datos que se almacenan en la caché. Las PDT se escriben en la base de datos y no en la caché).
  • Establece el parámetro suggest_persist_for en un intervalo pequeño. El valor suggest_persist_for especifica por cuánto tiempo Looker debe conservar las sugerencias de filtros en la caché. Las sugerencias de filtro se basan en una consulta de los valores del campo que se filtra. Estos resultados de la consulta se guardan en la caché para que Looker pueda proporcionar sugerencias rápidamente a medida que el usuario escribe en el campo de texto de filtro. El valor predeterminado es almacenar en caché las sugerencias de filtro durante 6 horas. Para minimizar la cantidad de tiempo que tus datos están en caché, establece el valor suggest_persist_for en un valor inferior, como 5 minutes.

Cómo comprobar si se ha devuelto una consulta desde la caché

En una ventana Explorar, puede determinar si una consulta se mostró desde la caché. Para ello, observe la esquina superior derecha después de ejecutar una consulta.

Cuando se muestra una consulta desde la caché, se muestra “from cache”. De lo contrario, se muestra la cantidad de tiempo que tardó en mostrar la consulta.

Fuerza la generación de resultados nuevos a partir de la base de datos

En una ventana Explorar, puedes forzar la recuperación de resultados nuevos de la base de datos. Después de ejecutar una consulta (incluidas las consultas de resultados combinados), selecciona la opción Borrar caché y actualizar del menú de ajustes Explorar acciones en la esquina superior derecha de la pantalla.

Almacena consultas en caché y vuelve a compilar las PDT con grupos de datos

Usa los grupos de datos para coordinar el programa de ETL (extracción, transformación y carga) de tu base de datos con la política de almacenamiento en caché de Looker y el programa de recompilación de PDT.

Puedes usar un grupo de datos a fin de especificar el activador de recompilación para las PDT en función del momento en que se agreguen datos nuevos a tu base de datos. Luego, puedes aplicar el mismo grupo de datos a la exploración o al modelo, de modo que los resultados almacenados en caché también caduquen cuando se vuelvan a compilar las PDT.

Como alternativa, puedes usar un grupo de datos para separar el activador de recompilación de PDT de la antigüedad máxima de la caché. Esto puede ser útil si tienes una exploración que se basa en datos que se actualizan con mucha frecuencia y se unen a una PDT que se vuelve a compilar con menos frecuencia. En este caso, es posible que desees que la caché de consultas se restablezca con mayor frecuencia que la PDT.

Cómo definir un grupo de datos

Define un grupo de datos con el parámetro datagroup, ya sea en un archivo de modelo o en su propio archivo de Looker. Puedes definir varios grupos de datos si deseas diferentes políticas de recompilación de PDT y almacenamiento en caché para diferentes exploraciones o PDT en tu proyecto.

El parámetro datagroup puede tener los siguientes subparámetros:

  • label: Especifica una etiqueta opcional para el grupo de datos.
  • description: Especifica una descripción opcional del grupo de datos que se puede usar para explicar el propósito y el mecanismo del grupo de datos.
  • max_cache_age: Especifica una string que define un período. Cuando la antigüedad de la caché de una consulta supera el período, Looker invalida la caché. La próxima vez que se emita la consulta, Looker la enviará a la base de datos para obtener resultados nuevos.
  • sql_trigger: Especifica una consulta en SQL que muestra una fila con una columna. Si el valor que muestra la consulta es diferente de los resultados anteriores, el grupo de datos entra en un estado activado.
  • interval_trigger: Especifica un horario para activar el grupo de datos, como "24 hours".

Consulta la página de documentación sobre los grupos de datos para obtener más información sobre estos parámetros.

Como mínimo, un grupo de datos debe tener los parámetros max_cache_age, sql_trigger o interval_trigger.

A continuación, se muestra un ejemplo de un grupo de datos que tiene un sql_trigger configurado para volver a compilar la PDT todos los días. Además, max_cache_age está configurado para borrar la caché de consultas cada dos horas, en caso de que alguna exploración una las PDT a otros datos que se actualizan con más frecuencia que una vez al día.

datagroup: customers_datagroup {
  sql_trigger: SELECT DATE(NOW());;
  max_cache_age: "2 hours"
}

Una vez que definas el grupo de datos, puedes asignarlo a exploraciones y PDT:

Usa un grupo de datos a fin de especificar un activador de recompilación para las PDT

Para definir un activador de recompilación de PDT mediante grupos de datos, crea un parámetro datagroup con el sql_trigger o el subparámetro interval_trigger. Luego, asigna el grupo de datos a PDT individuales con el subparámetro datagroup_trigger en la definición derived_table de la PDT. Si usas datagroup_trigger para la PDT, no necesitas especificar ninguna otra estrategia de persistencia para la tabla derivada. Si especificas varias estrategias de persistencia para una PDT, recibirás una advertencia en el IDE de Looker y solo se usará datagroup_trigger.

A continuación, se muestra un ejemplo de una definición de PDT que usa el grupo de datos customers_datagroup. Esta definición también agrega varios índices, tanto en customer_id como en first_order_date. Para obtener más información sobre la definición de las PDT, consulta la página de documentación Tablas derivadas de Looker.

view: customer_order_facts {
  derived_table: {
    sql: ... ;;
    datagroup_trigger: customers_datagroup
    indexes: ["customer_id", "first_order_date"]
  }
}

Si tienes PDT en cascada, PDT que dependen de otras PDT, ten cuidado de no especificar políticas incompatibles de almacenamiento en caché de grupos de datos.

En el caso de las conexiones que tienen atributos de usuario para especificar los parámetros de conexión, debes crear una conexión separada con los campos de anulación de PDT si deseas realizar alguna de las siguientes acciones:

  • Usa PDT en tu modelo
  • Usa un grupo de datos para definir un activador de recompilación de PDT

Sin las anulaciones de PDT, puedes usar un grupo de datos con max_cache_age para definir la política de almacenamiento en caché de las exploraciones.

Consulta la página de documentación de Tablas derivadas en Looker para obtener más información sobre cómo funcionan los grupos de datos con PDT.

Usa un grupo de datos a fin de especificar el restablecimiento de la caché de consultas para las exploraciones

Cuando se activa un grupo de datos, el regenerador de Looker vuelve a compilar las PDT que usan ese grupo de datos como estrategia de persistencia. Una vez que se vuelvan a compilar las PDT del grupo de datos, Looker borrará la caché para las exploraciones que usen las PDT recreadas del grupo de datos. Puedes agregar el parámetro max_cache_age a la definición de tu grupo de datos si deseas personalizar un programa de restablecimiento de la caché de consultas para el grupo de datos. El parámetro max_cache_age te permite borrar la caché de consultas según un programa específico, además del restablecimiento automático de la caché de consultas que realiza Looker cuando se vuelven a compilar las PDT del grupo de datos.

Para definir una política de almacenamiento en caché de consultas con grupos de datos, crea un parámetro datagroup con el subparámetro max_cache_age.

Si deseas especificar un grupo de datos para restablecer la caché de las consultas en exploraciones, usa el parámetro persist_with:

En los siguientes ejemplos, se muestra un grupo de datos llamado orders_datagroup que se define en un archivo de modelo. El grupo de datos tiene un parámetro sql_trigger, que especifica que la consulta select max(id) from my_tablename se usará para detectar cuándo se produjo un ETL. Incluso si ese ETL no ocurre por un tiempo, el max_cache_age del grupo de datos especifica que los datos almacenados en caché se usarán solo durante un máximo de 24 horas.

El parámetro persist_with del modelo apunta a la política de almacenamiento en caché orders_datagroup, lo que significa que esta será la política de almacenamiento en caché predeterminada para todas las exploraciones en el modelo. Sin embargo, no queremos usar la política de almacenamiento en caché predeterminada del modelo para las exploraciones de customer_facts y customer_background, por lo que podemos agregar el parámetro persist_with a fin de especificar una política de almacenamiento en caché diferente para estas dos exploraciones. Las exploraciones orders y orders_facts no tienen un parámetro persist_with, por lo que usarán la política de almacenamiento en caché predeterminada del modelo: orders_datagroup.

datagroup: orders_datagroup {
  sql_trigger: SELECT max(id) FROM my_tablename ;;
  max_cache_age: "24 hours"
}

datagroup: customers_datagroup {
  sql_trigger: SELECT max(id) FROM my_other_tablename ;;
}

persist_with: orders_datagroup

explore: orders { ... }

explore: order_facts { ... }

explore: customer_facts {
  persist_with: customers_datagroup
  ...
}

explore: customer_background {
  persist_with: customers_datagroup
  ...
}

Si se especifican persist_with y persist_for, recibirás una advertencia de validación y se usará persist_with.

Cómo usar un grupo de datos para activar entregas programadas

Los grupos de datos también se pueden usar para activar la publicación de un panel o una Look. Con esta opción, Looker enviará tus datos cuando se complete el grupo de datos para que el contenido programado esté actualizado.

Usa el panel Administrador para los grupos de datos

Si tienes el rol de administrador de Looker, puedes usar la página Grupos de datos del panel Administrador para ver los grupos de datos existentes. Puedes ver la conexión, el modelo y el estado actual de cada grupo de datos y, si se especifica en LookML, una etiqueta y una descripción para cada grupo de datos. También puedes restablecer la caché de un grupo de datos, activar el grupo de datos o navegar a LookML del grupo de datos.

Almacena consultas en caché con persist_for

Usa el parámetro persist_for a nivel del modelo o nivel de exploración para modificar el intervalo de retención de caché predeterminado de Looker de 1 hora. Puedes establecer intervalos pequeños como 0 minutes y intervalos máximos de 8760 hours (1 año) o más.

Definir los parámetros persist_for puede ser más rápido y sencillo, pero menos sólido, que definir grupos de datos. Se recomiendan los grupos de datos en lugar de persist_for por los siguientes motivos:

  • Los grupos de datos se pueden sincronizar con el proceso ETL de la base de datos.
  • Puedes reutilizar los grupos de datos en varios modelos y exploraciones. Esto significa que puedes actualizar el max_cache_age de un grupo de datos y se actualizará la política de almacenamiento en caché en cada lugar en el que se use el grupo de datos.
  • Puedes borrar toda la caché asociada con un grupo de datos desde la página Grupos de datos.