다음을 통해 공유


고급 AUTO CDC 항목

이 페이지에서는 고급 항목을 다루며, 여기에는 AUTO CDCAUTO CDC FROM SNAPSHOT 대상 테이블과 작업하는 방법, DML 작업, 변화된 데이터 피드 읽기, 그리고 처리 메트릭 모니터링이 포함됩니다. API 소개는 AUTO CDC APIs: 파이프라인을 사용하여 변경 데이터 캡처 간소화를 참조하세요.

대상 스트리밍 테이블에서 데이터 추가, 변경 또는 삭제

파이프라인이 Unity 카탈로그에 테이블을 게시하는 경우 문으로 생성된 대상 스트리밍 테이블을 수정하기 위해 삽입, 업데이트, 삭제 및 병합 문을 포함한 AUTO CDC ... INTO (DML) 문을 사용할 수 있습니다.

메모

  • 스트리밍 테이블의 테이블 스키마를 수정하는 DML 문은 지원되지 않습니다. DML 문이 테이블 스키마를 변경하려고 하지 않는지 확인하세요.
  • 스트리밍 테이블을 업데이트하는 DML 문은 Databricks Runtime 13.3 LTS 이상을 사용하여 공유 Unity 카탈로그 클러스터 또는 SQL 웨어하우스에서만 실행할 수 있습니다.
  • 스트리밍에는 추가 전용 데이터 원본이 필요하기 때문에 처리 시 변경 내용이 있는 원본 스트리밍 테이블에서 스트리밍이 필요한 경우(예: DML 문) 원본 스트리밍 테이블을 읽을 때 skipChangeCommits 플래그 를 설정합니다. skipChangeCommits 설정되면 원본 테이블에서 레코드를 삭제하거나 수정하는 트랜잭션은 무시됩니다. 처리에 스트리밍 테이블이 필요하지 않은 경우 구체화된 뷰(추가 전용 제한이 없음)를 대상 테이블로 사용할 수 있습니다.

Lakeflow Spark 선언적 파이프라인은 지정된 SEQUENCE BY 열을 사용하고 적절한 시퀀싱 값을 __START_AT 대상 테이블의 열( __END_AT SCD 형식 2의 경우)에 전파하므로 DML 문이 이러한 열에 유효한 값을 사용하여 적절한 레코드 순서를 유지해야 합니다. AUTO CDC 작동 방식을 참조하세요.

스트리밍 테이블과 함께 DML 문을 사용하는 방법에 대한 자세한 내용은 스트리밍 테이블의 데이터 추가, 변경 또는 삭제를 참조하세요.

다음 예제에서는 시작 시퀀스가 5인 활성 레코드를 삽입합니다.

INSERT INTO my_streaming_table (id, name, __START_AT, __END_AT) VALUES (123, 'John Doe', 5, NULL);

팁 (조언)

SCD Type 2 대상 테이블의 __START_AT 열과 __END_AT 이름을 변경해야 하는 경우(예: 다운스트림 스키마 요구 사항과 일치하기 위해) 대상 테이블에 대한 뷰를 만듭니다.

CREATE VIEW my_employees_view AS
SELECT
  *,
  __START_AT AS valid_from,
  __END_AT AS valid_to
FROM my_scd2_target_table;

AUTO CDC 대상 테이블에서 변경 데이터 피드 읽기

Databricks Runtime 15.2 이상에서는 다른 델타 테이블에서 변경 데이터 피드를 읽는 것과 동일한 방식으로 대상 AUTO CDC 인 스트리밍 테이블 또는 AUTO CDC FROM SNAPSHOT 쿼리에서 변경 데이터 피드를 읽을 수 있습니다. 대상 스트리밍 테이블에서 변경 데이터 피드를 읽으려면 다음이 필요합니다.

  • 대상 스트리밍 테이블을 Unity 카탈로그에 게시해야 합니다. 파이프라인에서 Unity 카탈로그 사용을 참조하세요.
  • 대상 스트리밍 테이블에서 변경 데이터 피드를 읽으려면 Databricks Runtime 15.2 이상을 사용해야 합니다. 다른 파이프라인에서 변경 데이터 피드를 읽으려면 Databricks Runtime 15.2 이상을 사용하도록 파이프라인을 구성해야 합니다.

