레이크하우스에서 데이터 자산의 품질을 보장하기 위해서는 데이터 정리 및 유효성 검사가 필수적입니다. 이 문서에서는 데이터 품질을 용이하게 하기 위해 설계된 Azure Databricks 제품 제품과 사용자 지정 규칙을 구현하는 비즈니스 논리를 정의하기 위한 권장 사항을 제공합니다.
Azure Databricks의 스키마 적용
Delta Lake는 쓰기 시 스키마 및 제약 조건 검사를 적용하는 의미 체계를 제공하며, 레이크하우스의 테이블에 대한 데이터 품질에 대한 보장을 제공합니다.
스키마 적용은 테이블에 기록된 데이터가 미리 정의된 스키마를 준수하도록 합니다. 스키마 유효성 검사 규칙은 작업에 따라 다릅니다. 스키마 적용을 참조하세요 .
스키마 진화를 처리하기 위해 Delta는 스키마를 변경하고 테이블을 발전시키는 메커니즘을 제공합니다. 스키마 진화를 사용하여 필드가 삭제되거나 파이프라인이 실패하지 않도록 하는 경우를 신중하게 고려해야 합니다. 수동 또는 자동으로 스키마를 업데이트하는 방법에 대한 자세한 내용은 Delta Lake 테이블 스키마 업데이트를 참조하십시오.
테이블 제약 조건
제약 조건은 정보 기본 키 및 외래 키 제약 조건 또는 적용된 제약 조건 형식을 사용할 수 있습니다. ADD CONSTRAINT 절 참조하세요.
Azure Databricks의 테이블 제약 조건은 적용되거나 정보 제공용입니다.
적용된 제약 조건에는 NOT NULL 제약 조건과 CHECK 제약 조건이 포함됩니다.
정보 제약 조건에는 기본 키 및 외래 키 제약 조건이 포함됩니다.
Azure Databricks의 제약 조건을 참조하세요.
null 또는 누락 값 처리
Not NULL 델타 테이블에 적용할 수 있습니다. 열에 Null이 있는 기존 레코드가 없고 null 값이 있는 새 레코드가 테이블에 삽입되지 않도록 하는 경우에만 기존 테이블에서 사용하도록 설정할 수 있습니다.
패턴 적용
정규식을 사용하여 데이터 필드에 예상 패턴을 강제할 수 있습니다. 이는 특정 형식 또는 패턴을 준수해야 하는 텍스트 데이터를 처리할 때 특히 유용합니다.
regex를 사용하여 패턴을 적용하려면 SQL에서 REGEXP 또는 RLIKE 함수를 사용할 수 있습니다. 이러한 함수를 사용하면 데이터 필드를 지정된 정규식 패턴과 일치시킬 수 있습니다.
SQL에서 패턴 적용을 위해 regex와 함께 제약 조건을 사용하는 CHECK 방법의 예는 다음과 같습니다.
CREATE TABLE table_name (
column_name STRING CHECK (column_name REGEXP '^[A-Za-z0-9]+$')
);
값 적용
제약 조건을 사용하여 테이블의 열에 값 범위를 적용할 수 있습니다. 이렇게 하면 지정된 범위 내의 유효한 값만 삽입하거나 업데이트할 수 있습니다.
값 범위 제약 조건을 적용하려면 SQL에서 CHECK 제약 조건을 사용할 수 있습니다.
CHECK 제약 조건을 사용하면 테이블의 모든 행에 대해 true여야 하는 조건을 정의할 수 있습니다.
다음은 제약 조건을 사용하여 CHECK 열에 값 범위를 적용하는 방법의 예입니다.
CREATE TABLE table_name (
column_name INT CHECK (column_name >= 0 AND column_name <= 100)
);
Lakeflow Spark 선언적 파이프라인을 사용하여 기대치를 정의하고 구성합니다.
Lakeflow Spark 선언적 파이프라인을 사용하면 구체화된 뷰 또는 스트리밍 테이블을 선언할 때 기대치를 정의할 수 있습니다. 위반에 대해 경고하거나, 위반 레코드를 삭제하거나, 위반에 따라 워크로드를 실패하도록 기대치를 구성할 수 있습니다. 파이프라인 기대를 사용하여 데이터 품질을 관리하기를 참조하세요.
데이터 모니터링
Azure Databricks는 계정의 모든 테이블에서 데이터의 통계 속성 및 품질을 모니터링할 수 있는 데이터 품질 모니터링 서비스를 제공합니다. 데이터 프로파일링을 참조하세요.
캐스트 데이터 형식
테이블에 데이터를 삽입하거나 업데이트할 때 Azure Databricks는 정보를 잃지 않고 안전하게 데이터 형식을 캐스팅합니다.
캐스팅 동작에 대한 자세한 내용은 다음 문서를 참조하세요.
사용자 지정 비즈니스 논리
필터 및 WHERE 절을 사용하여 잘못된 레코드를 격리하고 다운스트림 테이블로 전파하지 못하게 하는 사용자 지정 논리를 정의할 수 있습니다.
CASE WHEN ... OTHERWISE 절을 사용하면 예측 가능한 방식으로 기대를 위반하는 레코드에 비즈니스 논리를 정상적으로 적용하는 조건부 논리를 정의할 수 있습니다.
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;
참고
Databricks는 특히 구조적 스트리밍을 사용하는 경우 필터링된 데이터를 항상 별도의 쓰기 작업으로 처리하는 것이 좋습니다.
.foreachBatch 사용하여 여러 테이블에 쓰면 결과가 일관되지 않게 될 수 있습니다.
예를 들어 값을 인코딩 NULL 할 수 없는 업스트림 시스템이 있을 수 있으므로 자리 표시자 값을 -1 사용하여 누락된 데이터를 나타낼 수 있습니다. Azure Databricks에서 모든 다운스트림 쿼리에 대해 -1를 포함하는 레코드를 무시하기 위한 사용자 지정 논리를 작성하는 대신, case when 구문을 사용하여 이러한 레코드를 변환하여 동적으로 대체할 수 있습니다.
INSERT INTO silver_table
SELECT
* EXCEPT weight,
CASE
WHEN weight = -1 THEN NULL
ELSE weight
END AS weight
FROM bronze_table;