Azure Stream Analytics 쿼리 문제 해결

이 문서에서는 Azure Stream Analytics 쿼리 개발과 관련한 일반적인 문제, 쿼리 문제를 해결하는 방법 및 해당 문제를 해결하는 방법을 설명합니다. 많은 문제 해결 단계를 수행하려면 Stream Analytics 작업에 대한 리소스 로그를 사용하도록 설정해야 합니다. 리소스 로그를 사용하도록 설정하지 않은 경우 리소스 로그를 사용하여 Azure Stream Analytics 문제 해결을 참조하세요.

쿼리가 기대되는 출력을 내지 못하고 있습니다

  1. 로컬로 테스트하여 오류를 검사합니다.

  2. Visual Studio Code용 Azure Stream Analytics 도구에서 작업 다이어그램을 사용하여 로컬로 쿼리를 단계별로 디버그합니다. 작업 다이어그램은 Azure Event Hubs와 Azure IoT Hub 같은 입력 소스에서 여러 쿼리 단계를 거쳐 최종적으로 출력 싱크로 데이터가 어떻게 흐르는지 보여줍니다. 스크립트는 각 쿼리 단계를 WITH 문장을 사용해 정의한 임시 결과 집합에 매핑합니다. 각 중간 결과 세트의 데이터와 지표를 확인하여 문제의 원인을 찾으세요.

    쿼리 단계의 미리보기 결과를 보여주는 Visual Studio Code 작업 다이어그램 스크린샷입니다.

  3. Timestamp By를 사용하는 경우 이벤트에 작업 시작 시간보다 큰 타임스탬프가 있는지 확인합니다.

  4. 다음과 같은 공통 문제를 제거합니다.

    • 쿼리의 WHERE 절이 모든 이벤트를 걸러내어 쿼리가 출력을 내지 않습니다.
    • 캐스트 기능이 실패하면 작업이 실패합니다. 형식 캐스팅 오류를 방지하려면 TRY_CAST를 대신 사용하세요.
    • 창 함수를 사용하는 경우 전체 창 기간을 기다려서 쿼리의 출력을 확인합니다.
    • 이벤트의 타임스탬프가 작업의 시작 시간보다 이르기 때문에 작업이 해당 이벤트를 삭제합니다.
    • JOIN 조건이 일치하지 않습니다. 매칭이 없으면 쿼리는 출력을 내지 않습니다.
  5. 이벤트 순서 정책을 예상대로 설정하는지 확인하세요. 설정으로 이동하여 이벤트 순서 지정을 선택합니다. 테스트 버튼은 쿼리를 테스트할 때 정책을 적용하지 않습니다. 이 결과는 브라우저 내 테스트와 프로덕션 작업 실행의 차이 중 하나입니다.

  6. 활동 및 리소스 로그를 사용하여 디버그:

쿼리를 단계별로 디버그

실시간 데이터 처리에서는 쿼리 중간에 데이터가 어떻게 보이는지 아는 것이 도움이 됩니다. 중간 데이터를 보려면 Visual Studio의 작업 다이어그램을 사용하세요. Visual Studio가 없다면 중간 데이터를 출력하는 추가 단계를 밟을 수 있습니다.

Azure Stream Analytics는 입력이나 작업의 단계를 여러 번 읽을 수 있기 때문에 추가 SELECT INTO 문장을 작성할 수 있습니다. 이렇게 하면 중간 데이터를 저장소에 입력하고, 프로그램 디버깅 시 시계 변수처럼 데이터의 정확성을 확인할 수 있습니다.

Azure Stream Analytics 작업의 다음 예제 쿼리에는 Azure Table Storage에 대해 하나의 스트림 입력, 두 개의 참조 데이터 입력 및 출력이 있습니다. 쿼리는 이벤트 허브의 데이터와 두 개의 참조 Blob을 조인하여 이름 및 범주 정보를 가져옵니다.

