다음을 통해 공유


자습서: 여러 테이블의 데이터 조인

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

여러 테이블의 데이터를 조인하면 여러 원본의 정보를 결합하고 데이터 요소 간에 새 관계를 만들어 보다 포괄적인 분석을 할 수 있습니다. KQL(Kusto 쿼리 언어)에서 조조회 연산자는 테이블 간에 데이터를 결합하는 데 사용됩니다.

이 자습서에서는 다음 작업을 수행하는 방법을 알아봅니다.

이 자습서의 예제에서는 도움말 클러스터에서 공개적으로 사용할 수 있는 테이블을 사용합니다StormEvents. 사용자 고유의 데이터를 사용하여 탐색하려면 사용자 고유의 무료 클러스터를 만듭니다.

이 자습서의 예제에서는 Weather Analytics 샘플 데이터에서 공개적으로 사용할 수 있는 테이블을 사용합니다StormEvents.

필수 조건

다음 쿼리를 실행하려면 샘플 데이터에 액세스할 수 있는 쿼리 환경이 필요합니다. 다음 중 하나를 사용할 수 있습니다.

조인 연산자 사용

샘플 데이터베이스에는 Storm 이벤트와 관련된 두 개의 테이블이 있습니다. 하나는 호출 StormEvents 되고 다른 하나는 호출 PopulationData됩니다. 이 섹션에서는 테이블을 조인하여 하나의 테이블만으로는 불가능한 데이터 분석을 수행합니다.

데이터 이해

take 연산자를 사용하여 각 테이블에 포함된 데이터를 확인합니다.

StormEvents 
| take 5

다음 표에서는 반환된 22개 열 중 6개만 보여 줍니다.

StartTime EndTime EpisodeId EventId State(상태) EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 플로리다 토네이도 ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12,554 68796 미시시피 뇌우를 동반한 바람 ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 그루지야 뇌우를 동반한 바람 ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 ATLANTIC SOUTH Waterspout ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 플로리다 Heavy Rain ...
PopulationData 
| take 5

출력

State(상태) 채우기
ALABAMA 4918690
알래스카 727951
ARIZONA 7399410
ARKANSAS 3025880
캘리포니아 39562900

두 테이블 모두 열이 포함되어 있습니다 State . StormEvents 테이블에는 더 많은 열이 PopulationData 있으며 지정된 상태의 모집단을 포함하는 다른 열은 하나뿐입니다.

테이블 조인

PopulationData 공통 State 열에 테이블을 StormEvents 조인하여 주별 1인당 폭풍으로 인한 총 재산 피해를 찾습니다.

StormEvents
| summarize PropertyDamage = sum(DamageProperty) by State
| join kind=innerunique PopulationData on State
| project State, PropertyDamagePerCapita = PropertyDamage / Population
| sort by PropertyDamagePerCapita

쿼리에 추가하여 | render columnchart 결과를 시각화합니다.

주별 1인당 속성 손상을 보여 주는 세로 막대형 차트의 스크린샷

연산자를 사용하여 수행할 수 있는 여러 유형의 조인이 join 있습니다. 조인 버전 목록을 참조하세요.

조회 연산자 사용

조회 연산자는 팩트 테이블이 차원 테이블의 데이터로 보강되는 쿼리의 성능을 최적화합니다. 차원 테이블에서 조회되는 값으로 팩트 테이블을 확장합니다. 최상의 성능을 위해 시스템은 기본적으로 왼쪽 테이블이 더 큰 팩트 테이블이고 오른쪽 테이블은 더 작은 차원 테이블이라고 가정합니다. 이는 join 연산자가 사용하는 가정과 정확히 반대입니다.

도움말 클러스터에는 판매 데이터를 포함하는 다른 데이터베이스가 있습니다 ContosoSales . 다음 쿼리는 이 데이터베이스의 SalesFact 테이블과 Products 테이블을 병합하여 제품 범주별 총 매출을 가져오는 데 사용됩니다lookup.

SalesFact
| lookup Products on ProductKey
| summarize TotalSales = count() by ProductCategoryName
| order by TotalSales desc

출력

ProductCategoryName TotalSales
Games and Toys 966782
TV 및 비디오 715024
Cameras and camcorders 323003
컴퓨터 313487
Home Appliances 237508
오디오 192671
휴대 전화 50342
Music, Movies and Audio Books 33376

참고 항목

연산자는 lookup 두 가지 조인 버전만 지원합니다. leftouter inner

쿼리 생성 테이블 조인

조인은 동일한 테이블의 쿼리 결과에 따라 수행할 수도 있습니다.

번개와 눈사태 이벤트가 발생한 상태 목록을 만들려는 경우를 가정해 보겠습니다. 조인 연산자를 사용하여 열에 따라 번개 이벤트에 대한 데이터를 포함하고 다른 하나는 눈사태 이벤트에 대한 데이터를 포함하는 두 테이블의 행을 State 병합합니다.

StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
    StormEvents 
    | where EventType == "Avalanche"
    | distinct State
    )
    on State
| project State

출력

State(상태)
OREGON
UTAH
WYOMING
WASHINGTON
콜로라도주
IDAHO
네바다주