sql_trigger_value

Uso

view: my_view {
  derived_table: {
    sql_trigger_value: SELECT CURDATE() ;;
    ...
  }
}
Hierarquia
sql_trigger_value
Valor padrão
Nenhum

Aceita
Uma instrução SQL que resulta em uma linha e uma coluna

Definição

Em vez disso, use um datagroup e um datagroup_trigger, descritos na página de documentação Armazenamento em cache de consultas.

O sql_trigger_value permite acionar a regeneração de uma tabela derivada persistente com base em uma instrução SQL fornecida por você. Se o resultado da instrução SQL for diferente do valor anterior, o PDT será gerado novamente.

O parâmetro sql_trigger_value considera apenas a primeira linha e coluna no SQL que você escreve. Por isso, recomendamos que você escreva sua consulta para retornar apenas um valor (uma linha e uma coluna). Isso remove qualquer confusão para futuros desenvolvedores e protege dialetos SQL não de streaming de carregar grandes conjuntos de resultados na memória.

Por padrão, a cada cinco minutos, o Looker executa a consulta SQL que você escreve, desde que outra tabela derivada persistente não esteja em processo de criação. Se os resultados da consulta SQL mudarem, o Looker vai gerar novamente a tabela derivada. É possível mudar esse cronograma conforme necessário usando a configuração Cronograma de manutenção de PDT e grupo de dados nas configurações de administrador do Looker.

Por exemplo, suponha que você esteja executando o MySQL e tenha usado:

    sql_trigger_value: SELECT CURDATE() ;;

Os resultados seriam assim:

Tempo de execução 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

O valor dessa consulta SQL muda uma vez por dia à meia-noite. Portanto, a tabela derivada é regenerada nesses horários.

O Looker não faz conversão de fuso horário para sql_trigger_value. Quando você usa sql_trigger_value para acionar uma recriação de PDT à meia-noite ou em um horário específico do dia, o acionador ocorre no fuso horário em que seu banco de dados está configurado.

Se o administrador tiver concedido a permissão develop, você poderá forçar a regeneração de uma tabela derivada antes que a consulta sql_trigger_value seja alterada. Selecione a opção Recriar tabelas derivadas e executar no menu de engrenagem Ações da análise detalhada depois de executar uma consulta.

Consulte a página de documentação Tabelas derivadas no Looker para mais detalhes sobre a opção Recriar tabelas derivadas e executar.

Exemplos

Crie uma PDT no MySQL que seja reconstruída uma vez por dia à meia-noite:

view: clean_events {
  derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
    sql_trigger_value: SELECT CURDATE() ;;
  }
}

As seções a seguir mostram o SQL a ser usado para várias estratégias de recriação de PDT em diferentes dialetos:

Google BigQuery

Programação de regeneração desejada SQL a ser usado
Uma vez por dia à meia-noite do horário do Pacífico
SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles')
Uma vez por dia em um horário específico
SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24))

Substitua o "3" pela hora do dia em que você quer que a regeneração ocorra
Duas vezes por dia em horários 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

Substitua 4 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Três vezes por dia em horários 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

Substitua 4, 9 e 18 pelos horários do dia em que você quer que a regeneração ocorra
A cada hora
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
A cada 2 horas
SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60))

Substitua o "2" pelo número de horas que você quer entre cada regeneração
Nunca atualizar os dados
SELECT 1

MySQL

Programação de regeneração desejada SQL a ser usado
Uma vez por dia à meia-noite
SELECT CURDATE()
Uma vez por dia em um horário específico do Tempo Universal Coordenado (UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

Substitua o "3" pela hora do dia em que você quer que a regeneração ocorra
Duas vezes por dia em horários 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

Substitua 4 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Três vezes por dia em horários 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

Substitua 4, 9 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Quando uma tabela específica é atualizada
SELECT COUNT(*) FROM table
A cada hora
SELECT HOUR(CURTIME())
A cada duas horas no Tempo Universal Coordenado (UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))

Substitua o "2" pelo número de horas que você quer entre cada regeneração
Nunca atualizar os dados
SELECT 1

Amazon Redshift

Programação de regeneração desejada SQL a ser usado
Uma vez por dia à meia-noite
SELECT CURRENT_DATE
Uma vez por dia em um horário específico
SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24))

Substitua o "3" pela hora do dia em que você quer que a regeneração ocorra
Duas vezes por dia em horários 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

Substitua 4 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Três vezes por dia em horários 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

Substitua 4, 9 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Quando uma tabela específica é atualizada
SELECT COUNT(*) FROM table
A cada hora
SELECT DATE_PART('hour', GETDATE())
A cada 2 horas
SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60))

Substitua o "2" pelo número de horas que você quer entre cada regeneração
Nunca atualizar os dados
SELECT 1

PostgreSQL

Programação de regeneração desejada SQL a ser usado
Uma vez por dia à meia-noite
SELECT CURRENT_DATE
Uma vez por dia em um horário específico
SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24))

Substitua o "3" pela hora do dia em que você quer que a regeneração ocorra
Duas vezes por dia em horários 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

Substitua 4 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Três vezes por dia em horários 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

Substitua 4, 9 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Quando uma tabela específica é atualizada
SELECT COUNT(*) FROM table
A cada hora
SELECT DATE_PART('hour', NOW())
A cada 2 horas
SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))

Substitua o "2" pelo número de horas que você quer entre cada regeneração
Nunca atualizar os dados
SELECT 1

Snowflake

Programação de regeneração desejada SQL a ser usado
Uma vez por dia à meia-noite
SELECT CURRENT_DATE()
Uma vez por dia em um horário específico do Tempo Universal Coordenado (UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

Substitua o "3" pela hora do dia em que você quer que a regeneração ocorra
Duas vezes por dia em horários 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

Substitua 4 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Três vezes por dia em horários 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

Substitua 4, 9 e 18 pelos horários do dia em que você quer que a regeneração ocorra
Quando uma tabela específica é atualizada
SELECT COUNT(*) FROM table
A cada hora
SELECT HOUR(CURRENT_TIME())
A cada duas horas no Tempo Universal Coordenado (UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))

Substitua o "2" pelo número de horas que você quer entre cada regeneração
Nunca atualizar os dados
SELECT 1

Desafios comuns

sql_trigger_value exige que você tenha configurado tabelas derivadas persistentes

O uso de sql_trigger_value causa erros de validação do LookML, a menos que você tenha ativado a persistência para tabelas derivadas nas configurações de conexão do banco de dados. A maioria dos clientes configura tabelas derivadas permanentes ao configurar uma conexão de banco de dados pela primeira vez. A exceção mais comum a essa regra é para clientes que conectam o Looker a um secundário somente leitura e de troca a quente do PostgreSQL.

sql_trigger_value funciona de maneira diferente no modo de desenvolvimento e no modo de produção

O sql_trigger_value deve funcionar conforme o esperado no modo de produção. No modo de desenvolvimento, todas as tabelas derivadas são tratadas como se persist_for: 24 hours tivesse sido usado, não importa qual configuração você tenha implementado. Consulte a seção Tabelas persistentes no modo de desenvolvimento da página de documentação Tabelas derivadas no Looker para mais informações.