Stream Analytics에서 조회에 참조 데이터 사용

참조 데이터는 본질적으로 정적이거나 천천히 변화하는 유한 데이터 세트입니다. 조회를 수행하거나 데이터 스트림을 보강하는 데 사용됩니다. 참조 데이터는 조회 테이블이라고도 합니다.

IoT 시나리오를 예로 들어 보겠습니다. 자주 변경되지 않는 센서에 대한 메타데이터를 참조 데이터에 저장할 수 있습니다. 그런 다음 실시간 IoT 데이터 스트림과 결합할 수 있습니다.

Azure Stream Analytics는 메모리에서 참조 데이터를 로드하여 대기 시간이 짧은 스트림 프로세스를 달성합니다. Stream Analytics 작업에서 참조 데이터를 사용하려면 일반적으로 쿼리에서 참조 데이터 조인을 사용합니다.

예시

자동차가 요금 창구를 통과할 때 이벤트의 실시간 스트림이 생성됩니다. 요금 창구는 실시간으로 번호판을 캡처할 수 있습니다. 해당 데이터는 만료된 번호판을 식별하기 위한 등록 세부 정보가 있는 정적 데이터 세트와 결합할 수 있습니다.

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

Stream Analytics는 Azure Blob Storage, Azure Data Lake Storage Gen2 및 Azure SQL Database를 참조 데이터의 스토리지 계층으로 지원합니다. 다른 데이터 저장소에 참조 데이터가 있는 경우 Azure Data Factory를 사용하여 데이터를 추출, 변환 및 지원되는 데이터 저장소 중 하나에 로드합니다. 자세한 내용은 Azure Data Factory의 복사 작업 개요를 참조 하세요.

Azure Blob Storage 또는 Azure Data Lake Storage Gen 2

참조 데이터는 Blob 이름에 지정된 날짜/시간의 오름차순으로 Blob 시퀀스로 모델링됩니다. Blob은 시퀀스의 마지막 Blob에서 지정한 것보다 날짜/시간을 사용하여 시퀀스 끝에만 추가할 수 있습니다. Blob은 입력 구성에 정의됩니다.

자세한 내용은 Stream Analytics 작업에 Blob Storage의 참조 데이터 사용을 참조하세요.

Blob 참조 데이터 구성

참조 데이터를 구성하려면 먼저 참조 데이터 형식의 입력을 만들어야 합니다. 다음 표에서는 참조 데이터 입력에 대한 설명과 함께 이를 만들 때 제공해야 하는 각 속성에 대해 설명합니다.

Property name 설명
입력 별칭 이 입력을 참조하기 위해 작업 쿼리에서 사용되는 식별 이름입니다.
스토리지 계정 Blob이 위치한 스토리지 계정의 이름입니다. Stream Analytics 작업과 동일한 구독에 있는 경우 드롭다운 목록에서 선택합니다.
스토리지 계정 키 스토리지 계정과 연결된 비밀 키입니다. 이 키는 스토리지 계정이 Stream Analytics 작업과 동일한 구독에 있으면 자동으로 채워집니다.
스토리지 컨테이너 컨테이너는 Blob Storage에 저장된 Blob에 대한 논리적 그룹화를 제공합니다. Blob Storage에 Blob을 업로드할 때 해당 Blob에 대한 컨테이너를 지정해야 합니다.
경로 패턴 이 필수 속성은 지정된 컨테이너 내에서 Blob을 찾는 데 사용됩니다. 경로 내에서 {date} 및 {time} 변수의 인스턴스를 하나 이상 지정하도록 선택할 수 있습니다.
예 1: products/{date}/{time}/product-list.csv
예 2: products/{date}/product-list.csv
예 3: product-list.csv

Blob이 지정된 경로에 없으면 Stream Analytics 작업은 Blob을 사용할 수 있게 될 때까지 무기한 기다립니다.
날짜 형식[선택 사항] 지정한 경로 패턴 내에서 {date}를 사용한 경우 지원되는 형식의 드롭다운 목록에서 Blob이 구성되는 날짜 형식을 선택합니다.
예: YYYY/MM/DD 또는 MM/DD/YYYY
시간 형식[선택 사항] 지정한 경로 패턴 내에서 {time}을 사용한 경우 지원되는 형식의 드롭다운 목록에서 Blob이 구성되는 시간 형식을 선택합니다.
예: HH, HH/mm 또는 HH-mm
이벤트 직렬화 형식 쿼리가 예상대로 작동하는지 확인하려면 Stream Analytics은 들어오는 데이터 스트림으로 사용 중인 직렬화 형식을 알고 있어야 합니다. 참조 데이터에 대해 지원되는 형식은 CSV 및 JSON입니다.
인코딩 지금은 지원되는 인코딩 형식이 UTF-8뿐입니다.

