Sobre declarações
Uma declaração é uma consulta de teste de qualidade de dados que encontra linhas que violam uma ou mais condições especificadas na consulta. Se a consulta retornar alguma linha, a declaração terá falhado. O Dataform executa declarações sempre que atualiza o fluxo de trabalho e alerta você se alguma declaração falhar.
O Dataform cria automaticamente visualizações no BigQuery que contêm os resultados de consultas de declaração compiladas. Conforme configurado no arquivo de configurações do fluxo de trabalho, o Dataform cria essas visualizações em um esquema de declarações em que é possível inspecionar os resultados da declaração.
Por exemplo, para o esquema padrão dataform_assertions, o Dataform
cria uma visualização no BigQuery no seguinte formato:
dataform_assertions.assertion_name.
É possível criar declarações para todos os tipos de tabela do Dataform: tabelas, tabelas incrementais, visualizações e visualizações materializadas.
É possível criar declarações das seguintes maneiras:
Adicionar declarações integradas ao bloco de configuração de uma tabela.
É possível adicionar declarações integradas ao bloco
configde uma tabela e especificar as condições delas.Adicionar declarações manuais em um arquivo SQLX separado.
Você escreve manualmente declarações personalizadas em um arquivo SQLX separado para casos de uso avançados ou para conjuntos de dados não criados pelo Dataform.
Antes de começar
No Google Cloud console, acesse a página Dataform.
Selecione ou crie um repositório.
Selecione ou crie um espaço de trabalho de desenvolvimento.
Funções exigidas
Para conseguir as permissões necessárias para criar declarações, peça ao administrador que conceda a você os seguintes papéis do IAM:
- Editor do Dataform (
roles/dataform.editor) no espaço de trabalho -
Para sincronizar metadados com o Knowledge Catalog:
Editor do catálogo do Dataplex (
roles/dataplex.catalogEditor) no projeto ou no grupo de entradas@bigquery
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 com papéis personalizados ou outros papéis predefinidos.
Criar declarações integradas
É possível adicionar declarações integradas do Dataform ao bloco config de uma tabela. O Dataform executa essas declarações após a criação da tabela. Depois que o Dataform criar a tabela, você poderá conferir se a declaração foi aprovada na guia Registros de execução do fluxo de trabalho do seu espaço de trabalho.
É possível criar as seguintes declarações no bloco config de uma tabela:
nonNullEssa condição afirma que as colunas especificadas não são nulas em todas as linhas da tabela. Essa condição é usada para colunas que nunca podem ser nulas.
O exemplo de código a seguir mostra uma declaração
nonNullno blococonfigde uma tabela:
config {
type: "table",
assertions: {
nonNull: ["user_id", "customer_id", "email"]
}
}
SELECT ...
rowConditionsEssa condição afirma que todas as linhas da tabela seguem a lógica personalizada definida. Cada condição de linha é uma expressão SQL personalizada, e cada linha da tabela é avaliada em relação a cada condição de linha. A declaração falha se alguma linha da tabela resultar em
false.O exemplo de código a seguir mostra uma declaração
rowConditionspersonalizada no blococonfigde uma tabela incremental:
config {
type: "incremental",
assertions: {
rowConditions: [
'signup_date is null or signup_date > "2022-08-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
uniqueKeyEssa condição afirma que, em uma coluna especificada, nenhuma linha da tabela tem o mesmo valor.
O exemplo de código a seguir mostra uma declaração
uniqueKeyno blococonfigde uma visualização:
config {
type: "view",
assertions: {
uniqueKey: ["user_id"]
}
}
SELECT ...
uniqueKeysEssa condição afirma que, nas colunas especificadas, nenhuma linha da tabela tem o mesmo valor. A declaração falha se houver mais de uma linha na tabela com os mesmos valores para todas as colunas especificadas.
O exemplo de código a seguir mostra uma declaração
uniqueKeysno blococonfigde uma tabela:
config {
type: "table",
assertions: {
uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
}
}
SELECT ...
Adicionar declarações ao bloco config
Para adicionar declarações ao bloco de configuração de uma tabela, siga estas etapas:
- No espaço de trabalho de desenvolvimento, no painel Arquivos, selecione um arquivo SQLX de definição de tabela.
- No bloco
configdo arquivo de tabela, insiraassertions: {}. - Dentro de
assertions: {}, adicione suas declarações. - Opcional: clique em Formatar.
O exemplo de código a seguir mostra as condições adicionadas no bloco config:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
rowConditions: [
'signup_date is null or signup_date > "2019-01-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
Criar declarações manuais com SQLX
As declarações manuais são consultas SQL que você escreve em um arquivo SQLX dedicado. Uma consulta SQL de declaração manual precisa retornar zero linhas. Se a consulta retornar linhas quando for executada, a declaração falhará.
Para adicionar declarações manuais em um novo arquivo SQLX, siga estas etapas:
- No painel Arquivos, ao lado de
definitions/, clique no menu
Mais. - Selecione Criar arquivo.
No campo Adicionar um caminho de arquivo, insira o nome do arquivo seguido por
.sqlx. Por exemplo,definitions/custom_assertion.sqlx.Os nomes de arquivos só podem incluir números, letras, hifens e sublinhados.
Selecione Criar arquivo.
No painel Arquivos, clique no novo arquivo.
No arquivo, insira:
config { type: "assertion" }Abaixo do bloco
config, escreva sua consulta SQL ou várias consultas.Opcional: clique em Formatar.
O exemplo de código a seguir mostra uma declaração manual em um arquivo SQLX que afirma
que os campos A, B e c nunca são NULL em sometable:
config { type: "assertion" }
SELECT
*
FROM
${ref("sometable")}
WHERE
a IS NULL
OR b IS NULL
OR c IS NULL
A seguir
- Para saber mais sobre os tipos de declaração, consulte a API Dataform.
- Para saber como definir declarações com JavaScript, consulte Criar fluxos de trabalho exclusivamente com JavaScript.
- Para saber como executar fluxos de trabalho manualmente, consulte Acionar execuções manualmente.