다음을 통해 공유


Stream Analytics의 Azure Blob Storage 및 Data Lake Storage Gen2 출력

Azure Data Lake Storage Gen2는 Azure Storage를 Azure에서 엔터프라이즈 데이터 레이크를 빌드하기 위한 토대가 됩니다. Data Lake Storage Gen2는 수백 기가비트의 처리량을 유지하면서 여러 페타바이트 규모의 정보를 제공하도록 설계되었습니다. 이를 사용하여 대량의 데이터를 쉽게 관리할 수 있습니다. Data Lake Storage Gen2의 기본 부분은 Azure Blob Storage에 계층 구조 네임스페이스를 추가하는 것입니다.

Blob Storage는 클라우드에 대량의 비정형 데이터를 저장하기 위한 비용 효율적이고 확장 가능한 솔루션을 제공합니다. Blob Storage 및 해당 사용에 대한 소개는 Azure Portal을 사용하여 Blob 업로드, 다운로드 및 나열을 참조하세요.

참고 항목

Avro 및 Parquet 형식과 관련된 동작에 대한 자세한 내용은 개요의 관련 섹션을 참조하세요.

출력 구성

다음 표에서는 Blob 또는 Data Lake Storage Gen2 출력을 만들기 위한 속성 이름 및 해당 설명을 나열합니다.

Property name Description
출력 별칭 쿼리 출력을 이 Blob으로 보내기 위해 쿼리에 사용되는 친숙한 이름입니다.
스토리지 계정 출력을 보내는 스토리지 계정의 이름입니다.
스토리지 계정 키 스토리지 계정과 연결된 비밀 키입니다.
컨테이너 Blob Storage에 저장된 Blob에 대한 논리적 그룹화입니다. Blob Storage에 Blob을 업로드할 때 해당 Blob에 대한 컨테이너를 지정해야 합니다.

동적 컨테이너 이름은 선택 사항입니다. 컨테이너 이름에서 하나만 동적 {field} 을 지원합니다. 필드는 출력 데이터에 있어야 하며 컨테이너 이름 정책을 따라야 합니다.

필드 데이터 형식은 string이어야 합니다. 여러 동적 필드를 사용하거나 동적 필드와 함께 정적 텍스트를 결합하려면 쿼리에서 예: 및 CONCAT LTRIM같은 기본 제공 문자열 함수를 사용하여 정의할 수 있습니다.
이벤트 직렬화 형식 출력 데이터에 대한 직렬화 형식입니다. JSON, CSV, Avro 및 Parquet가 지원됩니다. Delta Lake는 여기에서 옵션으로 나열되어 있습니다. Delta Lake를 선택한 경우 데이터는 Parquet 형식입니다. Delta Lake에 대해 자세히 알아보세요.
델타 경로 이름 이벤트 serialization 형식이 Delta Lake인 경우 필요합니다. 지정된 컨테이너 내에서 Delta Lake 테이블을 작성하는 데 사용되는 경로입니다. 여기에는 테이블 이름이 포함됩니다. 자세한 내용 및 예제는 Delta Lake 테이블에 쓰기를 참조 하세요.
쓰기 모드 쓰기 모드는 Azure Stream Analytics가 출력 파일에 쓰는 방식을 제어합니다. 정확히 한 번 배달은 쓰기 모드가 한 번인 경우에만 발생합니다. 자세한 내용은 다음 섹션을 참조하세요.
파티션 열 선택 사항. {field} 출력 데이터에서 파티션으로의 이름입니다. 하나의 파티션 열만 지원됩니다.
경로 패턴 이벤트 serialization 형식이 Delta Lake인 경우 필요합니다. 지정된 컨테이너 내에서 Blob을 작성하는 데 사용되는 파일 경로 패턴입니다.

경로 패턴에서 하나 이상의 날짜 및 시간 변수 인스턴스를 사용하여 Blob이 기록{date}{time}되는 빈도를 지정할 수 있습니다.

쓰기 모드가 한 번인 경우 둘 다 {date} {time}사용해야 합니다.

사용자 지정 Blob 분할을 사용하여 이벤트 데이터에서 파티션 Blob으로 하나의 사용자 지정 {field} 이름을 지정할 수 있습니다. 필드 이름은 영숫자이며 공백, 하이픈 및 밑줄을 포함할 수 있습니다. 사용자 지정 필드에 대한 제한은 다음을 포함합니다.
  • 쓰기 모드가 한 번인 경우 동적 사용자 지정 {field} 이름은 허용되지 않습니다.
  • 필드 이름은 대/소문자를 구분하지 않습니다. 예를 들어 서비스는 열과 열을 ID id구분할 수 없습니다.
  • 중첩 필드는 허용되지 않습니다. 대신 작업 쿼리에서 별칭을 사용하여 필드를 "평면화"합니다.
  • 식은 필드 이름으로 사용할 수 없습니다.

