다음을 통해 공유


Azure Stream Analytics: Delta Lake 테이블에 쓰기

Delta Lake는 데이터 레이크에 안정성, 품질 및 성능을 제공하는 개방형 형식입니다. Azure Stream Analytics를 사용하여 한 줄의 코드를 작성하지 않고 Delta Lake 테이블에 스트리밍 데이터를 직접 쓸 수 있습니다.

Azure Data Lake Storage Gen2 계정의 새 또는 미리 생성된 델타 테이블에 네이티브 Delta Lake 출력 커넥터를 통해 쓰도록 Stream Analytics 작업을 구성할 수 있습니다. 이 커넥터는 추가 모드에서 델타 테이블에 대한 고속 수집에 최적화되어 있습니다. 또한 정확히 한 번 의미 체계를 제공하므로 데이터가 손실되거나 중복되지 않습니다. Azure Event Hubs에서 델타 테이블로 실시간 데이터 스트림을 수집하면 임시 대화형 또는 일괄 처리 분석을 수행할 수 있습니다.

Delta Lake 구성

Delta Lake에서 데이터를 쓰려면 Data Lake Storage Gen2 계정에 연결해야 합니다. 다음 표에서는 Delta Lake 구성과 관련된 속성을 나열합니다.

Property name 설명
이벤트 직렬화 형식 출력 데이터에 대한 직렬화 형식입니다. JSON, CSV, Avro 및 Parquet가 지원됩니다. Delta Lake는 여기에서 옵션으로 나열되어 있습니다. Delta Lake를 선택한 경우 데이터는 Parquet 형식입니다.
델타 경로 이름 지정된 컨테이너 내에서 Delta Lake 테이블을 작성하는 데 사용되는 경로입니다. 여기에는 테이블 이름이 포함됩니다. 자세한 내용은 다음 섹션에 있습니다.
파티션 열 선택 사항. {field} 출력 데이터에서 파티션으로의 이름입니다. 하나의 파티션 열만 지원됩니다. 열의 값은 형식이어야 string 합니다.

Data Lake Storage Gen2 구성의 전체 목록을 보려면 Azure Data Lake Storage Gen2 개요를 참조하세요.

델타 경로 이름

델타 경로 이름은 Data Lake Storage Gen2에 저장된 Delta Lake 테이블의 위치와 이름을 지정하는 데 사용됩니다.

하나 이상의 경로 세그먼트를 사용하여 델타 테이블 및 델타 테이블 이름의 경로를 정의할 수 있습니다. 경로 세그먼트는 가상 디렉터리 이름에 해당하는 연속 구분 기호 문자 사이의 문자열입니다(예: 슬래시 /).

세그먼트 이름은 영숫자이며 공백, 하이픈 및 밑줄을 포함할 수 있습니다. 마지막 경로 세그먼트는 테이블 이름으로 사용됩니다.

델타 경로 이름에 대한 제한 사항은 다음과 같습니다.

  • 필드 이름은 대/소문자를 구분하지 않습니다. 예를 들어 서비스는 열 IDid.를 구분할 수 없습니다.
  • 동적 {field} 이름은 허용되지 않습니다. 예를 들어 {ID} 텍스트 {ID}로 처리됩니다.
  • 이름을 구성하는 경로 세그먼트 수는 254를 초과할 수 없습니다.

예제

델타 경로 이름에 대한 예:

  • 예 1: WestUS/CA/factory1/device-table
  • 예 2: Test/demo
  • 예 3: mytable

예제 출력 파일:

  1. 선택한 컨테이너 아래에 디렉터리 경로가 WestEurope/CA/factory1 있고 Delta 테이블 폴더 이름은 device-table입니다.
  2. 선택한 컨테이너 아래에 디렉터리 경로가 Test 있고 Delta 테이블 폴더 이름은 데모입니다.
  3. 선택한 컨테이너에서 델타 테이블 폴더 이름은 mytable입니다.

새 테이블 만들기

이름이 동일하고 델타 경로 이름으로 지정된 위치에 Delta Lake 테이블이 아직 없는 경우 기본적으로 Stream Analytics는 새 델타 테이블을 만듭니다. 이 새 테이블은 다음 구성으로 만들어집니다.

