Limpar e validar dados com processamento de lotes ou transmissão
A limpeza e a validação dos dados são essenciais para garantir a qualidade dos dados ativos em um site lakehouse. Este artigo descreve as ofertas de produtos Databricks projetadas para facilitar a qualidade dos dados, além de fornecer recomendações para a definição da lógica de negócios para implementar regras personalizadas.
imposição de esquema on Databricks
Delta Lake fornece semântica para impor verificações de esquema e restrição na gravação, o que oferece garantias sobre a qualidade dos dados para tabelas em um lakehouse.
A imposição de esquema garante que os dados gravados em uma tabela sigam um esquema predefinido. As regras de validação do esquema variam de acordo com as operações. Ver imposição de esquema.
Para lidar com a evolução do esquema, o Delta fornece mecanismos para fazer alterações no esquema e tabelas em evolução. É importante considerar cuidadosamente quando usar a evolução do esquema para evitar campos perdidos ou falhas no pipeline. Para obter detalhes sobre a atualização manual ou automática de esquemas, consulte Atualizar o esquema da tabela Delta Lake.
Restrições da tabela
As restrições podem assumir a forma de restrições informativas primárias key e restrições estrangeiras key ou restrições impostas. Consulte a cláusula ADD CONSTRAINT.
As restrições de tabela em Databricks são impostas ou informativas.
As restrições impostas incluem as restrições NOT NULL
e CHECK
.
As restrições informativas incluem restrições primárias key e restrições estrangeiras key.
Consulte Restrições em bancos de dados.
Lidar com valores nulos ou ausentes
NOT NULL pode ser aplicado em tabelas Delta. Ele só pode ser ativado em uma tabela existente se nenhum registro existente na coluna for nulo e impede que novos registros com valores nulos sejam inseridos em uma tabela.
Aplicação de padrões
As expressões regulares (regex) podem ser usadas para impor padrões esperados em um campo de dados. Isso é particularmente útil ao lidar com dados textuais que precisam aderir a formatos ou padrões específicos.
Para impor um padrão usando regex, o senhor pode usar as funções REGEXP
ou RLIKE
no SQL. Essas funções permitem que o senhor faça a correspondência de um campo de dados com um padrão regex especificado.
Veja um exemplo de como usar a restrição CHECK
com regex para aplicação de padrões no SQL:
CREATE TABLE table_name (
column_name STRING CHECK (column_name REGEXP '^[A-Za-z0-9]+$')
);
Aplicação de valores
As restrições podem ser usadas para impor intervalos de valores nas colunas de uma tabela. Isso garante que somente valores válidos dentro do intervalo especificado possam ser inseridos ou atualizados.
Para impor uma restrição de intervalo de valores, o senhor pode usar a restrição CHECK
no SQL. A restrição CHECK
permite que o senhor defina uma condição que deve ser verdadeira para cada linha da tabela.
Veja um exemplo de como usar a restrição CHECK
para impor um intervalo de valores em uma coluna:
CREATE TABLE table_name (
column_name INT CHECK (column_name >= 0 AND column_name <= 100)
);
Definir e configurar expectativas usando Delta Live Tables.
Delta Live Tables permite que o senhor defina as expectativas ao declarar a visualização materializada ou as tabelas de transmissão. O senhor pode optar por configurar as expectativas para avisá-lo sobre violações, eliminar registros violados ou reprovar cargas de trabalho com base em violações. Veja como gerenciar a qualidade dos dados com Delta Live Tables.
Transmitir tipos de dados
Ao inserir ou atualizar dados em uma tabela, o site Databricks converte os tipos de dados quando pode fazê-lo com segurança sem perder informações.
Consulte os artigos a seguir para obter detalhes sobre os comportamentos de casting:
Lógica comercial personalizada
É possível usar filtros e cláusulas WHERE
para definir a lógica personalizada que coloca em quarentena os registros ruins e impede que eles se propaguem para as tabelas downstream. As cláusulas CASE WHEN ... OTHERWISE
permitem que o senhor defina a lógica condicional para aplicar a lógica comercial aos registros que violam as expectativas de forma previsível.
DECLARE current_time = now()
INSERT INTO silver_table
SELECT * FROM bronze_table
WHERE event_timestamp <= current_time AND quantity >= 0;
INSERT INTO quarantine_table
SELECT * FROM bronze_table
WHERE event_timestamp > current_time OR quantity < 0;
Observação
Databricks recomenda sempre processar os dados filtrados como operações de gravação separadas, especialmente ao usar a transmissão estruturada. O uso de .foreachBatch
para gravar em várias tabelas pode levar a resultados inconsistentes.
Por exemplo, o senhor pode ter um sistema upstream que não é capaz de codificar valores NULL
e, portanto, o valor de espaço reservado -1
é usado para representar dados ausentes. Em vez de escrever uma lógica personalizada para todas as consultas downstream em Databricks para ignorar os registros que contêm -1
, o senhor poderia usar uma instrução case when para substituir dinamicamente esses registros como transformações.
INSERT INTO silver_table
SELECT
* EXCEPT weight,
CASE
WHEN weight = -1 THEN NULL
ELSE weight
END AS weight
FROM bronze_table;