Uso
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
Hierarquia
sql_trigger_value |
Valor padrão
NenhumaAceita
Uma instrução SQL que resulta em uma linha e uma coluna
|
Definição
Considere usar um
datagroup
edatagroup_trigger
, descritos na página de documentação Consultas de cache e PDT com grupos de dados.
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
vai considerar apenas a primeira linha e a coluna no SQL que você escrever. Portanto, recomendamos que você programe sua consulta para retornar somente um valor (uma linha e uma coluna). Isso elimina a confusão para desenvolvedores futuros e protege os dialetos SQL não 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ê escreveu, desde que outra tabela derivada persistente não esteja no processo de criação. Se os resultados da consulta SQL mudarem, o Looker vai gerar novamente a tabela derivada. É possível alterar essa programação como preferir usando a configuração PDT e programação de manutenção do grupo de dados nas configurações de administrador do Looker.
Por exemplo, suponha que você executasse o MySQL e usasse:
sql_trigger_value: SELECT CURDATE() ;;
Os resultados seriam parecidos com estes:
sql_trigger_value Tempo de execução | Resultado sql_trigger_value |
---|---|
01/01/2015 00:00 | 2015-01-01 |
01/01/2015 00:05 | 2015-01-01 |
01/01/2015 00:10 | 2015-01-01 |
… | … |
01/01/2015 23:55 | 2015-01-01 |
02/01/2015 00:00 | 2015-01-02 |
02/01/2015 00:05 | 2015-01-02 |
O valor dessa consulta SQL é alterado uma vez por dia à meia-noite, então a tabela derivada é gerada novamente.
O Looker não realiza a conversão de fuso horário para
sql_trigger_value
. Quando você usa osql_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 o banco de dados está configurado.
Se o administrador tiver concedido a permissão develop
, você poderá forçar uma nova tabela derivada antes que a consulta sql_trigger_value
mude. Selecione a opção Reconstruir tabelas derivadas e executar no menu suspenso da engrenagem "Explorar", que fica no canto superior direito da tela após executar uma consulta:
Consulte a página de documentação Tabelas derivadas no Looker para ver mais detalhes sobre a opção Recriar tabelas derivadas e executar.
Examples
Crie um PDT no MySQL que seja recriado 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 "3" pela hora do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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)) Você pode substituir "2" pelo número de horas que gostaria de ter entre cada nova geração |
Nunca atualizar 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 Horário universal coordenado (UTC) |
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) Substitua "3" pela hora do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geração ocorra |
Quando uma tabela específica é atualizada | SELECT COUNT(*) FROM table |
A cada hora | SELECT HOUR(CURTIME()) |
A cada duas horas, (tempo universal coordenado) (UTC) |
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) Você pode substituir "2" pelo número de horas que gostaria de ter entre cada nova geração |
Nunca atualizar 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 "3" pela hora do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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)) Você pode substituir "2" pelo número de horas que gostaria de ter entre cada nova geração |
Nunca atualizar 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 "3" pela hora do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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)) Você pode substituir "2" pelo número de horas que gostaria de ter entre cada nova geração |
Nunca atualizar 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 Horário universal coordenado (UTC) |
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) Substitua "3" pela hora do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geraçã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 pelas horas do dia em que você quer que a nova geração ocorra |
Quando uma tabela específica é atualizada | SELECT COUNT(*) FROM table |
A cada hora | SELECT HOUR(CURRENT_TIME()) |
A cada duas horas, (tempo universal coordenado) (UTC) |
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) Você pode substituir "2" pelo número de horas que gostaria de ter entre cada nova geração |
Nunca atualizar dados | SELECT 1 |
Desafios comuns
sql_trigger_value
exige a configuração de tabelas derivadas permanentes
O uso de sql_trigger_value
causará 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 inicialmente uma conexão de banco de dados. A exceção mais comum para essa regra é para clientes que conectam o Looker a um secundário, ou seja, somente leitura do PostgreSQL.
sql_trigger_value
funciona de forma diferente entre o modo de desenvolvimento e o modo de produção
sql_trigger_value
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 usada, independentemente da configuração implementada por você. Consulte a seção Tabelas persistentes no modo de desenvolvimento da página de documentação Tabelas derivadas no Looker para mais informações.