정적 참조 데이터

참조 데이터가 변경되지 않을 수 있습니다. 정적 참조 데이터에 대한 지원을 사용하도록 설정하려면 입력 구성에서 정적 경로를 지정합니다.

Stream Analytics는 지정된 경로에서 Blob을 선택합니다. {date} 및 {time} 대체 토큰이 필요하지 않습니다. Stream Analytics에서 참조 데이터를 변경할 수 없으므로 정적 참조 데이터 Blob을 덮어쓰는 것은 권장되지 않습니다.

일정에 따라 참조 데이터 생성

참조 데이터는 천천히 변화하는 데이터 세트일 수 있습니다. 참조 데이터를 새로 고치려면 {date} 및 {time} 대체 토큰을 사용하여 입력 구성에서 경로 패턴을 지정합니다. Stream Analytics이 이 경로 패턴에 따라 업데이트된 참조 데이터 정의를 선택합니다.

예를 들어 날짜 형식이 YYYY-MM-DD이고 시간 형식이 HH-mm인 sample/{date}/{time}/products.csv 패턴은 Stream Analytics가 2015년 4월 16일 오후 5시 30분(UTC)에 업데이트된 Blob sample/2015-04-16/17-30/products.csv를 선택하도록 지시합니다.

Stream Analytics는 1분 간격으로 새로 고친 참조 데이터 Blob을 자동으로 검색합니다. 타임스탬프가 10:30:00인 Blob은 약간의 대기 시간 후 업로드될 수 있습니다(예: 10:30:30에 업로드됨). 이 Blob을 참조하는 Stream Analytics 작업이 약간 지연되는 것을 볼 수 있습니다.

이러한 시나리오를 방지하려면 대상 유효 시간(이 예에서는 10:30:00)보다 일찍 Blob을 업로드합니다. 이제 Stream Analytics 작업에 메모리에서 Blob을 검색 및 로드하고 작업을 수행하기에 충분한 시간이 있습니다.

참고 항목

현재 Stream Analytics 작업은 컴퓨터 시간이 Blob 이름에 인코딩된 시간으로 진행하는 경우에만 Blob 새로 고침을 찾습니다. 예를 들어 작업은 가능한 한 빨리 sample/2015-04-16/17-30/products.csv를 찾지만 UTC 기준 2015년 4월 16일 오후 5시 30분보다 빠르면 안 됩니다. 마지막으로 검색된 것보다 이전에 인코딩된 시간으로 Blob을 찾지 않습니다 .

예를 들어, 작업은 Blob sample/2015-04-16/17-30/products.csv를 찾은 후 인코딩된 날짜가 2015년 4월 16일 오후 5시 30분 이전인 모든 파일을 무시합니다. 늦게 도착하는 sample/2015-04-16/17-25/products.csv Blob이 동일한 컨테이너에 만들어지면 작업은 이를 사용하지 않습니다.

다른 예에서 sample/2015-04-16/17-30/products.csv는 2015년 4월 16일 오후 10시 3분에만 생성되지만 더 이른 날짜의 Blob은 컨테이너에 없습니다. 그런 다음 작업은 2015년 4월 16일 오후 10:03부터 이 파일을 사용하고 그때까지 이전 참조 데이터를 사용합니다.

이 동작에 대한 예외는 작업이 데이터를 과거로 다시 처리해야 하거나 작업이 처음 시작될 때입니다.

시작 시 작업은 지정된 작업 시작 시간 이전에 생성된 가장 최근 Blob을 찾습니다. 이 동작은 작업이 시작될 때 비어 있지 않은 참조 데이터 세트가 있는지 확인합니다. 하나를 찾을 수 없는 경우 작업은 다음 진단을 표시합니다. Initializing input without a valid reference data blob for UTC time <start time>.

참조 데이터 세트를 새로 고치면 진단 로그가 생성됩니다. Loaded new reference data from <blob path>. 여러 가지 이유로 작업에서 이전 참조 데이터 세트를 다시 로드해야 할 수 있습니다. 대부분의 경우 그 이유는 과거 데이터를 재처리하기 위함입니다. 이때 동일한 진단 로그가 생성됩니다. 이 작업은 현재 스트림 데이터가 과거 참조 데이터를 사용함을 의미하지는 않습니다.

Azure 데이터 팩터리를 사용할 수 있습니다.