이 기능을 사용하면 경로에 사용자 지정 날짜/시간 형식 지정자 구성을 사용할 수 있습니다. 사용자 지정 날짜/시간 형식은 한 번에 하나씩 지정하고 키워드로 {datetime:\<specifier>} 묶어야 합니다. 허용되는 입력은 \<specifier> yyyy, ,MM, Mdd, d, HHH, mmm, ss또는 s. {datetime:\<specifier>} 경로에서 키워드를 여러 번 사용하여 사용자 지정 날짜/시간 구성을 구성할 수 있습니다.

예:
  • 예 1: cluster1/logs/{date}/{time}
  • 예 2: cluster1/logs/{date}
  • 예 3: cluster1/{client_id}/{date}/{time}
  • 예제 4: cluster1/{datetime:ss}/{myField} 쿼리 위치 SELECT data.myField AS myField FROM Input;
  • 예제 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

만든 폴더 구조의 타임스탬프는 현지 시간이 아닌 UTC를 따릅니다. System.Timestamp 는 모든 시간 기반 분할에 사용되는 시간입니다.

파일 명명에서 사용되는 규칙은 다음과 같습니다.

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

여기서는 Guid Blob 파일에 쓰기 위해 만든 내부 작성기에 할당된 고유 식별자를 나타냅니다. 이 숫자는 Blob 블록의 인덱스를 나타냅니다.

예제 출력 파일:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

이 기능에 대한 자세한 내용은 Azure Stream Analytics 사용자 지정 Blob 출력 분할을 참조하세요.
날짜 형식 이벤트 serialization 형식이 Delta Lake인 경우 필요합니다. 접두사 경로에 날짜 토큰을 사용하는 경우 파일을 구성하는 날짜 형식을 선택할 수 있습니다. 예제는 YYYY/MM/DD입니다.
시간 형식 이벤트 serialization 형식이 Delta Lake인 경우 필요합니다. 접두사 경로에 시간 토큰을 사용하는 경우 파일을 구성하는 시간 형식을 지정합니다.
최소 행 일괄 처리당 최소 행 수입니다. Parquet의 경우 일괄 처리마다 새 파일을 만듭니다. 현재 기본값은 2,000개 행이고, 허용되는 최댓값은 10,000개 행입니다.
최소 시간 일괄 처리당 최대 대기 시간입니다. 이 시간이 지나면 최소 행 수 요구 사항이 충족되지 않아도 일괄 처리가 출력에 기록됩니다. 현재 기본값은 1분이고, 허용되는 최댓값은 2시간입니다. Blob 출력에 경로 패턴 빈도가 있는 경우 대기 시간은 파티션 시간 범위보다 클 수 없습니다.
인코딩 CSV 또는 JSON 형식을 사용하는 경우 인코딩을 지정해야 합니다. 지금은 지원되는 인코딩 형식이 UTF-8뿐입니다.
구분 기호 CSV 직렬화에만 적용됩니다. Stream Analytics는 CSV 데이터를 직렬화하기 위해 다양하고 일반적인 구분 기호를 지원합니다. 지원되는 값은 쉼표, 세미콜론, 공백, 탭 및 세로 막대입니다.
형식 JSON 직렬화에만 적용됩니다. 줄로 구분됨은 각 JSON 개체를 새 줄로 구분된 형식의 출력이 되도록 지정합니다. 줄로 구분됨을 선택하는 경우 JSON에서 한 번에 하나의 개체를 읽습니다. 전체 콘텐츠 자체는 유효한 JSON이 아닙니다. 배열은 JSON 개체 배열 형식의 출력이 되도록 지정합니다. 이 배열은 작업이 중지되거나 Stream Analytics가 다음 시간 범위로 이동되었을 때만 닫힙니다. 일반적으로 출력 파일을 계속 쓰는 동안 특수 처리가 필요하지 않으므로 줄로 구분된 JSON을 사용하는 것이 좋습니다.

정확히 한 번 배달(공개 미리 보기)

스트리밍 입력을 읽을 때 종단 간 정확히 한 번 배달된다는 것은 처리된 데이터가 중복되지 않고 Data Lake Storage Gen2 출력에 한 번 기록된다는 것을 의미합니다. 이 기능을 사용하도록 설정하면 Stream Analytics 작업은 마지막 출력 시간부터 사용자가 시작한 다시 시작에서 데이터 손실이 없고 중복 항목이 출력으로 생성되지 않도록 보장합니다. 중복 제거 논리를 구현하고 문제를 해결할 필요가 없으므로 스트리밍 파이프라인을 간소화합니다.

쓰기 모드

Stream Analytics가 Blob Storage 또는 Data Lake Storage Gen2 계정에 쓰는 방법에는 두 가지가 있습니다. 한 가지 방법은 결과가 들어오는 것과 동일한 파일 또는 파일 시퀀스에 결과를 추가하는 것입니다. 다른 방법은 시간 파티션에 대한 모든 데이터를 사용할 수 있는 시간 파티션에 대한 모든 결과 다음에 쓰는 것입니다. 쓰기 모드가 한 번일 때 정확히 한 번 배달이 활성화됩니다.

Delta Lake에 대한 쓰기 모드 옵션은 없습니다. 그러나 Delta Lake 출력은 델타 로그를 사용하여 정확히 한 번 보장합니다. 시간 파티션이 필요하지 않으며 사용자가 정의한 일괄 처리 매개 변수에 따라 결과를 지속적으로 작성합니다.

