Delta Live Tables 파이프라인을 개발하고 테스트하기 위한 팁, 권장 사항 및 기능
이 문서에서는 Delta Live Tables 파이프라인을 개발하고 테스트하는 데 사용할 수 있는 패턴을 설명합니다. 파이프라인 설정을 통해 Delta Live Tables를 사용하면 개발, 테스트 및 프로덕션 환경에서 파이프라인을 격리하는 구성을 지정할 수 있습니다. 이 문서의 권장 사항은 SQL 및 Python 코드 개발에 적용됩니다.
Databricks는 매개 변수를 사용하여 확장 가능한 Delta Live Tables 코드를 작성하는 것이 좋습니다. 이 기능은 개발, 테스트 및 prod 환경 간에 이식 가능한 코드를 작성하는 데 특히 유용합니다. 예를 들어 알려진 문제가 있는 테스트 데이터를 파이프라인에 가리키고 코드 복원력을 테스트할 수 있습니다. 매개 변수를 사용하여 데이터 원본 제어를 참조하세요.
개발 모드를 사용하여 파이프라인 업데이트 실행
Delta Live Tables에는 파이프라인 업데이트가 개발 또는 프로덕션 모드에서 실행되는지 여부를 제어하는 UI 토글이 있습니다. 이 모드는 다음을 포함하여 파이프라인 업데이트가 처리되는 방법을 제어합니다.
- 개발 모드는 업데이트가 성공하거나 실패한 후 컴퓨팅 리소스를 즉시 종료하지 않습니다. 클러스터가 시작될 때까지 기다리지 않고 동일한 컴퓨팅 리소스를 다시 사용하여 여러 파이프라인 업데이트를 실행할 수 있습니다.
- 개발 모드는 작업 실패 시 자동으로 다시 시도하지 않으므로 파이프라인에서 논리 또는 구문 오류를 즉시 검색하고 수정할 수 있습니다.
Databricks는 개발 및 테스트 중에 개발 모드를 사용하는 것이 좋습니다. 그러나 프로덕션 환경에 배포할 때는 항상 프로덕션 모드로 전환합니다.
개발 및 프로덕션 모드를 참조하세요.
테이블이 업데이트되는 것을 기다리지 않고 파이프라인 소스 코드 테스트
개발 및 테스트 중에 구문 및 분석 오류와 같은 파이프라인 소스 코드 문제를 확인하려면 유효성 검사 업데이트를 실행할 수 있습니다. 업데이트는 Validate
테이블에서 실제 업데이트를 실행하지 않고 파이프라인 소스 코드의 정확성만 확인하므로 실제 파이프라인 업데이트를 실행하기 전에 문제를 보다 신속하게 식별하고 해결할 수 있습니다.
모든 개발 수명 주기 단계에서 대상 스키마 지정
Delta Live Tables 파이프라인의 모든 데이터 세트는 파이프라인 외부에서 액세스할 수 없는 가상 스키마를 참조 LIVE
합니다. 대상 스키마를 지정 LIVE
하면 가상 스키마가 대상 스키마를 가리킵니다. 업데이트 중에 각 테이블에 기록된 결과를 검토하려면 대상 스키마를 지정해야 합니다.
사용자 환경에 고유한 대상 스키마를 지정해야 합니다. 지정된 스키마의 각 테이블은 단일 파이프라인에서만 업데이트할 수 있습니다.
서로 다른 대상으로 개발, 테스트 및 프로덕션을 위한 별도의 파이프라인을 만들어 이러한 환경을 격리할 수 있습니다. 대상 스키마 매개 변수를 사용하면 문자열 보간 또는 기타 위젯 또는 매개 변수를 사용하여 데이터 원본과 대상을 제어하는 논리를 제거할 수 있습니다.
Delta Live Tables 파이프라인에서 Unity 카탈로그 사용 및 레거시 Hive 메타스토어와 함께 Delta Live Tables 파이프라인 사용을 참조하세요.
Databricks Git 폴더를 사용하여 델타 라이브 테이블 파이프라인 관리
Databricks는 Delta Live Tables 파이프라인 개발, 테스트 및 프로덕션에 배포하는 동안 Git 폴더를 사용하는 것이 좋습니다. Git 폴더를 사용하면 다음을 수행할 수 있습니다.
- 시간이 지남에 따라 코드가 어떻게 변경되는지 추적합니다.
- 여러 개발자가 변경한 내용을 병합합니다.
- 코드 검토와 같은 소프트웨어 개발 사례
Databricks는 파이프라인과 관련된 모든 코드에 대해 단일 Git 리포지토리를 구성하는 것이 좋습니다.
각 개발자는 개발을 위해 자체 Databricks Git 폴더를 구성해야 합니다. 개발 중에 사용자는 Databricks Git 폴더에서 고유한 파이프라인을 구성하고 개발 데이터 세트와 격리된 스키마 및 위치를 사용하여 새 논리를 테스트합니다. 개발 작업을 완료한 후 사용자는 변경 내용을 커밋하고 중앙 Git 리포지토리의 분기에 다시 푸시하고 테스트 또는 QA 분기에 대한 끌어오기 요청을 엽니다.
결과 분기는 Databricks Git 폴더에서 체크 아웃해야 하며 테스트 데이터 세트 및 개발 스키마를 사용하여 파이프라인을 구성해야 합니다. 논리가 예상대로 실행될 경우 끌어오기 요청 또는 릴리스 분기는 변경 내용을 프로덕션으로 푸시할 준비가 되어 있어야 합니다.
Git 폴더를 사용하여 환경 간에 코드를 동기화할 수 있지만 파이프라인 설정은 수동으로 또는 Terraform과 같은 도구를 사용하여 최신 상태로 유지되어야 합니다.
이 워크플로는 모든 Databricks 작업에서 CI/CD용 Git 폴더를 사용하는 것과 유사합니다. Git 및 Databricks Git 폴더(Repos)를 사용하여 CI/CD 기술을 참조하세요.
수집 및 변환 단계를 위한 세그먼트 소스 코드
Databricks는 데이터를 보강하고 유효성을 검사하는 변환 논리에서 데이터를 수집하는 쿼리를 격리하는 것이 좋습니다. 개발에서 데이터를 수집하거나 프로덕션 데이터 수집 논리와 별도로 디렉터리의 데이터 원본을 테스트하기 위한 소스 코드를 구성하는 경우 해당 환경과 관련된 데이터 세트를 사용하여 다양한 환경에 대한 파이프라인을 구성할 수 있습니다. 예를 들어 테스트를 위해 더 작은 데이터 세트를 사용하여 개발을 가속화할 수 있습니다. 개발 및 테스트에 대한 샘플 데이터 세트 만들기를 참조하세요.
매개 변수를 사용하여 개발, 테스트 및 프로덕션을 위한 데이터 원본을 제어할 수도 있습니다. Delta Live Tables 파이프라인에서 매개 변수 사용을 참조 하세요.
Delta Live Tables 파이프라인은 모든 데이터 세트 관계를 관리하기 위해 가상 스키마를 사용 LIVE
하므로 샘플 데이터를 로드하는 수집 소스 코드로 파이프라인을 구성하고 테스트함으로써 프로덕션 테이블 이름을 사용하여 샘플 데이터 세트를 대체하여 코드를 테스트할 수 있습니다. 모든 환경에서 동일한 변환 논리를 사용할 수 있습니다.
개발 및 테스트를 위한 샘플 데이터 세트 만들기
Databricks는 예상 데이터 및 잠재적으로 형식이 잘못되었거나 손상된 레코드를 사용하여 파이프라인 논리를 테스트하기 위해 개발 및 테스트 데이터 세트를 만드는 것이 좋습니다. 다음을 포함하여 개발 및 테스트에 유용할 수 있는 데이터 세트를 만드는 방법에는 여러 가지가 있습니다.
- 프로덕션 데이터 세트에서 데이터의 하위 집합을 선택합니다.
- PII를 포함하는 원본에 대해 익명화되거나 인위적으로 생성된 데이터를 사용합니다.
- 다운스트림 변환 논리를 기반으로 잘 정의된 결과를 사용하여 테스트 데이터를 만듭니다.
- 데이터 스키마 기대치를 깨뜨리는 레코드를 만들어 잠재적인 데이터 손상, 형식이 잘못된 레코드 및 업스트림 데이터 변경을 예상합니다.
예를 들어 다음 코드를 사용하여 데이터 세트를 정의하는 Notebook이 있는 경우:
CREATE OR REFRESH STREAMING TABLE input_data AS SELECT * FROM read_files("/production/data", "json")
다음과 같은 쿼리를 사용하여 특정 레코드를 포함하는 샘플 데이터 세트를 만들 수 있습니다.
CREATE OR REFRESH MATERIALIZED VIEW input_data AS
SELECT "2021/09/04" AS date, 22.4 as sensor_reading UNION ALL
SELECT "2021/09/05" AS date, 21.5 as sensor_reading
다음 예제에서는 게시된 데이터를 필터링하여 개발 또는 테스트를 위한 프로덕션 데이터의 하위 집합을 만드는 방법을 보여 줍니다.
CREATE OR REFRESH MATERIALIZED VIEW input_data AS SELECT * FROM prod.input_data WHERE date > current_date() - INTERVAL 1 DAY
이러한 다양한 데이터 세트를 사용하려면 변환 논리를 구현하는 Notebooks로 여러 파이프라인을 만듭니다. 각 파이프라인은 LIVE.input_data
데이터 세트에서 데이터를 읽을 수 있지만 환경에 특정한 데이터집합을 만드는 Notebook을 포함하도록 구성됩니다.