Executando verificação de segurança...
6

[Dados] O que são as Delta Lake Constraints no Delta Lake?


O que são as Delta Lake Constraints no Delta Lake?

Sumário

  1. O que são Delta Lake Constraints?
  2. Configuração do PySpark e Delta
  3. Entendendo Delta Constraints na Prática
    3.1 Criando DataFrame de Usuários
    3.2 Adicionando Constraint de Número de Caracteres
    3.3 Adicionando Constraint de Valores Positivos
    3.4 Listando as Constraints da Tabela
    3.5 Valores Not Nullable
  4. Conclusões
  5. Referências

Introdução

  • Salve turma, trazendo um pouco sobre algumas features e conceitos sobre a Área de Dados para o TabNews!!!

1. O que são Delta Lake Constraints?

  • Delta Lake Constraints, como o próprio nome diz, são restrições ou regras que protegem a inserção de qualquer dado em uma Delta Table.
  • O Delta Lake por padrão, permite dar append de novos dados a uma tabela desde que respeite a tipagem das colunas (data types) de uma Delta Table. Por exemplo, você pode adicionar valores numéricos a uma coluna com Integer Type.
  • Porém, digamos que você tenha uma coluna denominada "CPF", que tenha comprimento igual à 11 caracteres, ou uma coluna "idade" que não permite valores negativos. Por padrão, você consegue adicionar valores diferentes através do append no Delta desde que respeite a tipagem das colunas.
  • O Delta Lake Constraints permite adicionar regras que previna esse tipo de inserção em uma Delta Table.

Vamos ver a seguir como utiliza-la. Todos os códigos utilizados abaixo estarão nesse repositório do GitHub.

2. Configuração do PySpark + Delta

  • Na demonstração abaixo, estarei usando as seguintes bibliotecas com suas respectivas versões:

  • Primeiro vamos importar as bibliotecas do delta e pyspark. Após isso, vamos inicializar a SparkSession passando as seguintes configurações para configurar o Delta Catalog.

Configuração do PySpark e Delta - Link aqui.

3. Entendendo Delta Constraints na Prática

3.1 Criando DataFrame de Usuários

  • Para começar, vamos criar uma Delta Table de usuários com três colunas: "nome", "idade" e "CPF", e adicionar três usuários nessa tabela.
    Criando DataFrame de Usuários - Link aqui.

3.2 Adicionando Constraint de Número de Caracteres

  • Com a tabela "usuarios" criada, vamos adicionar uma constraint na coluna "CPF" que permita apenas a inserção de novos dados com tamanho igual a 11 caracteres. Para isso, execute o seguinte comando:
    Adicionando Constraint de Número de Caracteres - Link aqui.

3.3 Adicionando Constraint de Valores Positivos

  • Vamos também adicionar uma constraint na coluna "idade" que permita apenas a inserção de valores numéricos positivos. Para isso, execute o seguinte comando:
    Adicionando Constraint de Valores Positivos - Link aqui.

3.4 Listando as Constraints da Tabela

  • É possível visualizar todas as constraints adicionadas a uma tabela através do comando SHOW TBLPROPERTIES No resultado, podemos observar todas as constraints criadas.
    Listando as Constraints da Tabela - Link aqui.

3.5 Verificando o Funcionamento das Constraints

  • Para testar, vamos tentar adicionar valores que infrinjam as constraints criadas:
  • Tentar adicionar um valor com somente um caractere na coluna "CPF".
  • Tentar adicionar um valor negativo na coluna "idade".

Verificando o Funcionamento das Constraints - Parte I - Link aqui.

Verificando o Funcionamento das Constraints - Parte II - Link aqui.

  • Em ambos os casos, podemos observar que são emitidos erros notificando qual constraint afetada e o valor que foi tentado adicionar.

3.6 Valores Not Nullable

  • Além dessas constraints, podemos adicionar outra para prevenir que valores nulos sem adicionados a uma Delta Table através da constraint NOT NULL. Para isso, é necessário realizar a configuração no momento da criação da tabela.
    Valores Not Nullable - Link aqui.

  • Se tentarmos adicionar um valor nulo na coluna "CPF" vamos receber a seguinte mensagem de erro:
    Tentativa de append de valores nulos - Link aqui.

4. Conclusões

  • As constraints conseguem garantir que dados inválidos ou indesejados não sejam adicionados à sua Delta Table.
  • Porém, vale ressaltar que, não necessariamente se aplica a qualquer ingestão de dados, muitas vezes queremos inserir todos os tipos de dados, mas outras vezes queremos que as Delta Tables sejam rígidas e aceitam apenas dados limpos.

5. Referências



1

vlw demais Thiago. Estou utilizando bastante Databricks no meu dia dia como Eng de Dados. esses conceitos sao muito importantes pra área. vlw 🤟

1

Valeu Eduardo! Estou escrevendo outras publicações com outros conceitos, em breve estou lançando aqui!

Fico a disposição para conversar sobre a área se precisar, meu LinkedIn está ali nos links! 🤟🤟🤟