참고 항목

정확히 한 번 배달에 미리 보기 기능을 사용하지 않으려면 결과가 도착하면 추가를 선택합니다.

구성

Blob Storage 또는 Data Lake Storage Gen2 계정에 대해 정확히 한 번 배달을 받으려면 다음 설정을 구성해야 합니다.

  • 쓰기 모드에 대해 시간 파티션의 모든 결과를 사용할 수 있게 된 후 한 번을 선택합니다.
  • 경로 패턴에 둘 다 {date} 입력하고 {time} 지정합니다.
  • 날짜 형식시간 형식을 지정합니다.

제한 사항

  • 하위 스트림은 지원되지 않습니다.
  • 경로 패턴은 필수 속성이 되며 둘 다 {date} {time}포함해야 합니다. 동적 사용자 지정 {field} 이름은 허용되지 않습니다. 사용자 지정 경로 패턴에 대해 자세히 알아봅니다.
  • 작업이 마지막 출력 시간 전후에 사용자 지정 시간에 시작되면 파일을 덮어쓸 위험이 있습니다. 예를 들어 시간 형식이 HH설정되면 파일이 매시간 생성됩니다. 오전 8시 15분에 작업을 중지하고 오전 8시 30분에 작업을 다시 시작하면 오전 8시에서 오전 9시 사이에 생성된 파일은 오전 8시 30분부터 오전 9시까지의 데이터만 포함합니다. 오전 8시부터 오전 8시 15분까지의 데이터는 덮어쓰기로 손실됩니다.

Blob 출력 파일

Blob Storage를 출력으로 사용하는 경우 다음과 같은 경우 Blob에 새 파일이 만들어집니다.

  • 파일이 허용되는 최대 블록 수(현재 50,000)를 초과합니다. 허용되는 최대 Blob 크기에 도달하지 않고 최대 허용 블록 수에 도달할 수 있습니다. 예를 들어 출력 속도가 높으면 블록당 더 많은 바이트를 볼 수 있으며 파일 크기는 더 커집니다. 출력 속도가 낮으면 각 블록의 데이터가 줄어들고 파일 크기도 작아집니다.
  • 출력에 스키마가 변경되고 출력 형식에는 고정 스키마(CSV, Avro 또는 Parquet)가 필요합니다.
  • 사용자가 작업을 중지하고 시작하거나 내부적으로 시스템 유지 관리 또는 오류 복구를 위해 작업을 외부적으로 다시 시작합니다.
  • 쿼리가 완전히 분할되고 각 출력 파티션에 대해 새 파일이 만들어집니다. 호환성 수준 1.2에서 도입된 네이티브 병렬 처리 또는 사용 PARTITION BY 에서 비롯됩니다.
  • 사용자가 스토리지 계정의 파일 또는 컨테이너를 삭제합니다.
  • 경로 전위 패턴을 사용하여 출력 시간이 분할되고 쿼리가 다음 시간으로 이동할 때 새 Blob이 사용됩니다.
  • 출력은 사용자 지정 필드로 분할되며 파티션 키가 없는 경우 파티션 키별로 새 Blob이 만들어집니다.
  • 출력이 파티션 키 카디널리티가 8,000을 초과하는 사용자 지정 필드에 따라 분할되고 파티션 키마다 새 Blob이 만들어집니다.

분할

파티션 키의 경우 경로 패턴에서 이벤트 필드의 토큰을 사용하고 {date} {time} 토큰을 사용합니다. 날짜 형식(예: YYYY/MM/DD, DD/MM/YYYY또는 MM-DD-YYYY.)을 선택합니다. HH 는 시간 형식에 사용됩니다. Blob 출력은 단일 사용자 지정 이벤트 특성 {fieldname} 또는 {datetime:\<specifier>}. 출력 작성기의 수는 완전히 병렬 가능한 쿼리의 입력 분할을 따릅니다.

출력 일괄 처리 크기

최대 메시지 크기는 Azure Storage 제한을 참조하세요. 최대 Blob 블록 크기는 4MB이고 최대 Blob 블록 수는 50,000개입니다.

제한 사항

  • 경로 패턴(예/folder2/folder3: )에 슬래시 기호(/)를 사용하면 빈 폴더가 만들어지고 Storage Explorer에 표시되지 않습니다.
  • Stream Analytics는 새 Blob 파일이 필요하지 않은 경우 동일한 파일에 추가합니다. Azure Event Grid와 같은 Azure 서비스가 Blob 파일 업데이트에서 트리거되도록 구성된 경우 더 많은 트리거가 생성될 수 있습니다.
  • Stream Analytics는 기본적으로 Blob에 추가됩니다. 출력 형식이 JSON 배열인 경우 종료 시 또는 출력이 시간 분할 출력을 위해 다음 파티션으로 이동할 때 파일을 완료합니다. 부정한 다시 시작과 같은 경우에 JSON 배열에 대한 닫는 대괄호(])가 누락된 것일 수 있습니다.