Armazenamento em cache de consultas

O Looker reduz a carga no seu banco de dados e melhora a performance usando os resultados armazenados em cache de consultas SQL anteriores quando eles estão disponíveis e quando essa função é permitida pela sua política de armazenamento em cache. Esta página descreve a política de armazenamento em cache padrão do Looker e as opções disponíveis para modificar a duração dos resultados armazenados em cache na sua instância do Looker.

Como o Looker usa consultas em cache

Para consultas SQL, o mecanismo de armazenamento em cache no Looker funciona da seguinte maneira:

  1. Quando uma consulta SQL é executada em uma Análise detalhada, um Look ou um painel, o Looker verifica o cache para saber se já há resultados armazenados para essa consulta. Os resultados em cache só serão usados se todos os aspectos da consulta forem iguais, incluindo campos, filtros, parâmetros e limites de linha.

  2. Se os resultados em cache forem encontrados, o Looker vai verificar a política de armazenamento em cache definida no modelo do LookML para determinar se os resultados em cache expiraram. Se os resultados armazenados em cache não tiverem expirado, o Looker vai usar os resultados armazenados em cache para a consulta.

  3. Se não houver resultados armazenados em cache para a consulta ou se eles tiverem expirado, o Looker vai executar a consulta no banco de dados. Os novos resultados da consulta serão armazenados em cache.

A política de retenção de cache padrão é de uma hora. A próxima seção, Modificar políticas de retenção de cache, discute como encurtar ou prolongar esse período e descreve as opções para sincronizar a política de retenção de cache com o processo ETL (extrair, transformar e carregar) do seu banco de dados.

Como modificar políticas de retenção de cache

É possível especificar políticas de retenção de cache no nível da Análise do LookML e do modelo do LookML.

O mecanismo de armazenamento em cache recomendado é usar um parâmetro datagroup no nível do modelo. Com os grupos de dados, você pode sincronizar a política de retenção de cache de um modelo com a programação de ETL do seu banco de dados usando o parâmetro sql_trigger e definindo um intervalo de expiração de cache com o parâmetro max_cache_age. Para mais informações, consulte a seção Como armazenar em cache consultas e recriar PDTs com grupos de dados.

Para uma abordagem mais simples, use o parâmetro persist_for no nível do modelo ou no nível de análise detalhada. O uso do parâmetro persist_for dessa maneira permite definir um intervalo de validade do cache que substitui o intervalo padrão de uma hora. No entanto, o uso de persist_for é menos robusto do que o uso de grupos de dados por alguns motivos, conforme discutido na seção Armazenamento em cache de consultas com persist_for.

Se uma Análise detalhada ou um modelo tiver um grupo de dados ou persist_for definido, a política de armazenamento em cache será modificada da seguinte maneira:

  • Antes do vencimento do intervalo persist_for ou do max_cache_age do grupo de dados: se a consulta for executada novamente, o Looker vai extrair dados do cache.
  • Quando o intervalo persist_for ou o intervalo max_cache_age do grupo de dados expirar: o Looker exclui os dados do cache.
  • Após o vencimento do intervalo persist_for ou max_cache_age do grupo de dados: se a consulta for executada novamente, o Looker vai extrair os dados diretamente do banco de dados e redefinir o intervalo persist_for ou max_cache_age.

Um ponto importante é que os dados são excluídos do cache quando o intervalo de persist_for ou max_cache_age expira.

Se o cache atingir o limite de armazenamento, os dados serão ejetados com base em um algoritmo usado menos recentemente (LRU, na sigla em inglês), sem garantia de que os dados com intervalos persist_for ou max_cache_age expirados serão excluídos de uma só vez.

Minimizar o tempo que os dados ficam no cache

O Looker sempre grava os resultados da consulta no cache. Mesmo que os intervalos persist_for e max_cache_age sejam definidos como zero, os dados armazenados em cache ainda podem ser armazenados por até 10 minutos. Todos os dados do cliente armazenados no cache do disco são criptografados pelo padrão de criptografia avançada (AES).