다른 델타 테이블에서 변경 데이터 피드를 읽는 것과 동일한 방식으로 Lakeflow Spark 선언적 파이프라인에서 만든 대상 스트리밍 테이블에서 변경 데이터 피드를 읽습니다. Python 및 SQL의 예제를 포함하여 델타 변경 데이터 피드 기능을 사용하는 방법에 대한 자세한 내용은 Azure Databricks에서 Delta Lake 변경 데이터 피드 사용을 참조하세요.

메모

변경 데이터 피드 레코드에는 변경 이벤트 유형을 식별하는 메타데이터 가 포함됩니다. 테이블에서 레코드가 업데이트되면 연결된 변경 레코드에 대한 메타데이터에는 일반적으로 설정된 _change_type 값과 update_preimage 이벤트가 포함됩니다update_postimage.

그러나 _change_type 기본 키 값 변경을 포함하는 대상 스트리밍 테이블에 대한 업데이트가 이루어지면 값이 다릅니다. 기본 키 _change_type에 대한 업데이트가 변경 사항에 포함되면, 메타데이터 필드가 insertdelete 이벤트로 설정됩니다. 기본 키에 대한 변경은 키 필드를 UPDATE 또는 MERGE 문을 사용하여 수동으로 업데이트할 때, 또는 SCD 유형 2 테이블의 경우 __start_at 필드가 이전 시작 시퀀스 값을 반영하도록 변경되면서 발생할 수 있습니다.

쿼리는 AUTO CDC SCD 유형 1 및 SCD 형식 2 처리에 대해 다른 기본 키 값을 결정합니다.

SCD 형식 기본 키
SCD 형식 1 및 파이프라인 Python 인터페이스 기본 키는 함수의 keys 매개 변수 값입니다 create_auto_cdc_flow() . SQL 인터페이스의 경우 기본 키는 KEYS 절에서 AUTO CDC ... INTO 구문으로 정의된 열입니다.
SCD 형식 2 기본 키는 keys 매개 변수 또는 절과 KEYS 작업의 반환 값 coalesce(__START_AT, __END_AT) 입니다. 여기서 대상 스트리밍 테이블의 해당 열은 다음과 __START_AT__END_AT 같습니다.

파이프라인의 CDC 쿼리에서 처리된 레코드에 대한 데이터 가져오기

메모

다음 메트릭은 AUTO CDC 쿼리에 의해서만 캡처되며, AUTO CDC FROM SNAPSHOT 쿼리에는 포함되지 않습니다.

AUTO CDC가 쿼리를 통해 다음과 같은 메트릭을 캡처합니다.

  • num_upserted_rows: 업데이트 중에 데이터 세트에 삽입된 출력 행의 수입니다.
  • num_deleted_rows: 업데이트 중에 데이터 세트에서 삭제된 기존 출력 행의 수입니다.

num_output_rows 비CDC 흐름에 대한 출력 메트릭은 AUTO CDC 쿼리에서 캡처되지 않습니다.

파이프라인에서 CDC 처리에 사용되는 데이터 개체는 무엇인가요?

Hive 메타스토어에서 대상 테이블을 선언하면 두 개의 데이터 구조가 만들어집니다.

  • 대상 테이블에 할당된 이름을 사용하는 뷰입니다.
  • 파이프라인에서 CDC 처리를 관리하는 데 사용하는 내부 지원 테이블입니다. 이 테이블의 이름은 대상 테이블 이름 앞에 추가하여 __apply_changes_storage_ 지정됩니다.

예를 들어 이름이 지정된 dp_cdc_target대상 테이블을 선언하면 메타스토어에 명명된 dp_cdc_target 뷰와 테이블이 __apply_changes_storage_dp_cdc_target 표시됩니다. 뷰를 쿼리하여 처리된 데이터에 액세스합니다. 백업 테이블을 직접 수정하지 마세요.

메모

이러한 데이터 구조는 AUTO CDC 처리에만 적용되며, AUTO CDC FROM SNAPSHOT 처리에는 적용되지 않습니다. 또한 Unity 카탈로그가 아닌 Hive 메타스토어에도 적용됩니다.