✅ Azure Stream Analytics ✅ Fabric Eventstream
표준 T-SQL과 마찬가지로 Azure Stream Analytics 쿼리 언어의 JOIN은 둘 이상의 입력 원본의 레코드를 결합하는 데 사용됩니다. Azure Stream Analytics의 JOIN은 본질적으로 임시적입니다. 즉, 각 JOIN은 일치하는 행을 시간에 구분할 수 있는 정도에 대한 몇 가지 제한을 제공해야 합니다. 예를 들어 "동일한 LicensePlate 및 TollId에서 발생할 때 TollBoothExit 이벤트와 함께 TollBoothEntry 이벤트에 참가하고 서로 5분 이내에 참가"라고 말하는 것은 합법적입니다. 그러나 "LicensePlate 및 TollId에서 발생할 때 TollBoothExit 이벤트와 TollBoothEntry 이벤트 조인"은 그렇지 않습니다. 각 TollBoothEntry와 동일한 LicensePlate 및 TollId에 대한 모든 TollBoothExit의 무한 및 무한 컬렉션과 일치합니다.
관계에 대한 시간 범위는 DATEDIFF 함수를 사용하여 JOIN의 ON 절 내에 지정됩니다. 최대 DATEDIFF 크기는 7일입니다. 일반적인 사용에 대한 자세한 내용은 DATEDIFF를 참조하세요. DATEDIFF가 JOIN 조건 내에서 사용되는 경우 두 번째 및 세 번째 매개 변수는 특별한 처리를 얻습니다.
또한 SELECT *는 JOIN 문에서 사용할 수 없습니다.
문법
[ FROM { <input_source> } [ ,...n ] ]
<input_source> ::=
{
input_name [ [ AS ] input_alias ]
| <joined_table>
}
<joined_table> ::=
{
<input_source> <join_type> <input_source> ON <join_condition>
| [ <input_source> <join_type> <reference_data> ON <join_condition> ]
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ { INNER | LEFT [ OUTER ] } ] JOIN
주장들
<input_source>
입력 데이터 원본을 지정합니다.
<reference_data>
input_source 조인하려는 참조 데이터입니다. 자세한 내용은 참조 데이터 조인 섹션을 참조하세요.
<join_type>
조인 작업의 유형을 지정합니다.
잇다
지정된 입력 원본과 /또는 참조 데이터 간에 지정된 조인 작업이 발생해야 임을 나타냅니다. 조인 조건을 충족하는 왼쪽 및 오른쪽의 모든 행이 결과 집합에 포함됩니다.
경고
JOIN 원본이 분할된 경우 JOIN 조건자는 두 원본의 파티션 키와 일치하는 조건을 포함해야 합니다.
[ 왼쪽 외부 조인]
왼쪽 테이블에서 조인 조건에 맞지 않는 모든 행을 결과 집합에 포함시키고 내부 조인에서 반환된 모든 행과 오른쪽 테이블의 출력 열을 NULL로 설정하도록 지정합니다.
ON <join_condition>
조인의 기준이 되는 조건을 지정합니다. 조인 조건에는 관계에 대해 정의된 시간 바인딩 또는 임시 흔들기 실이 있어야 하며 JOIN 함수에 대한 SPECIAL DATEDIFF 함수의 특수 구문을 사용하여 JOIN의 ON 절 내에 지정됩니다.
예시
Azure Stream Analytics에서 모든 이벤트에는 잘 정의된 타임스탬프가 있습니다. 따라서 사용자는 다음과 같이 DATEDIFF 함수에서 행 별칭을 직접 사용해야 합니다.
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
위의 조인 조건은 EntryTime 이후에 ExitTime이 발생하는 경우에만 일치하지만 15분 후에는 일치합니다.
비고
SELECT 문에 사용된 DATEDIFF는 datetime 열 또는 식이 두 번째 및 세 번째 매개 변수로 전달되는 일반 구문을 사용합니다. 그러나 DATEDIFF 함수가 JOIN 조건 내에서 사용되는 경우 input_source 이름 또는 해당 별칭이 사용됩니다. 내부적으로 해당 원본의 각 이벤트에 연결된 타임스탬프가 선택됩니다.
시간 제한 조건은 ON 절 내의 다른 조건과 함께 사용할 수 있습니다. 예를 들면 다음과 같습니다.
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
세 개 이상의 테이블을 조인할 때 동일한 규칙이 --- 시간 범위를 적용하여 일치하는 모든 이벤트가 서로 유한한 시간 내에 발생하도록 해야 합니다. 예를 들어 트랜잭션 시작 이벤트와 트랜잭션 종료 이벤트 간에 발생한 모든 오류를 찾으려면 다음을 말할 수 있습니다.
SELECT TS.Id, TS.Name, TS.Amount, E.ErrorCode, E.Description
FROM TStart TS TIMESTAMP BY TStartTime
JOIN TEnd TE TIMESTAMP BY TEndTime
ON DATEDIFF(second, TS, TE) BETWEEEN 0 AND 5
AND TS.Id = TE.Id
JOIN Error E TIMESTAMP BY ErrorTime
ON DATEDIFF(second, TS, E) BETWEEN 0 AND 5
AND DATEDIFF(second, TE, E) < 0
AND E.TId = TS.Id
분할된 원본을 조인할 때 JOIN 조건자는 두 원본의 파티션 키와 일치하는 조건을 포함해야 합니다.
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime PARTITION BY PartitionId
JOIN Input2 I2 TIMESTAMP BY ExitTime PARTITION BY PartitionId
ON I1.PartitionId = I2.PartitionId AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
마지막으로 Azure Stream Analytics는 내부 조인(기본값) 및 LEFT 외부 조인을 모두 지원합니다. 내부 조인의 경우 일치 항목이 발견될 때만 결과가 반환됩니다. 그러나 LEFT OUTER 조인의 경우 조인의 왼쪽에서 이벤트가 일치하지 않으면 오른쪽 행의 모든 열에 대해 NULL이 있는 행이 반환됩니다. 예를 들어 이벤트의 부재를 찾는 예제는 다음과 같습니다. 다음 쿼리는 차량이 유료 부스에 들어갔지만 15분 이내에 부스를 종료하지 않은 행을 반환합니다.
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
LEFT OUTER JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF( minute , I1 , I2 ) BETWEEN 0 AND 15
WHERE I2.TollId IS NULL
JOIN에 대한 특수 DATEDIFF 함수
문법
DATEDIFF ( datepart , input_source1, input_source2 )
주장들
dateparts
예제. 'second', 'millisecond', 'minute' 등)
input_source1
조인의 첫 번째 입력 소스입니다. 내부적으로 이 input_source 이벤트와 연결된 타임스탬프가 함수에 전달됩니다.
input_source2
조인의 두 번째 입력 소스입니다. 내부적으로 이 input_source 이벤트와 연결된 타임스탬프가 함수에 전달됩니다.
반환 형식
input_source1 타임스탬프에서 input_source2 타임스탬프로 경과된 dateparts의 단위 수를 반환합니다. 두 번째 input_source 타임스탬프가 첫 번째 타임스탬프보다 크면 반환된 값이 음수일 수 있습니다.