Neste documento, mostramos como definir a relação entre os objetos no fluxo de trabalho do 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 o dependência após a dependência. Você define o relacionamento declarando dependências dentro do arquivo de definição do SQLX do objeto dependente.
As declarações de dependência formam uma árvore de dependências do fluxo de trabalho SQL que determina a ordem em que o Dataform executa os objetos de fluxo de trabalho SQL.
É possível definir a relação de dependência entre os seguintes objetos de fluxo de trabalho SQL:
- Declarações da fonte de dados
- Declarações de fontes de dados do BigQuery que permitem referenciar essas fontes em definições de tabela do Dataform e 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 seu fluxo de trabalho SQL. O Dataform é compatível com os seguintes tipos de tabela: tabela, tabela incremental, visualização e visualização materializada. É possível definir uma tabela como dependente e como dependente.
- Operações SQL personalizadas
- Instruções SQL que o Dataform executa no BigQuery como está, sem modificação. É possível definir uma operação SQL personalizada definida em um arquivo
type: operations
como uma dependência e como uma dependência. Para declarar uma operação SQL personalizada como dependência na funçãoref
, defina a propriedadehasOutput
comotrue
no arquivo de definição do SQLX da operação SQL personalizada. - Declarações
- Consultas de teste de qualidade de dados que podem ser usadas para validar os dados da tabela.
O Dataform executa declarações sempre que atualiza seu fluxo de trabalho SQL e alerta caso alguma declaração falhe. É possível definir uma declaração definida em um arquivo
type: assertion
como uma dependência e como uma dependência, 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 principal do Dataform
ref
para fazer referência a ela em uma instruçãoSELECT
. - Declare uma lista de dependências no bloco
config
de um arquivo de definição do 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, declarações, declarações da fonte de dados ou operações.
Funções exigidas
Para receber as permissões necessárias para declarar dependências de tabelas, declarações, declarações de fonte de dados e operações SQL personalizadas, peça ao administrador para conceder a você o papel de Editor do Dataform (roles/dataform.editor
) nos espaços de trabalho.
Para obter mais informações sobre como conceder papéis, consulte
Gerenciar o acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Declarar uma dependência como argumento da função ref
Para fazer referência 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 Dataform Core 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 dos principais métodos de contexto do Dataform.
Para mais informações sobre como usar a função ref
em uma definição de tabela, consulte Sobre definições de tabela.
O exemplo de código a seguir mostra a declaração da fonte de dados source_data
adicionada como um argumento da função ref
no arquivo de definição incremental_table.sqlx
do SQLX de uma tabela incremental:
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
Na exemplo de código anterior, source_data
é automaticamente declarada 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 de uma declaração custom_assertion.sqlx
:
// 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
Na exemplo de código anterior, some_table
é automaticamente declarada como uma dependência de custom_assertion
. Durante a execução, o Dataform primeiro executa some_table
e depois executa custom_assertion
depois que some_table
é criado.
Declarar dependências no bloco config
Para declarar dependências que não são referenciadas na definição de instrução SQL do dependente, mas que precisam ser executadas antes da tabela, declaração ou operação SQL personalizada, siga estas etapas:
- No espaço de trabalho de desenvolvimento, no painel Arquivos, expanda
o diretório
definitions/
. - Selecione o arquivo SQLX da tabela, asserção ou operação personalizada que você quer editar.
- No bloco
config
do arquivo, digite o seguinte snippet de código:
dependencies: [ "DEPENDENCY", ]
Substitua DEPENDENCY pelo nome do arquivo da tabela, declaração, declaração da fonte de dados ou operação SQL personalizada que você quer adicionar como dependência. Você pode inserir vários nomes de arquivos.
A exemplo de código a seguir mostra a declaração 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 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 o código em todo o fluxo de trabalho SQL com inclusões, consulte Reutilizar variáveis e funções com inclusões.