SELECT INTO를 사용해 이벤트 허브 입력과 두 개의 참조 블롭을 연결하는 스트림 애널리틱스 쿼리 예시 스크린샷입니다.

작업은 실행되고 있지만 출력에는 어떤 이벤트도 발생하지 않습니다. 여기 보이는 모니터링 타일에서 입력이 데이터를 생성하는 것을 볼 수 있지만, JOIN 의 어느 단계에서 모든 이벤트가 빠졌는지는 알 수 없습니다.

스트림 분석 모니터링 타일의 스크린샷으로, 입력 이벤트가 수신되었지만 출력 이벤트는 생성되지 않습니다.

이 상황에서는 중간 결과와 입력에서 읽은 데이터를 "기록"JOIN하기 위해 몇 개의 추가 SELECT INTO 문장을 추가할 수 있습니다.

이 예시에서는 새로운 "임시 출력" 두 개를 추가했습니다. 이는 원하는 어떤 싱크로도 지정할 수 있습니다. 여기서는 Azure Storage를 예로 사용합니다.

중간 결과를 저장소에 기록하기 위해 추가된 SELECT INTO 문이 추가된 Stream Analytics 쿼리 스크린샷입니다.

그런 다음 다음과 같이 쿼리를 다시 작성할 수 있습니다.

중간 JOIN 결과를 임시 출력으로 출력하는 재작성된 Stream Analytics 쿼리의 스크린샷입니다.

이제 작업을 다시 시작하고 몇 분 동안 실행되도록 합니다. 그런 다음 Visual Studio Cloud Explorer에서 temp1temp2을 쿼리하여 다음 표를 생성합니다:

temp1 테이블Stream Analytics 쿼리의 중간 JOIN 결과를 보여주는 temp1 테이블 스크린샷입니다.

temp2 테이블Stream Analytics 쿼리에서 이름 열이 올바르게 채워진 temp2 테이블 스크린샷입니다.

보시다시피 temp1temp2 모두 데이터가 있으며, temp2에서 name 열도 올바르게 채워져 있습니다. 하지만 출력에 데이터가 여전히 없으므로 뭔가 잘못됐습니다:

Stream Analytics 쿼리에서 데이터가 반환되지 않은 output1 테이블 스크린샷입니다.

데이터를 샘플링하면 문제가 두 번째 JOIN에 있다는 것을 거의 확실히 알 수 있습니다. Blob의 참조 데이터를 다운로드하고 살펴 볼 수 있습니다.

temp2의 from 열과 다른 GUID 형식을 보여주는 참조 데이터 테이블 스크린샷입니다.

보시다시피, 이 참조 데이터의 GUID 형식은 temp2[from] 열 형식과 다릅니다. 그래서 데이터가 예상대로 도착 output1 하지 않은 거야.

데이터 형식을 수정하고 참조 블롭에 업로드한 후 다시 시도하세요:

GUID 형식이 수정되어 참조 블롭에 업로드된 후 참조 데이터 테이블의 스크린샷입니다.

이번에는 출력 데이터가 예상대로 포맷되고 채워져 있습니다.

Stream Analytics 쿼리에서 예상대로 포맷되고 채워진 데이터를 보여주는 출력 테이블 스크린샷입니다.

리소스 사용률이 높습니다.

Azure Stream Analytics의 병렬 처리를 활용해야 합니다. 입력 파티션을 구성하고 분석 쿼리 정의를 조정하여 스트림 분석 작업의 쿼리 병렬화를 통해 확장 하는 방법을 배워보세요.

리소스 사용률이 지속적으로 80%를 초과하고, 워터마크 지연 시간이 늘어나고 백로그된 이벤트 수가 늘어나는 경우 스트리밍 단위를 증가시키는 것이 좋습니다. 사용률이 높으면 작업에서 할당된 최대 리소스에 가까운 용량을 사용하고 있음을 나타냅니다.

도움말 보기

추가 지원이 필요한 경우 Azure Stream Analytics용 Microsoft Q&A 질문 페이지를 참조하세요.