Data Factory는 데이터 이동 및 변환을 오케스트레이션하고 자동화하는 클라우드 기반 데이터 통합 서비스입니다. Data Factory는 많은 수의 클라우드 기반 및 온-프레미스 데이터 저장소에 대한 연결을 지원합니다. 사용자가 지정하는 정기적인 일정에 따라 데이터를 쉽게 이동할 수 있습니다.

사전 정의된 일정에 따라 새로 고쳐지는 Stream Analytics에 대한 참조 데이터를 생성하도록 Data Factory 파이프라인을 설정하는 방법에 대한 자세한 내용은 이 GitHub 샘플을 참조하세요.

Blob 참조 데이터 새로 고침 팁

  • 참조 데이터 Blob은 변경할 수 없으므로 덮어쓰지 마세요.
  • 참조 데이터를 새로 고치는 데 권장되는 방법은 다음과 같습니다.
    • 경로 패턴에 {date}/{time}을 사용합니다.
    • 작업 입력에 정의된 동일한 컨테이너와 경로 패턴을 사용하여 새 Blob을 추가합니다.
    • 시퀀스의 마지막 Blob에서 지정된 날짜/시간보다 날짜/시간을 사용합니다.
  • 참조 데이터 Blob은 Blob의 마지막으로 수정 된 시간에 따라 정렬되지 않습니다. {date} 및 {time} 대체를 사용하여 Blob 이름에 지정된 날짜 및 시간으로만 정렬됩니다.
  • 많은 수의 Blob을 나열하지 않으려면 더 이상 처리가 수행되지 않는 오래된 Blob을 삭제합니다. Stream Analytics는 다시 시작과 같은 일부 시나리오에서 소량을 다시 처리해야 할 수 있습니다.

Azure SQL Database

Stream Analytics 작업은 SQL Database 참조 데이터를 검색하고 처리를 위해 메모리에 스냅샷으로 저장합니다. 참조 데이터의 스냅샷은 스토리지 계정의 컨테이너에도 저장됩니다. 구성 설정에서 스토리지 계정을 지정합니다.

컨테이너는 작업을 시작할 때 자동 생성됩니다. 작업이 중지되거나 실패 상태가 되면 작업이 다시 시작될 때 자동으로 만들어진 컨테이너가 삭제됩니다.

참조 데이터가 느리게 변경되는 데이터 세트인 경우 작업에 사용되는 스냅샷을 주기적으로 새로 고쳐야 합니다.

Stream Analytics를 사용하면 SQL Database 입력 연결을 구성할 때 새로 고침 빈도를 설정할 수 있습니다. Stream Analytics 런타임은 새로 고침 빈도로 지정된 간격으로 SQL Database 인스턴스를 쿼리합니다. 지원되는 가장 빠른 새로 고침 빈도는 1분에 한 번씩입니다. 각 새로 고침의 경우 Stream Analytics는 제공된 스토리지 계정에 새 스냅샷을 저장합니다.

Stream Analytics는 SQL Database 인스턴스를 쿼리하기 위한 두 가지 옵션을 제공합니다. 스냅샷 쿼리는 필수이며 각 작업에 포함되어야 합니다. Stream Analytics는 새로 고침 간격에 따라 주기적으로 스냅샷 쿼리를 실행합니다. 쿼리 결과(스냅샷)를 참조 데이터 세트로 사용합니다.

스냅샷 쿼리는 대부분의 시나리오에 적합할 것입니다. 큰 데이터 세트와 빠른 새로 고침 빈도로 인해 성능 문제가 발생하는 경우 델타 쿼리 옵션을 사용합니다. 참조 데이터 세트를 반환하는 데 60초 이상 걸리는 쿼리에는 시간 초과가 발생합니다.

델타 쿼리 옵션을 사용하면 Stream Analytics는 초기에 스냅샷 쿼리를 실행하여 기본 참조 데이터 세트를 가져옵니다. 그 후에 Stream Analytics는 새로 고침 간격에 따라 주기적으로 델타 쿼리를 실행하여 증분 변경 내용을 검색합니다. 이러한 증분 변경 내용은 지속적으로 참조 데이터 세트에 적용되어 업데이트를 최신으로 유지합니다. 델타 쿼리 옵션을 사용하면 스토리지 비용과 네트워크 I/O 작업을 줄이는 데 도움이 될 수 있습니다.

SQL Database 참조 데이터 구성

SQL Database 참조 데이터를 구성하려면 먼저 참조 데이터 입력을 만들어야 합니다. 다음 표에서는 참조 데이터 입력에 대한 설명과 함께 이를 만들 때 제공해야 하는 각 속성에 대해 설명합니다. 자세한 내용은 Stream Analytics 작업에 SQL Database의 참조 데이터 사용을 참조하세요.

