참조 데이터는 스트리밍 데이터와 결합하여 제품 세부 정보를 판매 이벤트 스트림에 추가하는 등 정적이거나 천천히 변화하는 데이터셋입니다. Azure Stream Analytics는 참조 데이터 소스로 Azure SQL Database를 지원하므로, 이 데이터를 실시간 입력과 조회하고 결합할 수 있습니다.
이 글에서는 Azure 포털과 Visual Studio, 스트림 Analytics 도구를 모두 사용하여 Stream Analytics 직무의 참조 데이터 입력으로 Azure SQL Database를 구성하는 방법을 보여줍니다.
Azure 포털을 사용하여 SQL 데이터베이스 참조 데이터를 추가하세요
Azure 포털을 사용하여 Azure SQL Database를 참조 입력 소스로 추가하는 다음 단계를 사용하세요:
포털의 필수 구성 요소
Stream Analytics 작업을 만듭니다.
Stream Analytics 작업을 사용할 저장 계정을 생성하세요.
중요합니다
Azure Stream Analytics는 이 스토리지 계정 내에서 스냅샷을 유지합니다. 유지 정책을 설정할 때, 선택한 기간에 스트림 분석 작업에 원하는 복구 기간이 포함되는지 확인하세요.
Stream Analytics 직무에서 참조 데이터로 사용하는 데이터셋으로 Azure SQL Database를 만드세요.
SQL Database 참조 데이터 입력 정의
Stream Analytics 작업의 작업 토폴로지 아래에서 입력을 선택합니다. 참조 입력 추가를 선택한 후 SQL 데이터베이스를 선택하세요.
스트림 분석 입력 구성을 작성하세요. 데이터베이스 이름, 서버 이름, 로그인 자격 증명을 선택하세요. 참조 데이터 입력을 주기적으로 새로고침하려면 'On '을 선택하고 DD:HH:MM에서 주사율을 지정하세요. 주사율이 짧은 대규모 데이터셋의 경우, 델타 쿼리는 시작 시간과
@deltaStartTime종료 시간 사이에 삽입되거나 삭제된 SQL 데이터베이스 내 모든 행을 찾아 참조 데이터 내 변경 사항을 추적합니다.@deltaEndTime자세한 내용은 델타 쿼리를 참조하세요.
SQL 쿼리 편집기에서 스냅샷 쿼리를 테스트합니다. 자세한 내용은 Azure 포털의 SQL 쿼리 편집기를 사용하여 데이터 연결 및 쿼리를 참조하세요.
작업 설정에서 저장 계정을 지정하세요
구성 항목에서스토리지 계정 설정으로 가서 스토리지 계정 추가를 선택하세요.
작업 시작
- 다른 입력, 출력, 쿼리를 구성한 후에는 Stream Analytics 작업을 시작하세요.
Visual Studio를 사용하여 SQL 데이터베이스 참조 데이터를 추가하기
Visual Studio를 사용해 Azure SQL Database를 참조 입력 소스로 추가하는 방법은 다음과 같습니다:
Visual Studio의 필수 구성 요소
Stream Analytics Tools for Visual Studio를 설치합니다. 스트림 분석 도구는 다음 버전의 Visual Studio를 지원합니다:
- Visual Studio 2015
- Visual Studio 2019
Stream Analytics tools for Visual Studio 빠른 시작에 익숙해지세요.
스토리지 계정 만들기
중요합니다
Azure Stream Analytics는 이 스토리지 계정 내에서 스냅샷을 유지합니다. 유지 정책을 설정할 때, 선택한 기간에 스트림 분석 작업에 원하는 복구 기간이 포함되는지 확인하세요.
SQL Database 테이블 만들기
SQL Server Management Studio를 사용하여 참조 데이터를 저장할 테이블을 만듭니다. 자세한 내용은 SSMS를 사용하여 첫 번째 Azure SQL Database 디자인을 참조하세요.
다음 문장이 예제 테이블을 만듭니다:
create table chemicals(Id Bigint,Name Nvarchar(max),FullName Nvarchar(max));
구독 선택
Visual Studio의 보기 메뉴에서 서버 탐색기를 선택합니다.
Azure를 선택하고 길게 누르거나 우클릭한 후, Microsoft Azure 구독에 연결하기를 선택한 후 Azure 계정으로 로그인하세요.
Stream Analytics 프로젝트 만들기
파일>새 프로젝트를 선택합니다.
템플릿 목록에서 Stream Analytics를 선택한 후 Azure Stream Analytics Application을 선택하세요.
프로젝트 이름, 위치, 솔루션 이름을 입력한 후 확인을 선택하세요.
SQL Database 참조 데이터 입력 정의
새 입력을 만듭니다.
솔루션 탐색기에 오픈 Input.json.
Stream Analytics 입력 구성을 입력합니다. 데이터베이스 이름, 서버 이름, 새로고침 유형, 그리고 주사율을 입력하세요.
DD:HH:MM형식으로 새로 고침 빈도를 지정합니다.
한 번만 실행하거나 주기적으로 실행을 선택하면, Visual Studio 프로젝트 Input.json 파일 노드 아래에 [입력 별칭].snapshot.sql이라는 SQL CodeBehind 파일이 생성됩니다.
Delta로 주기적으로 새로고침을 선택하면 Visual Studio 두 개의 SQL CodeBehind 파일을 생성합니다: [Input Alias].snapshot.sql와 [Input Alias].delta.sql.
편집기에서 SQL 파일을 열고 SQL 쿼리를 작성합니다.
Visual Studio 2019를 사용 중이고 SQL Server Data Tools를 설치했다면, Execute를 선택해 쿼리를 테스트할 수 있습니다. SQL 데이터베이스에 연결하는 마법사가 열리고, 쿼리 결과가 하단 창에 나타납니다.
스토리지 계정 지정
JobConfig.json 열어 SQL 참조 스냅샷을 저장할 스토리지 계정을 지정하세요.
로컬로 테스트하고 Azure에 배포
작업을 Azure에 배포하기 전에 쿼리 로직을 실시간 입력 데이터와 대조해 로컬에서 테스트할 수 있습니다. 이 기능에 대한 자세한 내용은 Visual Studio용 Azure Stream Analytics 도구를 사용해 로컬에서 실시간 데이터를 테스트하는 항목을 참조하세요 (Preview). 테스트가 끝나면 'Azure에 제출'을 선택하세요. 직무 시작 방법을 배우려면 Visual Studio 퀵스타트용 Azure Stream Analytics 도구를 사용하여 스트림 분석 작업 만들기를 참고하세요.
델타 쿼리
델타 쿼리를 사용할 때는 Azure SQL Database의 시간 테이블을 사용하세요.
Azure SQL Database에서 임시 테이블 만들기
CREATE TABLE DeviceTemporal ( [DeviceId] int NOT NULL PRIMARY KEY CLUSTERED , [GroupDeviceId] nvarchar(100) NOT NULL , [Description] nvarchar(100) NOT NULL , [ValidFrom] datetime2 (0) GENERATED ALWAYS AS ROW START , [ValidTo] datetime2 (0) GENERATED ALWAYS AS ROW END , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DeviceHistory)); -- DeviceHistory table will be used in Delta query스냅샷 쿼리를 작성합니다.
@snapshotTime 매개변수를 사용하여 스트림 분석 런타임에 시스템 시점에 유효한 SQL 데이터베이스 시간 테이블에서 참조 데이터셋을 가져오도록 지시합니다. 이 매개변수를 제공하지 않으면 클럭 스큐로 인해 부정확한 기준 참조 데이터셋을 얻을 위험이 있습니다. 다음 예시는 전체 스냅샷 쿼리를 보여줍니다:
SELECT DeviceId, GroupDeviceId, [Description] FROM dbo.DeviceTemporal FOR SYSTEM_TIME AS OF @snapshotTime델타 쿼리를 작성합니다.
이 쿼리는 시작 시점, @deltaStartTime, 종료 시각인 @deltaEndTime 내에 삽입되거나 삭제된 SQL 데이터베이스 내 모든 행을 검색합니다. 델타 쿼리는 스냅샷 쿼리와 동일한 열뿐만 아니라 opdration 열도 반환해야 합니다. 이 열은 @deltaStartTime 와 @deltaEndTime 사이에 행이 삽입되는지 삭제하는지 정의합니다. 결과 행에는 레코드가 삽입되면 1, 삭제되면 2가 태그로 지정됩니다. 또한 이 쿼리는 SQL Server 쪽에서 워터마크를 추가하여 델타 기간의 모든 업데이트가 적절하게 캡처되고 있는지 확인해야 합니다. 워터마크 없이 델타 쿼리를 사용하면 잘못된 참조 데이터셋이 나올 수 있습니다.
업데이트된 레코드의 경우 temporal 테이블은 삽입 및 삭제 작업을 캡처하여 목록을 만듭니다. 스트림 분석 런타임은 델타 쿼리 결과를 이전 스냅샷에 적용하여 참조 데이터를 최신 상태로 유지합니다. 다음 예시는 델타 쿼리를 보여줍니다:
SELECT DeviceId, GroupDeviceId, Description, ValidFrom as _watermark_, 1 as _operation_ FROM dbo.DeviceTemporal WHERE ValidFrom BETWEEN @deltaStartTime AND @deltaEndTime -- records inserted UNION SELECT DeviceId, GroupDeviceId, Description, ValidTo as _watermark_, 2 as _operation_ FROM dbo.DeviceHistory -- table we created in step 1 WHERE ValidTo BETWEEN @deltaStartTime AND @deltaEndTime -- record deleted스트림 분석 런타임은 체크포인트를 저장하기 위해 델타 쿼리 외에 주기적으로 스냅샷 쿼리를 실행할 수 있습니다.
중요합니다
참조 데이터 델타 쿼리를 사용할 때는 동일한 시간 참조 데이터 테이블을 여러 번 업데이트하지 마세요. 이로 인해 잘못된 결과가 나올 수 있습니다. 다음은 참조 데이터가 잘못된 결과를 낼 수 있는 원인이 될 수 있는 예시입니다:
UPDATE myTable SET VALUE=2 WHERE ID = 1; UPDATE myTable SET VALUE=2 WHERE ID = 1;올바른 예제:
UPDATE myTable SET VALUE = 2 WHERE ID = 1 and not exists (select * from myTable where ID = 1 and value = 2);이 조건은 중복 업데이트가 발생하지 않도록 보장합니다.
쿼리 테스트하기
쿼리가 스트림 애널리틱스 직무에서 참조 데이터로 사용하는 예상 데이터셋을 반환하는지 확인하세요. 쿼리를 테스트하려면 포털의 Job topology 섹션 아래 Inputs로 가세요. 그 다음 SQL 데이터베이스 참조 입력에서 샘플 데이터를 선택하세요. 샘플이 제공되면 파일을 다운로드하여 반환된 데이터가 예상과 일치하는지 확인할 수 있습니다. 개발 및 테스트 반복을 최적화하려면 Visual Studio의 Stream Analytics 도구를 사용하세요. 또한 선호하는 다른 도구를 사용해 먼저 쿼리가 Azure SQL Database에서 올바른 결과를 반환하는지 확인한 후, Stream Analytics 작업에 해당 쿼리를 사용할 수도 있습니다.
Visual Studio Code를 사용하여 쿼리 테스트
Visual Studio Code에 Azure Stream Analytics 도구 및 SQL Server(mssql)를 설치하고, ASA 프로젝트를 설정합니다. 자세한 내용은 빠른 시작: Visual Studio Code에서 Azure Stream Analytics 작업 만들기 및 SQL Server(mssql) 확장 자습서를 참조하세요.
SQL 참조 데이터 입력을 구성합니다.
SQL Server 아이콘을 선택하고 연결 추가를 선택하세요.
연결 정보를 입력합니다.
참조 SQL을 선택하고 누르거나 우클릭한 후 쿼리 실행을 선택하세요.
연결을 선택합니다.
쿼리 결과를 검토하고 확인합니다.
FAQ
Azure Stream Analytics에서 SQL 참조 데이터 입력을 사용하면 추가 비용이 발생하나요?
스트림 분석 직무에는 스트리밍 단위당 추가 비용이 없습니다. 그러나 Stream Analytics 작업이 연결된 Azure Storage 계정이 있어야 합니다. Stream Analytics 작업은 작업 시작 및 새로고침 기간 동안 SQL 데이터베이스를 쿼리하여 참조 데이터셋을 가져오고, 그 스냅샷을 스토리지 계정에 저장합니다. 이 스냅샷을 저장하면 Azure 스토리지 계정 가격 페이지에 상세히 설명된 추가 비용이 발생합니다.
참조 데이터 스냅샷이 SQL 데이터베이스에서 쿼리되어 Azure Stream Analytics 작업에 사용되고 있는지 어떻게 알 수 있나요?
Azure 포털의 메트릭 항목에서 논리 이름으로 필터링된 두 가지 지표를 통해 SQL 데이터베이스 참조 데이터 입력의 상태를 모니터링할 수 있습니다.
- InputEvents: 이 지표는 SQL 데이터베이스 참조 데이터셋에서 로드된 레코드 수를 측정합니다.
- InputEventBytes: 이 메트릭은 Stream Analytics 작업의 메모리에 로드된 참조 데이터 스냅샷의 크기를 측정합니다.
두 지표는 작업이 SQL 데이터베이스에서 참조 데이터셋을 가져오고, 이를 메모리에 불러오는지 여부를 나타냅니다.
특별한 종류의 Azure SQL Database가 필요한가요?
Azure Stream Analytics는 모든 유형의 Azure SQL Database에서 작동합니다. 하지만 참조 데이터 입력에 설정한 주사율이 쿼리 부하에 영향을 줄 수 있습니다. 델타 쿼리 옵션을 사용하려면 Azure SQL Database의 temporal tables를 사용하세요.
왜 Azure Stream Analytics가 Azure Storage 계정에 스냅샷을 저장하나요?
스트림 애널리틱스는 정확히 한 번의 이벤트 처리와 최소한 한 번의 이벤트를 보장합니다. 일시적인 문제가 작업에 영향을 미친다면, 상태 복원을 위해 약간의 재생이 필요합니다. 재생을 활성화하려면 이 스냅샷들을 Azure Storage 계정에 저장해야 합니다. 체크포인트 리플레이에 대한 자세한 내용은 Azure Stream Analytics jobs의 체크포인트 및 리플레이 개념을 참조하세요.
관련 콘텐츠
- Azure Stream Analytics의 출력 이해
- Azure SQL Database에 Azure Stream Analytics 출력
- Azure Stream Analytics에서 Azure SQL Database에 대한 처리량 성능 향상
- 관리 ID를 사용하여 Azure Stream Analytics 작업에서 Azure SQL Database 또는 Azure Synapse Analytics에 액세스
- Azure Functions를 사용하여 Azure SQL Database의 레코드 업데이트 또는 병합
- 빠른 시작: Azure Portal을 사용하여 Stream Analytics 작업 만들기