테이블에 쓰기

Delta Lake 테이블이 동일한 이름과 델타 경로 이름으로 지정된 위치에 이미 있는 경우 기본적으로 Stream Analytics는 기존 테이블에 새 레코드를 씁니다.

정확히 한 번 배달

트랜잭션 로그를 사용하면 Delta Lake에서 정확히 한 번 처리를 보장할 수 있습니다. 또한 Stream Analytics는 단일 작업 실행 중에 Data Lake Storage Gen2에 데이터를 출력할 때 정확히 한 번 배달합니다.

스키마 적용

스키마 적용은 테이블에 대한 모든 새 쓰기가 데이터 품질을 보장하기 위해 쓰기 시간에 대상 테이블의 스키마와 호환되도록 적용됨을 의미합니다.

출력 데이터의 모든 레코드는 기존 테이블의 스키마에 프로젝팅됩니다. 출력이 새 Delta 테이블에 기록되면 첫 번째 레코드를 사용하여 테이블 스키마가 만들어집니다. 들어오는 데이터에 기존 테이블 스키마에 비해 하나의 추가 열이 있는 경우 추가 열 없이 테이블에 기록됩니다. 들어오는 데이터에 기존 테이블 스키마에 비해 열이 하나 누락된 경우 열이 null인 테이블에 기록됩니다.

델타 테이블의 스키마와 스트리밍 작업 레코드의 스키마 사이에 교집합이 없으면 스키마 변환 실패의 인스턴스로 간주됩니다. 스키마 변환 실패로 간주되는 유일한 경우는 아닙니다.

스키마 변환 실패 시 작업 동작은 작업 수준에서 구성된 출력 데이터 오류 처리 정책을 따릅니다.

델타 로그 검사점

Stream Analytics 작업은 주기적으로 델타 로그 검사점을 V1 형식으로 만듭니다. 델타 로그 검사점은 델타 테이블의 스냅샷이며 일반적으로 Stream Analytics 작업에서 생성된 데이터 파일의 이름을 포함합니다. 데이터 파일 수가 많으면 검사점이 크면 Stream Analytics 작업에서 메모리 문제가 발생할 수 있습니다.

제한 사항

  • 동적 파티션 키(델타 경로에서 레코드 스키마 열의 이름 지정)는 지원되지 않습니다.
  • 여러 파티션 열은 지원되지 않습니다. 여러 파티션 열을 원하는 경우 쿼리에서 복합 키를 사용한 다음 파티션 열로 지정하는 것이 좋습니다.
    • 쿼리에서 복합 키를 만들 수 있습니다. 예제는 "SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]"입니다.
  • Delta Lake에 쓰는 것은 추가 사항일 뿐입니다.
  • 쿼리 테스트에서 스키마 검사를 사용할 수 없습니다.
  • 작은 파일 압축은 Stream Analytics에서 수행되지 않습니다.
  • 모든 데이터 파일은 압축 없이 만들어집니다.
  • 날짜 및 10진수 형식지원되지 않습니다.
  • 기록기 기능을 사용하여 작성기 버전 7 이상의 기존 테이블에 쓰기가 실패합니다.
  • Stream Analytics 작업이 Delta Lake에 데이터 일괄 처리를 쓰면 여러 파일 추가 작업을 생성할 수 있습니다. 단일 일괄 처리에 대해 생성된 파일 추가 작업이 너무 많으면 Stream Analytics 작업이 중단될 수 있습니다.
    • 생성된 파일 추가 작업의 수는 다음과 같은 여러 요인에 의해 결정됩니다.
    • 일괄 처리에 대해 생성된 파일 추가 작업의 수를 줄이려면 다음을 수행합니다.
      • 일괄 처리 구성 최소 행 및 최대 시간을 줄입니다.
      • 입력 데이터를 조정하거나 다른 파티션 열을 선택하여 파티션 열 값카디널리티를 줄입니다.
  • Stream Analytics 작업은 단일 파트 V1 검사점을 읽고 쓸 수 있습니다. 다중 파트 검사점 및 검사점 V2 형식은 지원되지 않습니다.