Este documento mostra como definir a relação entre objetos no fluxo de trabalho SQL no Dataform declarando dependências.
É possível definir uma relação de dependência entre objetos de um fluxo de trabalho SQL. Em uma relação de dependência, a execução do objeto dependente depende da execução do objeto de dependência. Isso significa que o Dataform executa a dependência depois dela. Você define a relação declarando dependências no arquivo de definição SQLX do objeto dependente.
As declarações de dependência formam uma árvore de dependência do fluxo de trabalho SQL que determina a ordem em que o Dataform executa seus objetos de fluxo de trabalho SQL.
É possível definir a relação de dependência entre os seguintes objetos de fluxo de trabalho do SQL:
- Declarações de fontes de dados
- Declarações de origens de dados do BigQuery que permitem fazer referência a essas origens de dados nas definições de tabela do Dataform e nas operações SQL. É possível definir uma declaração de fonte de dados como uma dependência, mas não como dependente.
- Tabelas
- Tabelas criadas no Dataform com base nas fontes de dados declaradas ou em outras tabelas no fluxo de trabalho SQL. O Dataform oferece suporte aos seguintes tipos de tabela: tabela, tabela incremental, visualização e visualização materializada. É possível definir uma tabela como dependência e dependente.
- Operações SQL personalizadas
- Instruções SQL que o Dataform executa no BigQuery como estão,
sem modificações. É possível definir uma operação SQL personalizada definida em um
arquivo
type: operations
como uma dependência e como dependente. Para declarar uma operação SQL personalizada como uma dependência na funçãoref
, é necessário definir a propriedadehasOutput
comotrue
no arquivo de definição SQLX da operação SQL personalizada. - Afirmações
- Consultas de teste de qualidade de dados que podem ser usadas para testar dados de tabelas.
O Dataform executa declarações sempre que atualiza seu fluxo de trabalho SQL e
emite um alerta se alguma delas falhar. É possível definir uma declaração definida em um
arquivo
type: assertion
como uma dependência e como dependente declarando dependências no blococonfig
.
É possível definir a relação de dependência das seguintes maneiras:
- Declare uma dependência usando a função
ref
principal do Dataform para fazer referência à dependência em uma instruçãoSELECT
. - Declare uma lista de dependências no bloco
config
de um arquivo de definição SQLX.
Antes de começar
- Crie e inicialize um espaço de trabalho de desenvolvimento no seu repositório.
- Opcional: declare uma fonte de dados.
- Crie pelo menos dois objetos de fluxo de trabalho SQL: tabelas, asserções, declarações de fonte de dados ou operações.
Funções exigidas
Para receber as permissões necessárias para declarar dependências de tabelas, declarações de fontes de dados, declarações de fontes de dados e operações SQL personalizadas, peça ao administrador que conceda a você o papel do IAM Editor de formulário de dados (roles/dataform.editor
) nos espaços de trabalho.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Declarar uma dependência como um argumento da função ref
Para referenciar e declarar automaticamente uma dependência em uma instrução SELECT
,
adicione a dependência como um argumento da função ref
.
A função ref
é uma função integrada do núcleo do Dataform que permite
referenciar e depender automaticamente de qualquer tabela, declaração de fonte de dados ou
operação SQL personalizada com a propriedade hasOutput
definida como true
no fluxo de trabalho SQL.
Para mais informações sobre a função ref
, consulte
Referência de métodos de contexto principais do Dataform.
Para mais informações sobre como usar a função ref
em uma definição de tabela, consulte
Sobre as definições de tabela.
O exemplo de código abaixo mostra a declaração da fonte de dados source_data
adicionada
como um argumento da função ref
no arquivo de definição SQLX incremental_table.sqlx
de uma tabela incremental:
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
No exemplo de código anterior, source_data
é declarado automaticamente como uma
dependência de incremental_table
.
O exemplo de código a seguir mostra o arquivo SQLX de definição de tabela some_table
adicionado
como um argumento da função ref
no arquivo de definição SQLX custom_assertion.sqlx
de uma declaração:
// filename is custom_assertion.sqlx
config { type: "assertion" }
SELECT
*
FROM
${ref("some_table")}
WHERE
a is null
or b is null
or c is null
No exemplo de código anterior, some_table
é declarado automaticamente como uma
dependência de custom_assertion
. Durante a execução, o Dataform executa
some_table
primeiro e, em seguida, executa custom_assertion
quando some_table
é criado.
Declarar dependências no bloco config
Para declarar dependências que não são referenciadas na definição da instrução SQL do dependente, mas que precisam ser executadas antes da tabela, da declaração ou da operação SQL personalizada, siga estas etapas:
- No espaço de trabalho de desenvolvimento, no painel Files, abra
o diretório
definitions/
. - Selecione a tabela, a declaração ou o arquivo SQLX da operação SQL personalizada que você quer editar.
No bloco
config
do arquivo, insira este snippet de código:dependencies: [ "DEPENDENCY", ]
Substitua DEPENDENCY pelo alvo da string. Por exemplo, o nome de arquivo da ação que você quer adicionar como uma dependência. É possível inserir vários alvos, separados por vírgulas.
Opcional: clique em Formato.
O exemplo de código a seguir mostra a tabela some_table
e a declaração some_assertion
adicionadas como dependências ao bloco config
de um arquivo de definição de tabela:
config { dependencies: [ "some_table", "some_assertion" ] }
A seguir
- Para saber como definir declarações como dependências, consulte Testar tabelas com declarações.
- Para saber como declarar uma fonte de dados, consulte Declarar uma fonte de dados.
- Para saber como definir operações SQL personalizadas, consulte Adicionar operações SQL personalizadas.
- Para saber como reutilizar código no fluxo de trabalho SQL com inclusões, consulte Reutilizar código em um único repositório com inclusões.