Sobre uma tabela incremental
O Dataform atualiza as tabelas de maneira diferente com base no tipo delas. Durante cada execução de uma tabela ou visualização, o Dataform recria todo o tabela ou visualização do zero.
Quando você define uma tabela incremental, o Dataform cria a tabela do zero apenas pela primeira vez. Durante as execuções subsequentes, O Dataform apenas insere ou mescla novas linhas na tabela incremental de acordo com as condições configuradas.
O Dataform insere novas linhas somente nas colunas que já existem na na tabela incremental. Se você fizer mudanças na definição da tabela incremental como adicionar uma nova coluna, você precisa reconstruir a tabela do zero. Para fazer isso, da próxima vez que você acionar uma execução da tabela, Selecione a opção Executar com atualização completa.
Confira alguns casos de uso comuns para tabelas incrementais:
- Otimização de desempenho
- Para alguns tipos de dados, como registros da Web ou dados de análise, você pode querer para processar apenas novos registros, em vez de reprocessar a tabela inteira.
- Redução da latência
- É possível usar tabelas incrementais para executar fluxos de trabalho com rapidez, mas frequência, reduzindo a latência downstream das tabelas de saída.
- Snapshots diários
- É possível configurar uma tabela incremental para criar snapshots diários do dados da tabela, por exemplo, para análise longitudinal das configurações do usuário armazenadas em um banco de dados de produção.
Antes de começar
No Console do Google Cloud, acesse a página Dataform.
Selecione ou crie um repositório.
Selecione ou crie um espaço de trabalho de desenvolvimento.
Crie uma tabela da
incremental
tipo de tabela.
Funções exigidas
Para ter as permissões necessárias para configurar uma tabela incremental,
peça ao administrador para conceder a você
Papel do IAM Editor do Dataform (roles/dataform.editor
) em espaços de trabalho.
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Processar um subconjunto de linhas em uma tabela incremental
Determinar um subconjunto de linhas a serem processadas pelo Dataform durante cada
adicione uma cláusula WHERE
condicional à tabela incremental SQLX
de definição de código. Na cláusula WHERE
,
especifique uma condição incremental e uma não incremental.
O Dataform aplica a condição incremental durante a execução da tabela
sem uma atualização completa e a condição não incremental durante a execução
com uma atualização completa.
Para configurar uma tabela incremental, siga estas etapas:
- Acesse seu espaço de trabalho de desenvolvimento.
- No painel Files, expanda
definitions/
. - Abra um arquivo SQLX de definição de tabela incremental.
Insira uma cláusula
WHERE
no seguinte formato:config { type: "incremental" } SELECT_STATEMENT ${when(incremental(), `WHERE INCREMENTAL_CONDITION`, `WHERE NON_INCREMENTAL_CONDITION`) }
Substitua:
- SELECT_STATEMENT: a instrução
SELECT
que define sua tabela INCREMENTAL_CONDITION: a condição especificada em
WHERE
. cláusula para selecionar linhas a serem processadas pelo Dataform durante a execução da tabela sem precisar atualizar completamente.NON_INCREMENTAL_CONDITION: a condição especificada na Cláusula
WHERE
para selecionar linhas a serem processadas pelo Dataform durante a tabela com uma atualização completa.
- SELECT_STATEMENT: a instrução
Opcional: clique em Formatar.
O exemplo de código a seguir mostra uma tabela incremental que
processa linhas da tabela productiondb.logs
:
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(),
`WHERE date > (SELECT MAX(date) FROM ${self()}) AND country = "UK"`,
`WHERE country = "UK"`)}
O exemplo de código a seguir mostra uma tabela incremental que cria um snapshot
da tabela productiondb.customers
:
config { type: "incremental" }
SELECT CURRENT_DATE() AS snapshot_date, customer_id, name, account_settings FROM ${ref("productiondb", "customers")}
${when(incremental(), `WHERE snapshot_date > (SELECT MAX(snapshot_date) FROM ${self()})`) }
Mesclar linhas em uma tabela incremental
Para garantir que uma tabela incremental contenha apenas uma linha correspondente a um
combinação de colunas selecionada, defina as colunas selecionadas como uniqueKey
a
mesclar linhas que tenham o mesmo uniqueKey
. Ao atualizar a tabela,
O Dataform mescla linhas com uniqueKey
em vez de anexá-las.
Para configurar a mesclagem em uma tabela incremental, siga estas etapas:
- Acesse seu espaço de trabalho de desenvolvimento.
- No painel Files, expanda
definitions/
. - Selecione um arquivo SQLX de definição de tabela incremental
No bloco
config
, defina as colunas selecionadas comouniqueKey
. no seguinte formato:uniqueKey: ["COLUMN_NAME"]
Substitua COLUMN_NAME pelo nome de uma coluna selecionada.
Opcional: clique em Formatar.
O exemplo de código a seguir mostra uma tabela incremental com o transaction_id
definida como uniqueKey
para garantir que ela sempre contenha uma linha:
config {
type: "incremental",
uniqueKey: ["transaction_id"]
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Filtrar linhas em uma tabela incremental
Em uma tabela particionada incremental, para evitar a verificação do Dataform
tabela inteira para encontrar linhas correspondentes, defina updatePartitionFilter
para considerar apenas
um subconjunto de registros.
O exemplo de código a seguir mostra uma tabela particionada incremental com mesclagem
definido definindo as propriedades uniqueKey
e updatePartitionFilter
:
config {
type: "incremental",
uniqueKey: ["transaction_id"],
bigquery: {
partitionBy: "DATE(timestamp)",
updatePartitionFilter:
"timestamp >= timestamp_sub(current_timestamp(), interval 24 hour)"
}
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Evitar verificações completas de tabela ao ingerir uma tabela particionada
Ao criar uma tabela incremental que faz referência a uma tabela particionada, recomendamos que você crie sua consulta de tabela para evitar verificações completas de tabelas da tabela particionada durante cada atualização incremental.
É possível limitar o número de partições que o BigQuery verifica para atualizar.
tabela incremental usando uma expressão constante no
consulta de tabela. Transformar um valor da tabela particionada em uma constante
expressão, use scripts do BigQuery para
declare o valor como uma variável no bloco pre_operations
.
Em seguida, use a variável como uma expressão constante em uma cláusula WHERE
na
a consulta SELECT
.
Com essa configuração, o Dataform atualiza a tabela incremental nas partições mais recentes da tabela particionada referenciada sem examinar a tabela inteira.
Para configurar uma tabela incremental que faz referência a uma tabela particionada e evitar verificações completas de tabelas, siga estas etapas:
- Acesse seu espaço de trabalho de desenvolvimento.
- No painel Files, expanda
definitions/
. - Selecione um arquivo SQLX de definição de tabela incremental
- No bloco
pre_operations
, declarar uma variável com script do BigQuery. - Filtre a instrução
SELECT
que define a tabela com uma cláusulaWHERE
. que faz referência à variável declarada. - Opcional: clique em Formatar.
O exemplo de código a seguir mostra uma tabela incremental na qual o código
A tabela raw_events
é particionada por event_timestamp
:
config {
type: "incremental",
}
pre_operations {
DECLARE event_timestamp_checkpoint DEFAULT (
${when(incremental(),
`SELECT max(event_timestamp) FROM ${self()}`,
`SELECT timestamp("2000-01-01")`)}
)
}
SELECT
*
FROM
${ref("raw_events")}
WHERE event_timestamp > event_timestamp_checkpoint
No exemplo de código anterior, a variável event_timestamp_checkpoint
é
definida no bloco pre_operations
.
A variável event_timestamp_checkpoint
é usada como uma expressão constante
na cláusula WHERE
.
Recriar uma tabela incremental do zero com atualização completa
É possível forçar uma tabela incremental a ser recriada do zero usando o
interface de linha de comando com a opção --full-refresh
ou com a opção Executar com atualização completa quando
acionando uma execução do fluxo de trabalho.
Ao selecionar a opção de atualização completa, no espaço de trabalho de desenvolvimento ou
usando a CLI do Dataform, o Dataform ignora as
parâmetro ${when(incremental(), ... }
durante a execução e recria a
com uma instrução CREATE OR REPLACE
.
Proteger uma tabela incremental da atualização completa
evitar que uma tabela incremental seja recriada do zero e em potencial
perda de dados, é possível definir a tabela incremental como protected
. Talvez você queira
evitar que uma tabela incremental seja recriada se a fonte de dados for temporária.
Para marcar uma tabela incremental como protected
, siga estas etapas:
- Acesse seu espaço de trabalho de desenvolvimento.
- No painel Files, expanda
definitions/
. - Selecione um arquivo SQLX de definição de tabela incremental.
- No bloco
config
, digiteprotected: true
. - Opcional: clique em Formatar.
O exemplo de código a seguir mostra uma tabela incremental marcada como protected
:
config {
type: "incremental",
protected: true
}
SELECT ...
A seguir
- Para aprender a definir uma tabela, consulte Criar uma tabela.
- Para aprender a usar a interface de linha de comando do Dataform, consulte Use a CLI do Dataform.
- Para aprender a acionar execuções manualmente, consulte Execução do acionador.