Para minimizar o tempo de armazenamento dos dados no cache:

  • Para qualquer parâmetro persist_for (para um modelo ou uma Análise detalhada) ou max_cache_age (para um grupo de dados), defina o valor como 0 minutes. O Looker exclui o cache quando o intervalo persist_for expira ou quando os dados atingem o intervalo max_cache_age especificado no datagroup. Não é necessário definir o parâmetro persist_for de PDTs como 0 minutes para minimizar a quantidade de dados armazenados no cache. As PDTs são gravadas no próprio banco de dados, e não no cache.
  • Defina o parâmetro suggest_persist_for como um pequeno intervalo. O valor suggest_persist_for especifica por quanto tempo o Looker precisa manter as sugestões de filtro no cache. As sugestões de filtro são baseadas em uma consulta dos valores do campo que está sendo filtrado. Esses resultados de consulta são mantidos no cache para que o Looker possa oferecer sugestões rapidamente à medida que o usuário digita no campo de texto do filtro. O padrão é armazenar as sugestões de filtro em cache por seis horas. Para minimizar o tempo em que os dados ficam no cache, defina o valor de suggest_persist_for como algo menor, como 5 minutes.

Verificar se uma consulta foi retornada do cache

Em uma janela Explorar, é possível determinar se uma consulta foi retornada do cache analisando as informações ao lado do botão Executar depois de executar uma consulta.

Quando uma consulta é retornada do cache, o texto "do cache" é exibido. Caso contrário, o tempo que levou para retornar a consulta será exibido.

Forçar a geração de novos resultados no banco de dados

Na janela Explorar, é possível forçar a recuperação de novos resultados do banco de dados. Depois de executar uma consulta (incluindo consultas de resultados mesclados), selecione a opção Limpar cache e atualizar no menu de engrenagens Ações de análise.

Armazenamento em cache de consultas e recriação de PDTs com grupos de dados

Use grupos de dados para coordenar a programação de ETL (extração, transformação e carregamento) do seu banco de dados com a política de armazenamento em cache do Looker e a programação de reconstrução de PDT.

É possível usar um grupo de dados para especificar o gatilho de recriação de PDTs com base no momento em que novos dados são adicionados ao banco de dados. Em seguida, aplique o mesmo grupo de dados à Análise detalhada ou ao modelo para que os resultados armazenados em cache também expirem quando as PDTs forem recriadas.

Como alternativa, use um grupo de dados para desacoplar o gatilho de recriação do PDT da idade máxima do cache. Isso pode ser útil se você tiver uma Análise baseada em dados atualizados com frequência e vinculados a um PDT que é recriado com menos frequência. Nesse caso, talvez você queira redefinir o cache de consulta com mais frequência do que a reconstrução do PDT.

Como definir um datagroup

Defina um datagroup com o parâmetro datagroup em um arquivo de modelo ou no próprio arquivo LookML. Você pode definir vários grupos de dados se quiser políticas de armazenamento em cache e reconstrução de PDT diferentes para diferentes análises detalhadas e/ou PDTs no seu projeto.

O parâmetro datagroup pode ter os seguintes subparâmetros:

  • label: especifica um rótulo opcional para o grupo de dados.
  • description: especifica uma descrição opcional para o grupo de dados que pode ser usada para explicar o propósito e o mecanismo dele.
  • max_cache_age: especifica uma string que define um período. Quando a idade do cache de uma consulta excede o período, o Looker invalida o cache. Na próxima vez que a consulta for emitida, o Looker vai enviar a consulta para o banco de dados para resultados atualizados.
  • sql_trigger: especifica uma consulta SQL que retorna uma linha com uma coluna. Se o valor retornado pela consulta for diferente dos resultados anteriores, o grupo de dados vai entrar em um estado acionado.
  • interval_trigger: especifica uma programação para acionar o grupo de dados, como "24 hours".

Um grupo de dados precisa ter pelo menos o parâmetro max_cache_age, sql_trigger ou interval_trigger.

Confira um exemplo de um grupo de dados com uma sql_trigger configurada para recriar o PDT todos os dias. Além disso, o max_cache_age é definido para limpar o cache de consulta a cada duas horas, caso as análises conectem os PDTs a outros dados que são atualizados com mais frequência do que uma vez por dia.

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

Depois de definir o grupo de dados, é possível atribuí-lo a análises detalhadas e PDTs:

Usar um grupo de dados para especificar um gatilho de recriação para PDTs

Para definir um gatilho de recriação de PDT usando grupos de dados, crie um parâmetro datagroup com o subparâmetro sql_trigger ou interval_trigger. Em seguida, atribua o grupo de dados a PDTs individuais usando o subatributo datagroup_trigger na definição derived_table da PDT. Se você usar datagroup_trigger para o PDT, não será necessário especificar nenhuma outra estratégia de persistência para a tabela derivada. Se você especificar várias estratégias de persistência para um PDT, vai receber um aviso no ambiente de desenvolvimento integrado do Looker, e apenas o datagroup_trigger será usado.

