Testar tabelas com declarações

Este documento mostra como usar o núcleo do Dataform para criar asserções de tabela do Dataform e testar o código do fluxo de trabalho.

Sobre as 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 linhas, a declaração vai falhar. O Dataform executa declarações sempre que atualiza seu fluxo de trabalho SQL e alerta você se alguma declaração falhar.

O Dataform cria automaticamente visualizações no BigQuery que contêm os resultados das 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 das declarações.

Por exemplo, para o esquema dataform_assertions padrão, o Dataform cria uma visualização no BigQuery com o 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:

Antes de começar

  1. No Google Cloud console, acesse a página Dataform.

    Acessar a página do Dataform

  2. Selecione ou crie um repositório.

  3. Selecione ou crie um espaço de trabalho de desenvolvimento.

  4. Criar uma tabela.

Funções exigidas

Para receber as permissões necessárias para criar declarações, 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.

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 cria a tabela, você pode conferir se a declaração foi aceita 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:

  • nonNull

    Essa 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 abaixo mostra uma declaração nonNull no bloco config de uma tabela:

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    Essa condição afirma que todas as linhas da tabela seguem a lógica personalizada que você define. Cada condição de linha é uma expressão SQL personalizada, e cada linha da tabela é avaliada de acordo com cada condição de linha. A declaração falhará se qualquer linha da tabela resultar em false.

    O exemplo de código a seguir mostra uma declaração rowConditions personalizada no bloco config de uma tabela incremental:

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    Essa condição afirma que, em uma coluna especificada, nenhuma linha da tabela tem o mesmo valor.

    O exemplo de código abaixo mostra uma declaração uniqueKey no bloco config de uma visualização:

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    Essa 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 abaixo mostra uma declaração uniqueKeys no bloco config de 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:

  1. No espaço de trabalho de desenvolvimento, no painel Files, selecione um arquivo SQLX de definição de tabela.
  2. No bloco config do arquivo de tabela, insira assertions: {}.
  3. Em assertions: {}, adicione suas declarações.
  4. Opcional: clique em Formato.

O exemplo de código abaixo 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 gravadas em um arquivo SQLX dedicado. Uma consulta SQL de declaração manual precisa retornar zero linhas. Se a consulta retornar linhas quando executada, a declaração vai falhar.

Para adicionar declarações manuais em um novo arquivo SQLX, siga estas etapas:

  1. No painel Arquivos, ao lado de definitions/, clique no menu Mais.
  2. Selecione Criar arquivo.
  3. No campo Adicionar um caminho de arquivo, insira o nome do arquivo seguido de .sqlx. Por exemplo, definitions/custom_assertion.sqlx.

    Os nomes de arquivo só podem incluir números, letras, hifens e sublinhados.

  4. Selecione Criar arquivo.

  5. No painel Files, clique no novo arquivo.

  6. No arquivo, insira:

    config {
      type: "assertion"
    }
    
  7. Abaixo do bloco config, escreva sua consulta SQL ou várias consultas.

  8. Opcional: clique em Formato.

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