SQL 코드 편집기라고도 하는 SQL 연산자는 Microsoft Fabric 이벤트 스트림의 새로운 데이터 변환 기능입니다. SQL 연산자는 간단한 SQL 식을 사용하여 사용자 지정 데이터 변환 논리를 쉽게 정의할 수 있는 코드 편집 환경을 제공합니다. 이 문서에서는 이벤트 스트림의 데이터 변환에 SQL 연산자를 사용하는 방법을 설명합니다.
Note
밑줄(_) 또는 점(.)을 포함하는 Eventstream 아티팩트 이름은 SQL 연산자와 호환되지 않습니다. 최상의 환경을 위해 아티팩트 이름에 밑줄이나 점을 사용하지 않고 새 이벤트 스트림을 만듭니다.
Prerequisites
- 패브릭 용량 라이선스 모드 또는 참가자 이상의 권한이 있는 평가판 라이선스 모드의 작업 영역에 액세스합니다.
eventstream에 SQL 연산자 추가
SQL 연산자를 사용하여 데이터 스트림에서 스트림 처리 작업을 수행하려면 다음 지침을 사용하여 이벤트 스트림에 SQL 연산자를 추가합니다.
새 이벤트 스트림을 만듭니다. 그런 다음, 다음 옵션 중 하나를 사용하여 SQL 연산자를 추가합니다.
새 SQL 노드가 Eventstream에 추가됩니다. 연필 아이콘을 선택하여 SQL 연산자를 계속 설정합니다.
SQL 코드 창에서 eventstream에서 SQL 연산자 노드의 고유한 이름을 지정합니다.
쿼리 영역에서 쿼리를 편집하거나 쿼리 편집 을 선택하여 전체 화면 코드 편집기 보기를 입력합니다.
전체 화면 코드 편집기 모드는 왼쪽에 입력/출력 탐색기 창을 제공합니다. 코드 편집기 섹션을 조정할 수 있으므로 기본 설정에 따라 크기를 조정할 수 있습니다. 아래쪽의 미리 보기 섹션을 사용하면 입력 데이터와 쿼리의 테스트 결과를 모두 볼 수 있습니다.
출력 섹션에서 텍스트를 선택한 다음 대상 노드의 이름을 입력합니다. SQL 연산자는 이벤트 하우스, 레이크 하우스, 정품 인증기 또는 스트림을 포함하여 모든 Real-Time Intelligence 대상을 지원합니다.
SQL 연산자를 통해 처리된 데이터가 기록되는 출력 대상의 별칭 또는 이름을 지정합니다.
필요한 데이터 변환에 대한 SQL 쿼리 를 추가합니다.
eventstream은 Azure Stream Analytics 기반으로 빌드되며 Stream Analytics 쿼리 언어와 동일한 쿼리 의미 체계를 지원합니다. 구문 및 사용에 대한 자세한 내용은 Azure Stream Analytics 및 Eventstream 쿼리 언어 참조 참조하세요.
기본 쿼리 구조는 다음과 같습니다.
SELECT column1, column2, ... INTO [output alias] FROM [input alias]이 쿼리 예제는 1분마다 회의실에서 고온을 감지하는 방법을 보여 줍니다.
SELECT System.Timestamp AS WindowEnd, roomId, AVG(temperature) AS AvgTemp INTO output FROM input GROUP BY roomId, TumblingWindow(minute, 1) HAVING AVG(temperature) > 75이 쿼리 예제는 온도를
CASE분류하는 문을 보여줍니다.SELECT deviceId, temperature, CASE WHEN temperature > 85 THEN 'High' WHEN temperature BETWEEN 60 AND 85 THEN 'Normal' ELSE 'Low' END AS TempCategory INTO CategorizedTempOutput FROM SensorInput리본에서 쿼리 테스트 명령을 사용하여 변환 논리의 유효성을 검사합니다. 테스트 쿼리 결과가 테스트 결과 탭에 표시됩니다.
테스트를 마치면 리본에서 저장 을 선택하여 이벤트 스트림 캔버스로 돌아갑니다.
SQL 코드 창에서 저장 단추를 사용하도록 설정한 경우 이 단추를 선택하여 설정을 저장합니다.
목적지를 구성합니다.
추가 예제
다음 예제에서는 SQL 연산자를 사용하여 구현할 수 있는 일반적인 실시간 분석 시나리오를 보여 줍니다.
분당 도시 판매 집계 - 도시별로 그룹화된 고정되고 오버랩되지 않는 1분 판매 합계를 계산하는 데 사용합니다 TumblingWindow .
SELECT
System.Timestamp AS WindowEnd,
city,
SUM(salesAmount) AS TotalSales
INTO
output
FROM
input
GROUP BY
city,
TumblingWindow(minute, 1)
버스트 및 봇 검색 - 1분마다 평가되는 5분 롤링 기간 내에 비정상적으로 많은 수의 주문을 배치하는 사용자를 검색하는 데 사용합니다 HoppingWindow .
SELECT
System.Timestamp AS WindowEnd,
userId,
COUNT(*) AS OrderCount
INTO
output
FROM
input
GROUP BY
userId,
HoppingWindow(minute, 5, 1)
HAVING
COUNT(*) > 10
롤링 기준선에 대한 변칙 플래그 지정 - 최대 메트릭 값이 창 내 평균의 2배를 초과하는 롤링 평균을 계산하고 디바이스에 플래그를 지정하는 데 사용합니다 HoppingWindow . 이는 잠재적인 변칙을 나타냅니다.
SELECT
System.Timestamp AS WindowEnd,
deviceId,
AVG(metricValue) AS RollingAvg,
MAX(metricValue) AS CurrentMax
INTO
output
FROM
input
GROUP BY
deviceId,
HoppingWindow(minute, 10, 1)
HAVING
MAX(metricValue) > 2 * AVG(metricValue)
단일 SQL 연산자에서 여러 대상에 쓰기
SQL 연산자를 사용하면 SQL 쿼리에 여러 절을 추가하고 여러 출력을 정의하여 여러 INTO 출력 싱크 또는 대상으로 데이터를 보낼 수 있습니다.
쿼리 편집기에서 여러 출력 정의
SQL 연산자 노드에서 편집 (연필 아이콘)을 선택하여 SQL 코드 창을 엽니다.
SQL 코드 창에서 쿼리 편집을 선택하여 전체 화면 코드 편집기를 엽니다.
전체 화면 코드 편집기에서 + 섹션에서 선택하여 새 출력을 추가합니다. 선택한 출력 형식을 선택합니다. 쿼리에서 사용할 수 있는 출력의 별칭을 만듭니다. 만든 출력의 이름을 선택하고 원하는 이름을 입력합니다.
여러 SELECT 문 ... INTO 문을 사용하십시오
각 명령문은 SELECT 다른 출력에 쓸 수 있습니다. 쿼리를 추가하여 여러 대상에 출력을 씁니다.
다음 쿼리 예제에서 첫 번째 SELECT 문은 명명된 RawArchive 출력(type: Lakehouse)에 쓰고, 두 번째 SELECT 문은 (type: Eventhouse)라는 AggregationResults 출력에 씁니다.
-- Query 1: Archive all data to Lakehouse
SELECT *
INTO [RawArchive]
FROM [SQLDemoES-stream]
-- Query 2: Aggregate and filter data to create a real time dashboard to an Eventhouse
SELECT System.Timestamp() AS EventTime, COUNT(*) AS EventCount
INTO [AggregationResults]
FROM [SQLDemoES-stream]
GROUP BY TumblingWindow(minute, 1)
HAVING COUNT(*) > 100
중간 논리 다시 사용(모범 사례)
논리 중복을 방지하려면 WITH 절을 사용하고 해당 위치에서 여러 출력으로 팬아웃합니다. 다음 예제 InputStream에서는 CTE(공통 테이블 식)가 입력 스트림에서 한 번만 읽도록 정의하며, 두 SELECT 문장은 CTE를 참고하여 다른 출력으로 기록합니다. 이 방법은 입력 스트림에서 여러 번 읽을 수 없으므로 더 효율적입니다.
입력 스트림에서 한 번 읽고 여러 출력에 쓸 SQL 코드 편집기에서 다음 쿼리를 입력합니다.
--Base query: Reading input stream once With InputStream AS( SELECT * FROM [SQLDemoES-stream] ) -- Query 1: Archive all data to Lakehouse SELECT * INTO [RawArchive] FROM InputStream -- Query 2: Aggregate and filter data to create a real time dashboard to an Eventhouse SELECT System.Timestamp() AS EventTime, COUNT(*) AS EventCount INTO [AggregationResults] FROM InputStream GROUP BY TumblingWindow(minute, 1) HAVING COUNT(*) > 100테스트 쿼리를 선택하여 쿼리 결과의 유효성을 검사합니다. 쿼리에 정의된 각 출력에는 테스트 결과 패널에 별도의 탭이 있습니다.
저장을 선택하여 쿼리를 저장하고 편집기를 종료합니다.
SQL 편집기 창에서 다시 저장 을 선택합니다.
SQL 연산자에서 만든 각 대상 노드를 선택한 다음 각 노드에 대한 대상 설정을 구성합니다.
구성을 완료한 후에는 SQL 연산자 노드에 두 개의 출력 대상이 있는 다음 예제와 같이 eventstream이 표시됩니다.
SQL 연산자에서 이벤트 순서 지정 정책 구성
SQL 연산자는 이벤트 또는 애플리케이션 시간을 사용하여 데이터를 처리할 수 있습니다. 기본적으로 Eventstream은 도착 시간을 사용합니다.
이벤트 시간별로 처리하려면 쿼리에서 사용하여 TIMESTAMP BY 명시적으로 구성해야 합니다.
샘플 입력
{
"deviceId": "device123",
"temperature": 72,
"eventTime": "2024-01-01T12:00:00Z"
}
이벤트 시간을 사용하는 샘플 쿼리
SELECT
deviceId,
temperature,
System.Timestamp() AS EventTimestamp
INTO
Output
FROM
Input
TIMESTAMP BY eventTime;
SQL 연산자의 고급 설정에서 지연 도착 및 잘못된 주문 이벤트에 대한 임계값을 추가할 수도 있습니다.
Limitations
SQL 연산자는 모든 변환 논리를 중앙 집중화하도록 설계되었습니다. 따라서 동일한 처리 경로 내의 다른 기본 제공 연산자와 함께 사용할 수 없습니다. 단일 경로에 여러 SQL 연산자를 연결하는 것도 지원되지 않습니다.
토폴로지에 SQL 연산자를 추가하는 경우 새 대상 노드를 만들어야 합니다. 기존 대상 노드는 SQL 연산자에서 다시 사용할 수 없습니다.