Confira a seguir um exemplo de definição de PDT que usa o grupo de dados customers_datagroup. Essa definição também adiciona vários índices, em customer_id e first_order_date. Para mais informações sobre como definir PDTs, consulte a página de documentação Tabelas derivadas no Looker.

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

Consulte a página de documentação Tabelas derivadas no Looker para mais informações sobre como os grupos de dados funcionam com PDTs.

Como usar um grupo de dados para especificar a redefinição do cache de consulta para análises detalhadas

Quando um grupo de dados é acionado, o regenerador do Looker recria as PDTs que usam esse grupo como uma estratégia de persistência. Depois que as PDTs do grupo de dados forem recriadas, o Looker vai limpar o cache das análises detalhadas que usam as PDTs recriadas do grupo de dados. É possível adicionar o parâmetro max_cache_age à definição do grupo de dados se você quiser personalizar uma programação de redefinição do cache de consulta para o grupo. O parâmetro max_cache_age permite limpar o cache de consulta em uma programação especificada, além da redefinição automática do cache de consulta que o Looker executa quando os PDTs do grupo de dados são reconstruídos.

Para definir uma política de armazenamento em cache de consultas com grupos de dados, crie um parâmetro datagroup com o subatributo max_cache_age.

Para especificar um grupo de dados a ser usado para redefinições de cache de consulta nas análises detalhadas, use o parâmetro persist_with:

Os exemplos a seguir mostram um grupo de dados chamado orders_datagroup, definido em um arquivo de modelo. O datagroup tem um parâmetro sql_trigger, que especifica que a consulta select max(id) from my_tablename será usada para detectar quando um ETL ocorreu. Mesmo que o ETL não aconteça por um tempo, o max_cache_age do grupo de dados especifica que os dados em cache serão usados apenas por um máximo de 24 horas.

O parâmetro persist_with do modelo aponta para a política de armazenamento em cache orders_datagroup, o que significa que essa será a política padrão para todas as análises no modelo. No entanto, não queremos usar a política de armazenamento em cache padrão do modelo para as análises customer_facts e customer_background. Por isso, podemos adicionar o parâmetro persist_with para especificar uma política de armazenamento em cache diferente para essas duas análises. As análises orders e orders_facts não têm um parâmetro persist_with, então elas vão usar a política de armazenamento em cache padrão do 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
  ...
}

Se persist_with e persist_for forem especificados, você vai receber um aviso de validação e persist_with será usado.

Usar um grupo de dados para acionar entregas programadas

Os grupos de dados também podem ser usados para acionar o envio de um painel ou uma visualização. Com essa opção, o Looker vai enviar seus dados quando o grupo de dados for concluído, para que o conteúdo programado esteja atualizado.

Como usar o painel Administrador para grupos de dados

Se você tiver a função de administrador do Looker, poderá usar a página Datagroups do painel Administrador para conferir os grupos de dados existentes. É possível conferir a conexão, o modelo e o status atual de cada grupo de dados e, se especificado no LookML, um rótulo e uma descrição para cada grupo de dados. Também é possível redefinir o cache de um grupo de dados, acionar o grupo de dados ou navegar até o LookML do grupo de dados.

Armazenamento em cache de consultas com persist_for

Use o parâmetro persist_for no nível do modelo ou no nível de análise detalhada para modificar o intervalo de retenção de cache padrão do Looker de uma hora. É possível definir intervalos tão pequenos quanto 0 minutes e tão grandes quanto 8760 hours (1 ano) ou mais.

A definição de parâmetros persist_for pode ser mais rápida e simples, mas menos robusta do que definir grupos de dados. Os grupos de dados são recomendados em vez de persist_for pelos seguintes motivos:

  • Os grupos de dados podem ser sincronizados com o processo de ETL do seu banco de dados.
  • É possível reutilizar grupos de dados em vários modelos e análises detalhadas. Isso significa que você pode atualizar o max_cache_age de um grupo de dados, e isso vai atualizar a política de armazenamento em cache em cada lugar em que o grupo de dados é usado.
  • É possível limpar todo o cache associado a um grupo de dados na página Grupos de dados.