No Looker, as tabelas derivadas permanentes (PDTs, na sigla em inglês) são gravadas no esquema de rascunho do banco de dados. O Looker persiste e recria um PDT com base na sua estratégia de persistência. Quando uma TDP é acionada para recriação, por padrão, o Looker recria a tabela inteira.
Um PDT incremental é um PDT criado pelo Looker ao anexar dados novos à tabela em vez de recriá-la totalmente:
Se o dialeto for compatível com PDTs incrementais, será possível transformar os seguintes tipos em TDPs incrementais:
Na primeira vez que você executa uma consulta em um PDT incremental, o Looker cria todo o PDT para conseguir os dados iniciais. Se a tabela for grande, a compilação inicial poderá levar um tempo significativo, assim como a criação de qualquer tabela grande. Depois que a tabela inicial for criada, as compilações subsequentes serão incrementais e levarão menos tempo, se a PDT incremental estiver configurada estrategicamente.
Observe o seguinte para TDPs incrementais:
- As PDTs incrementais são compatíveis apenas com as que usam uma estratégia de persistência baseada em acionadores (
datagroup_trigger
,sql_trigger_value
ouinterval_trigger
). As PDTs incrementais não são compatíveis com TDPs que usam a estratégia de persistênciapersist_for
. - Para PDTs baseadas em SQL, a consulta da tabela precisa ser definida usando o parâmetro
sql
para ser usada como uma PDT incremental. As PDTs baseadas em SQL definidas com o parâmetrosql_create
oucreate_process
não podem ser criadas de forma incremental. Como você pode ver no Exemplo 1 desta página, o Looker usa um comando INSERT ou MERGE para criar os incrementos de um PDT incremental. A tabela derivada não pode ser definida usando instruções personalizadas de Linguagem de definição de dados (DDL), já que o Looker não consegue determinar quais instruções DDL seriam necessárias para criar um incremento preciso. - A tabela de origem do PDT incremental precisa ser otimizada para consultas baseadas em tempo. Especificamente, a coluna com base no tempo usada para a chave do incremento precisa ter uma estratégia de otimização, como particionamento, classificações, índices ou qualquer outra estratégia de otimização compatível com seu dialeto. A otimização da tabela de origem é altamente recomendada porque, sempre que a tabela incremental é atualizada, a Looker consulta a tabela de origem para determinar os valores mais recentes da coluna baseada em tempo usada para a chave de incremento. Se a tabela de origem não estiver otimizada para essas consultas, a consulta do Looker em busca dos valores mais recentes pode ser lenta e cara.
Como definir um PDT incremental
Você pode usar os seguintes parâmetros para transformar uma TDP em uma PDT incremental:
increment_key
(necessário para tornar a PDT incremental): define o período de consulta dos novos registros.{% incrementcondition %}
Filtro líquido (necessário para tornar uma PDT baseada em SQL incremental e não aplicável a PDTs baseadas em LookML): conecta a chave de incremento à coluna de tempo do banco de dados em que a chave de incremento é baseada. Consulte a página da documentação doincrement_key
para mais informações.increment_offset
(opcional): um número inteiro que define o número de períodos anteriores (com granularidade da chave de incremento) que são recriados para cada build incremental. O parâmetroincrement_offset
é útil no caso de dados atrasados, em que os períodos anteriores podem ter novos dados que não foram incluídos quando o incremento correspondente foi originalmente criado e anexado ao PDT.
Consulte a página de documentação do parâmetro increment_key
para ver exemplos de como criar PDTs incrementais a partir de tabelas derivadas nativas permanentes, tabelas derivadas permanentes baseadas em SQL e tabelas agregadas.
Veja um exemplo simples de um arquivo de visualização que define um PDT incremental com base em LookML:
view: flights_lookml_incremental_pdt {
derived_table: {
indexes: ["id"]
increment_key: "departure_date"
increment_offset: 3
datagroup_trigger: flights_default_datagroup
distribution_style: all
explore_source: flights {
column: id {}
column: carrier {}
column: departure_date {}
}
}
dimension: id {
type: number
}
dimension: carrier {
type: string
}
dimension: departure_date {
type: date
}
}
Essa tabela será totalmente construída na primeira vez que uma consulta for executada nela. Depois disso, a PDT será recriada em incrementos de um dia (increment_key: departure_date
), voltando três dias (increment_offset: 3
).
A chave de incremento é baseada na dimensão departure_date
, que é, na verdade, o prazo date
do grupo de dimensões departure
. Consulte a página de documentação do parâmetro dimension_group
para ter uma visão geral de como os grupos de dimensões funcionam. O grupo de dimensões e o período são definidos na visualização flights
, que é o explore_source
dessa TDP. Veja como o grupo de dimensões departure
é definido no arquivo de visualização flights
:
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
Interação de parâmetros de incremento e estratégia de persistência
As configurações de increment_key
e increment_offset
são independentes da estratégia de persistência do PDT:
- A estratégia de persistência do PDT incremental determina apenas quando o PDT aumenta. O criador de TDP não modifica a PDT incremental, a menos que a estratégia de persistência da tabela seja acionada ou que a PDT seja acionada manualmente com a opção Recriar tabelas derivadas e executar em uma exploração.
- Quando o PDT incrementar, o builder de PDT determinará quando os dados mais recentes foram adicionados anteriormente à tabela, em termos de incremento de tempo mais atual (o período definido pelo parâmetro
increment_key
). Com base nisso, o builder de TDP trunca os dados até o início do incremento de tempo mais recente na tabela e, em seguida, cria o incremento mais recente. - Se a PDT tiver um parâmetro
increment_offset
, o builder de PDT também recriará o número de períodos anteriores especificado no parâmetroincrement_offset
. Os períodos anteriores voltam do início do incremento de tempo mais atual (o período definido pelo parâmetroincrement_key
).
Os cenários de exemplo a seguir ilustram como as PDTs incrementais são atualizadas, mostrando a interação de increment_key
, increment_offset
e a estratégia de persistência.
Exemplo 1
Este exemplo usa um PDT com estas propriedades:
- Incrementar chave: data
- Incrementar deslocamento: 3
- Estratégia de persistência: acionada uma vez por mês no primeiro dia do mês.
Veja como esta tabela será atualizada:
- Uma estratégia de persistência mensal significa que a tabela é criada automaticamente uma vez por mês. Isso significa que, em 1o de junho, a última linha da tabela foi adicionada em 1o de maio.
- Como essa TDP tem uma chave de aumento com base na data, o criador de conteúdo será truncado de 1o de maio até o início do dia e recriará os dados de 1o de maio até 1o de junho atual.
- Além disso, essa TDP tem um deslocamento de incremento de
3
. Assim, o criador de TDP também recria os dados dos três períodos (dias) anteriores a 1o de maio. O resultado é que os dados são recriados dos dias 28, 29 e 30 de abril até o dia atual de 1o de junho.
Em termos de SQL, este é o comando que o builder de PDT executará no dia 1o de junho para determinar as linhas da TDP existente que precisam ser recriadas:
## Example SQL for BigQuery:
SELECT FORMAT_TIMESTAMP('%F %T',TIMESTAMP_ADD(MAX(pdt_name),INTERVAL -3 DAY))
## Example SQL for other dialects:
SELECT CAST(DATE_ADD(MAX(pdt_name),INTERVAL -3 DAY) AS CHAR)
E este é o comando SQL que o builder de PDT executará no dia 1o de junho para criar o incremento mais recente:
## Example SQL for BigQuery:
MERGE INTO [pdt_name] USING (SELECT [columns]
WHERE created_at >= TIMESTAMP('4/28/21 12:00:00 AM'))
AS tmp_name ON FALSE
WHEN NOT MATCHED BY SOURCE AND created_date >= TIMESTAMP('4/28/21 12:00:00 AM')
THEN DELETE
WHEN NOT MATCHED THEN INSERT [columns]
## Example SQL for other dialects:
START TRANSACTION;
DELETE FROM [pdt_name]
WHERE created_date >= TIMESTAMP('4/28/21 12:00:00 AM');
INSERT INTO [pdt_name]
SELECT [columns]
FROM [source_table]
WHERE created_at >= TIMESTAMP('4/28/21 12:00:00 AM');
COMMIT;
Exemplo 2
Este exemplo usa um PDT com estas propriedades:
- Estratégia de persistência: acionada uma vez por dia.
- Incrementar chave: mês
- Incrementar offset: 0
Veja como esta tabela será atualizada em 1o de junho:
- A estratégia de persistência diária significa que a tabela é criada automaticamente uma vez por dia. Em 1o de junho, a última linha da tabela foi adicionada em 31 de maio.
- Como a chave de incremento é baseada no mês, o criador de PDT será truncado de 31 de maio até o início do mês e recriará os dados de todo o mês até o dia atual, incluindo 1o de junho.
- Como essa PDT não tem deslocamento de incremento, nenhum período anterior é reconstruído.
Veja como esta tabela será atualizada em 2 de junho:
- Em 2 de junho, a última linha da tabela foi adicionada em 1o de junho.
- Como o criador de TDPs será truncado para o início do mês de junho e depois recriado os dados a partir de 1o de junho até o dia atual, eles serão recriados somente em 1o de junho e 2 de junho.
- Como essa PDT não tem deslocamento de incremento, nenhum período anterior é reconstruído.
Exemplo 3
Este exemplo usa um PDT com estas propriedades:
- Incrementar chave: mês
- Incrementar deslocamento: 3
- Estratégia de persistência: acionada uma vez por dia.
Esse cenário ilustra uma configuração insatisfatória para uma TDP incremental, porque é uma PDT de acionamento diário com uma compensação de três meses. Isso significa que pelo menos três meses de dados serão recriados todos os dias, o que seria um uso muito ineficiente de uma TDP incremental. No entanto, é um cenário interessante examinar como uma maneira de compreender como PDTs incrementais funcionam.
Veja como esta tabela será atualizada em 1o de junho:
- A estratégia de persistência diária significa que a tabela é criada automaticamente uma vez por dia. Em 1o de junho, por exemplo, a última linha da tabela será adicionada em 31 de maio.
- Como a chave de incremento é baseada no mês, o criador de PDT será truncado de 31 de maio até o início do mês e recriará os dados de todo o mês até o dia atual, incluindo 1o de junho.
- Além disso, essa TDP tem um deslocamento de incremento de
3
. Isso significa que o criador de TDP também recria os dados dos três meses anteriores (meses) antes de maio. Como resultado, os dados são recriados de fevereiro, março e abril até o dia atual, 1o de junho.
Veja como esta tabela será atualizada em 2 de junho:
- Em 2 de junho, a última linha da tabela foi adicionada em 1o de junho.
- O criador do PDT truncará o mês até 1o de junho e recriará os dados do mês de junho, incluindo 2 de junho.
- Além disso, devido ao deslocamento de incremento, o criador de TDP recria os dados dos três meses anteriores antes de junho. O resultado é que os dados são recriados de março, abril, maio e até o dia atual, 2 de junho.
Como testar um PDT incremental no modo de desenvolvimento
Antes de implantar uma nova PDT incremental no seu ambiente de produção, teste a PDT para ter certeza de que ela foi criada e incrementada. Para testar um PDT incremental no modo de desenvolvimento:
Crie uma exploração para o PDT:
- Em um arquivo de modelo associado, use o parâmetro
include
para incluir o arquivo de visualização do PDT no arquivo de modelo. - No mesmo arquivo de modelo, use o parâmetro
explore
para criar uma exploração para a visualização incremental do PDT.
include: "/views/e_faa_pdt.view" explore: e_faa_pdt {}
- Em um arquivo de modelo associado, use o parâmetro
Abra a ferramenta Explorar para o PDT. Para fazer isso, selecione o botão Ver ações do arquivo e escolha um nome.
Em "Explorar", selecione algumas dimensões ou medidas e clique em Executar. O Looker vai criar todo o PDT. Se esta for a primeira consulta executada no PDT incremental, o builder do PDT criará todo o PDT para obter os dados iniciais. Se a tabela for grande, a compilação inicial poderá levar um tempo significativo, assim como a criação de qualquer tabela grande.
Verifique se a TDP inicial foi criada das seguintes maneiras:
- Se você tiver a permissão
see_logs
, poderá verificar se a tabela foi criada procurando no Log de eventos do PDT. Se o PDT não criar eventos no log de eventos da PDT, verifique as informações de status na parte superior da ferramenta. Se estiver escrito "do cache", selecione Limpar o cache e atualizar para ver as informações mais recentes. - Caso contrário, você pode analisar os comentários na guia SQL da barra Dados do Explorar. A guia SQL mostra a consulta e as ações que serão realizadas quando ela for executada em "Explorar". Por exemplo, se os comentários na guia SQL exibirem
essa será a ação que será executada quando você clicar em Executar.-- generate derived table e_incremental_pdt
,
- Se você tiver a permissão
Depois de criar a versão inicial da PDT, solicite uma versão incremental usando a opção Rebuild Derived Tables & Run do Explorar.
Você pode usar os mesmos métodos de antes para verificar se o PDT foi criado de modo incremental:
- Se você tiver a permissão
see_logs
, poderá usar o Log de eventos do PDT para ver os eventoscreate increment complete
do PDT incremental. Se você não vir esse evento no log de eventos do PDT e o status da consulta for "do cache", selecione Limpar cache e atualizar para receber informações mais recentes. - Veja os comentários na guia SQL da barra Dados da guia Explorar. Nesse caso, os comentários indicarão que a PDT foi incrementada. Por exemplo:
-- increment persistent derived table e_incremental_pdt to generation 2
- Se você tiver a permissão
Depois de verificar se a PDT foi criada e incrementada corretamente, se você não quiser manter a exploração dedicada para a PDT, remova ou comente os parâmetros
explore
einclude
da PDT do arquivo de modelo.
Depois que o PDT for criado no modo de desenvolvimento, a mesma tabela será usada na produção após a implantação das alterações, a menos que você faça outras alterações na definição da tabela. Consulte a seção Tabelas persistentes no modo de desenvolvimento da página de documentação Tabelas derivadas no Looker para mais informações.
Dialetos de banco de dados compatíveis com PDTs incrementais
Para que o Looker seja compatível com PDTs incrementais no projeto do Looker, o dialeto do banco de dados precisa ser compatível com comandos da linguagem de definição de dados (DDL, na sigla em inglês) que permitem excluir e inserir linhas.
A tabela a seguir mostra quais dialetos são compatíveis com PDTs incrementais na versão mais recente do Looker: