재분할을 사용하여 Azure Stream Analytics로 처리 최적화
이 문서에서는 다시 분할을 사용하여 완전히 병렬화할 수 없는 시나리오에 대해 Azure Stream Analytics 쿼리를 확장하는 방법을 보여 줍니다.
다음과 같은 경우 병렬화를 사용하지 못할 수 있습니다.
- 입력 스트림에 대한 파티션 키를 제어하지 않습니다.
- 원본은 나중에 병합해야 하는 여러 파티션에 입력을 "스프레이"합니다.
Event Hubs의 PartitionId와 같은 자연스러운 입력 체계에 따라 분할되지 않은 스트림의 데이터를 처리할 때 파티션을 다시 나누거나 재편성해야 합니다. 다시 분할하면 각 분할을 독립적으로 처리할 수 있으므로 스트리밍 파이프라인을 선형으로 스케일 아웃할 수 있습니다.
다시 분할하는 방법
다음 두 가지 방법으로 입력을 다시 분할할 수 있습니다.
- 다시 분할을 수행하는 별도의 Stream Analytics 작업 사용
- 단일 작업을 사용하되 사용자 지정 분석 논리보다 먼저 재분할을 수행합니다.
입력을 다시 분할하기 위해 별도의 Stream Analytics 작업 만들기
파티션 키를 사용하여 입력을 읽고 이벤트 허브 출력에 쓰는 작업을 만들 수 있습니다. 그런 다음 이 이벤트 허브는 분석 논리를 구현하는 다른 Stream Analytics 작업에 대한 입력 역할을 할 수 있습니다. 작업에서 이 이벤트 허브 출력을 구성할 때 Stream Analytics가 데이터를 다시 분할할 파티션 키를 지정해야 합니다.
-- For compat level 1.2 or higher
SELECT *
INTO output
FROM input
--For compat level 1.1 or lower
SELECT *
INTO output
FROM input PARTITION BY PartitionId
단일 Stream Analytics 작업 내에서 입력 다시 분할
먼저 입력을 다시 분할한 다음 쿼리의 다른 단계에서 사용할 수 있는 단계를 쿼리에 도입할 수도 있습니다. 예를 들어 DeviceId를 기반으로 입력을 다시 분할하려는 경우 쿼리는 다음과 같습니다.
WITH RepartitionedInput AS
(
SELECT *
FROM input PARTITION BY DeviceID
)
SELECT DeviceID, AVG(Reading) as AvgNormalReading
INTO output
FROM RepartitionedInput
GROUP BY DeviceId, TumblingWindow(minute, 1)
다음 예제 쿼리는 다시 분할된 데이터의 두 스트림을 조인합니다. 다시 분할된 데이터의 두 스트림을 조인하는 경우 스트림에는 동일한 파티션 키와 개수가 있어야 합니다. 결과는 동일한 파티션 구성표를 가진 스트림입니다.
WITH step1 AS
(
SELECT * FROM input1
PARTITION BY DeviceID
),
step2 AS
(
SELECT * FROM input2
PARTITION BY DeviceID
)
SELECT * INTO output
FROM step1 PARTITION BY DeviceID
UNION step2 PARTITION BY DeviceID
출력 체계는 각 하위 스트림이 독립적으로 플러시될 수 있도록 스트림 체계 키 및 개수와 일치해야 합니다. 스트림을 플러시하기 전에 다른 체계로 다시 병합하고 다시 분할할 수도 있지만 이 방법은 처리의 일반적인 대기 시간을 추가하고 리소스 사용률을 증가시키므로 피해야 합니다.
재분할을 위한 스트리밍 단위
작업의 리소스 사용량을 실험하고 관찰하여 필요한 파티션의 정확한 수를 결정합니다. SU(스트리밍 단위)의 수는 각 파티션에 필요한 실제 리소스에 따라 조정되어야 합니다. 일반적으로 각 파티션에는 6개의 SU가 필요합니다. 작업에 할당된 리소스가 충분하지 않은 경우 시스템은 작업에 도움이 되는 경우에만 재분할을 적용합니다.
SQL 출력을 위한 재분할
작업에서 출력에 SQL 데이터베이스를 사용하는 경우 명시적 재분할을 사용하여 처리량을 최대화하기 위해 최적의 파티션 수와 일치시킵니다. SQL은 8명의 기록기에서 가장 잘 작동하므로 플러시하기 전에 흐름을 8로 다시 분할하거나 더 업스트림 작업 성능에 도움이 될 수 있습니다.
입력 파티션이 8개보다 많은 경우 입력 파티션 구성표를 상속하는 것이 적합하지 않을 수 있습니다. 출력 작성자의 수를 명시적으로 지정하려면 쿼리에 INTO를 사용하는 것이 좋습니다.
다음 예제는 자연스럽게 분할되었는지 여부에 관계없이 입력에서 읽고, DeviceID 차원에 따라 스트림을 10배로 다시 분할하고 데이터를 출력으로 플러시합니다.
SELECT * INTO [output]
FROM [input]
PARTITION BY DeviceID INTO 10
자세한 내용은 Azure SQL Database에 Azure Stream Analytics 출력을 참조하세요.