Azure SQL Managed Instance를 참조 데이터 입력으로 사용할 수 있습니다. SQL Managed Instance에서 공용 엔드포인트를 구성해야 합니다. 그런 다음 Stream Analytics에서 다음 설정을 수동으로 구성합니다. 데이터베이스가 연결된 SQL Server를 실행하는 Azure 가상 머신도 이러한 설정을 수동으로 구성하여 지원됩니다.

Property name 설명
입력 별칭 이 입력을 참조하기 위해 작업 쿼리에서 사용되는 식별 이름입니다.
구독 사용자의 구독.
데이터베이스 참조 데이터가 포함된 SQL Database 인스턴스입니다. SQL Managed Instance의 경우 포트 3342를 지정해야 합니다. 예제는 sampleserver.public.database.windows.net,3342입니다.
사용자 이름 SQL Database 인스턴스와 연결된 사용자 이름입니다.
암호 SQL Database 인스턴스와 연결된 암호입니다.
주기적으로 새로 고침 이 옵션을 사용하면 새로 고침 빈도를 선택할 수 있습니다. 새로 고침 빈도를 DD:HH:MM으로 지정하려면 켜기를 선택합니다.
스냅샷 쿼리 이 기본 쿼리 옵션은 SQL Database 인스턴스에서 참조 데이터를 쿼리합니다.
델타 쿼리 대규모 데이터 세트와 짧은 새로 고침 빈도가 있는 고급 시나리오의 경우 델타 쿼리를 추가합니다.

크기 제한

최상의 성능을 위해 300MB 미만의 참조 데이터 세트를 사용합니다. 5GB 이하의 참조 데이터 세트는 스트리밍 단위가 6개 이상인 작업에서 지원됩니다. 큰 참조 데이터 세트를 사용하면 작업의 엔드투엔드 대기 시간에 영향을 미칠 수 있습니다.

쿼리 복잡성은 창 집계, temporal 조인 및 temporal 분석 기능과 같은 상태 저장 처리를 포함하도록 증가할 수 있습니다. 복잡성이 증가하면 참조 데이터의 최대 지원 크기가 감소합니다.

Stream Analytics가 참조 데이터를 로드하고 복잡한 작업을 수행할 수 없는 경우 작업은 메모리가 부족하여 실패합니다. 이러한 경우 스트리밍 단위 백분율 사용률 메트릭은 100%에 도달합니다.

스트리밍 단위의 수 권장 크기
1 50MB 이하
3 150MB 이하
6 이상 5GB 이하

참조 데이터에는 압축 지원을 사용할 수 없습니다. 300MB보다 큰 참조 데이터 세트의 경우 최적의 성능을 위해 델타 쿼리 옵션과 함께 SQL Database를 원본으로 사용합니다. 이러한 시나리오에서 델타 쿼리 옵션을 사용하지 않으면 참조 데이터 세트를 새로 고칠 때마다 워터마크 지연 메트릭이 급증합니다.

작업에서 여러 참조 데이터 세트 조인

스트리밍 입력에만 참조 데이터 입력을 조인할 수 있습니다. 따라서 여러 참조 데이터 세트를 결합하려면 쿼리를 여러 단계로 나눕니다. 예를 들면 다음과 같습니다.

With Step1 as (
    --JOIN input stream with reference data to get 'Desc'
    SELECT streamInput.*, refData1.Desc as Desc
    FROM    streamInput
    JOIN    refData1 ON refData1.key = streamInput.key 
)
--Now Join Step1 with second reference data
SELECT *
INTO    output 
FROM    Step1
JOIN    refData2 ON refData2.Desc = Step1.Desc 

IoT Edge 작업

Stream Analytics 에지 작업에 로컬 참조 데이터만 지원됩니다. 작업이 IoT Edge 디바이스에 배포되면 사용자 정의 파일 경로에서 참조 데이터를 로드합니다. 디바이스에서 참조 데이터 파일을 준비합니다.

Windows 컨테이너의 경우 참조 데이터 파일을 로컬 드라이브에 저장하고 로컬 드라이브를 Docker 컨테이너와 공유합니다. Linux 컨테이너의 경우 Docker 볼륨을 만들고 데이터 파일을 볼륨에 채웁니다.

IoT Edge 업데이트의 참조 데이터는 배포에 의해 트리거됩니다. 트리거되면 Stream Analytics 모듈은 실행 중인 작업을 중지하지 않고 업데이트된 데이터를 반영합니다.

다음 두 가지 방법으로 참조 데이터를 업데이트할 수 있습니다.

  • Azure Portal에서 Stream Analytics 작업의 참조 데이터 경로를 업데이트합니다.
  • IoT Edge 배포를 업데이트합니다.

다음 단계