연습 - union 연산자를 사용하여 테이블 결과 결합

완료됨

이 연습에서는 운영자를 union 사용하여 다양한 국가/지역에서 수집된 판매 팩트를 결합합니다.

union 연산자 사용

영업 팀은 다음 국가/지역(오스트레일리아, 영국 및 미국) 각각에 대해 10개의 임의 판매 결과를 결합하는 단일 테이블을 만들도록 요청합니다.

let 이 문을 사용하여 SalesFact 테이블에서 특정 국가/지역의 레코드가 각각 10개인 테이블 형식 식을 세 개 만들어 세 국가/지역의 판매 데이터를 나타냅니다. 세 개의 개별 테이블로 생각할 수 있습니다.

이러한 테이블을 살펴보면 동일한 열이 있는 것을 볼 수 있습니다. 유일한 차이점은 열의 데이터입니다 RegionCountryName . 운영자를 union 사용하여 영국과 미국 대한 판매 팩트 테이블을 호주의 판매 팩트 테이블과 결합합니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

    let AustraliaSales = SalesFact // Sales facts from Australia
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10;
    let UnitedKingdomSales = SalesFact // Sales facts from United Kingdom
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10;
    let UnitedStatesSales = SalesFact // Sales facts from United States
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10;
    AustraliaSales
    | union UnitedKingdomSales, UnitedStatesSales
    

    결과는 다음 이미지와 같아야 합니다.

    Screenshot of the union operator with tables that have the same columns, query, and results.

  2. 세 테이블에서 모든 행을 가져옵니다. 쿼리를 수정하여 프랑스의 시뮬레이션된 데이터를 추가하고 다른 국가/지역의 데이터와 결합해 보세요.

다음 섹션에서는 let 문을 사용하여 시나리오에 필요한 열로 데이터를 시뮬레이션하는 임시 테이블을 만듭니다.

열이 다른 테이블과 union 연산자 사용

다음 달에 영업 팀은 3개 국가/지역의 판매 데이터를 만들도록 다시 요청합니다. 이번에 테이블을 검사하면 서로 다른 열이 있음을 알 수 있습니다. 연산자의 union 좋은 점은 서로 다른 열이 있더라도 테이블을 결합한다는 것입니다. 이 쿼리의 경우 파이프된 입력이 필요하지 않은 union 연산자에 대한 대체 구문을 사용합니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

    let AustraliaSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName;
    let UnitedKingdomSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation;
    let UnitedStatesSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName;
    union AustraliaSales, UnitedKingdomSales, UnitedStatesSales
    

    결과는 다음 이미지와 같아야 합니다.

    Screenshot of the union operator, with tables that have different columns, query, and results.

  2. 세 테이블의 모든 행과 테이블에서 발생하는 모든 열을 가져옵니다. 입력 행에 의해 정의되지 않은 셀은 null로 설정됩니다. 쿼리를 수정하여 더 많은 열을 추가하고 해당 값이 결과에 어떻게 채워지는지 확인합니다.

다른 열이 있는 테이블과 union 연산자를 사용하고 모든 테이블에서 발생하는 열만 반환합니다.

그 다음 달에 영업 팀은 3개 국가/지역의 판매 데이터를 만들도록 다시 요청하지만, 이번에는 3개 테이블 모두에 공통된 열만 원합니다. 이전에는 union 연산자가 테이블에서 발생하는 모든 열을 반환하는 것을 보았습니다. 이 동작은 외부 공용 구조체라고 하는 연산자의 기본값 union 이지만 명확성을 위해 항상 공용 구조체 종류를 명시적으로 지정하는 것이 가장 좋습니다.

모든 테이블에서 발생하는 열만 반환하려면 인수를 지정하여 동일한 시뮬레이션된 데이터에 내부 공용 구조체를 kind=inner 사용합니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

    let AustraliaSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName;
    let UnitedKingdomSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation;
    let UnitedStatesSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName;
    union kind=inner AustraliaSales, UnitedKingdomSales, UnitedStatesSales
    

    결과는 다음 이미지와 같아야 합니다.

    Screenshot of the union operator, returning common columns from tables that have different columns, query, and results.

    세 테이블의 모든 행을 가져오고 테이블에서 발생하는 열만 가져옵니다.

  2. 이제 동일한 이름의 열로 각 테이블을 확장하여 더 일반적인 열을 추가하도록 쿼리를 수정해 봅니다. 그런 다음 결과에서 해당 값이 어떻게 채워지는지 확인합니다.