ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UNION과 UNION ALL의 차이점
    DATABASE/Hive 2024. 9. 29. 11:57
    728x90

    프로젝트를 진행하면서 순위 관련 쿼리문을 자주 작성하다 보니, UNION과 UNION ALL에 대해 더 깊이 알아봐야겠다는 필요성을 느꼈다. 또한 중복된 데이터가 왜 필요한지, 그리고 주로 어떤 곳에 활용되는지에 대한 궁금증이 생겼다. 이를 통해 더 알아볼 필요가 있다고 생각했다.

     

    UNION과 UNION ALL 둘 다 두 개 이상의 쿼리 결과를 합치는 데 사용되지만, 중요한 차이점이 있다.

     

    1. UNION (중복 제거)

    - 중복을 제거한다.

    - 결과 집합에서 중복된 행은 한 번만 나타난다.

     

    1) 중복 제거가 필요한 경우

    /*여러 쿼리의 결과를 결합하면서 중복된 레코드를 제거하고 싶을 때 사용한다.
    예시로 두 개의 테이블에서 고객 데이터를 가져와서 고유한 고객 목록을 생성하고 싶을 때 적합하다.*/
    
    SELECT customer_name FROM customers_2022 
    UNION 
    SELECT customer_name FROM customers_2023;

     

    2) 서로 다른 데이터셋 결합

    /*서로 다른 데이터셋에서 같은 형식의 데이터를 가져와 결합할 때 사용한다.
    서로 다른 지역의 판매 데이터를 통합하여 전체 판매 데이터를 보고 싶을 때 사용할 수 있다.*/
    
    SELECT product_name, sales_amount FROM sales_north 
    UNION 
    SELECT product_name, sales_amount FROM sales_south;

     

    3) 고유한 집합 생성

    /*분석이나 리포트에서 특정한 고유한 값의 집합을 생성하고자 할 때 
    특정 고객의 구매 기록을 합쳐서 중복 없이 전체 구매 목록을 작성하고 싶을 때 유용하다*/
    
    SELECT order_id FROM orders_2022 
    UNION 
    SELECT order_id FROM orders_2023;
     

    4) 데이터 정제

    /*데이터 정제 과정에서 중복된 항목을 제거하고 통합된 데이터를 생성하고 싶을 때 사용한다. 
    이는 데이터베이스의 일관성을 유지하는 데 중요하다.*/
    
    SELECT user_email FROM newsletter_subscribers 
    UNION 
    SELECT user_email FROM promotions_subscribers;
     

    5) 리포트 및 대시보드

    /*리포트나 대시보드에서 특정 지표를 나타내기 위해 다양한 소스에서 데이터를 결합하고 중복을 제거하여 
    클린한 데이터를 제공하고자 할 때 적합하다.*/
    
    SELECT campaign_id FROM marketing_campaigns 
    UNION 
    SELECT campaign_id FROM sales_campaigns;

     

    2. UNION ALL (중복 허용)

    - 중복을 제거하지 않는다.

    - 모든 결과를 그대로 합친다.

    - 중복된 데이터가 중요하거나, 성능 최적화가 필요할 때, 또는 중복 검사가 불필요할때 사용된다.

     

     

    1) 중복 데이터도 필요한 경우

    어떤 분석에서는 중복된 데이터도 의미가 있을 수 있는데 예시로 로그 데이터이벤트 발생 횟수와 같은 정보를 다룰 때는 중복된 레코드도 중요할 수 있기 때문에 중복된 값을 모두 포함하여 정확한 빈도나 수치를 확인해야 할 때는 UNION ALL이 적합하다.

    SELECT user_id, visit_time FROM web_logs_day1 
    UNION ALL 
    SELECT user_id, visit_time FROM web_logs_day2;
    
    /*동일한 사용자가 두 날 모두 방문했을 경우 그 방문 기록은 중복으로 출력된다.*/
    /*하지만 방문 횟수를 정확하게 분석할 수 있게 된다.*/

     

    2) 성능 최적화

    UNION은 중복 제거를 위해 비교 작업을 수행해하는데 비교 작업은 데이터가 많아질수록 시간이 많이 걸릴 수 있다. 반면, UNION ALL은 비교 없이 그냥 합치기만 하므로 더 빠르다. 성능이 중요한 경우에는 UNION ALL이 더 나은 선택이 될 수 있다.

    /*예시로 두 개의 대용량 테이블에서 데이터를 단순히 합치고 싶을 때, 중복이 있더라도 상관없다면 
    UNION ALL을 사용하여 성능을 높일 수 있다.*/
    
    
    SELECT customer_id, purchase_date FROM purchases_january 
    UNION ALL 
    SELECT customer_id, purchase_date FROM purchases_february;
    
    /*중복된 구매 기록이 있어도 성능이 더 중요할 수 있기 때문에 UNION ALL이 적합하다.*/

     

     

    3) 테이블 병합 시 중복이 아예 없을 때

    이미 두 개의 데이터셋이 중복이 없다는 것이 확실하다면 굳이 UNION을 사용할 필요가 없다. 중복 검사를 수행하는 것은 비효율적이므로, UNION ALL을 사용해서 더 빠르게 결과를 얻을 수 있다.

    /*두 개의 서로 다른 기간 동안의 데이터를 병합하는 경우, 
    각 기간의 데이터는 중복될 가능성이 없기 때문에 굳이 중복 제거를 할 필요가 없다*/
    
    SELECT order_id, order_date FROM orders_2022 
    UNION ALL 
    SELECT order_id, order_date FROM orders_2023;
    
    /*여기서 두 기간의 주문 데이터는 중복되지 않으므로 UNION ALL이 적합하다.*/

     

    4) 중복된 데이터가 의도적으로 필요할 때

    일부 비즈니스 로직에서는 중복된 데이터도 의도적으로 필요할 수 있다. 예를 들어, 각각의 소스에서 발생한 데이터를 모두 분석하고 싶을 때는 중복이 있어도 문제가 되지 않는다.

     

    728x90

    'DATABASE > Hive' 카테고리의 다른 글

    HiveQL - SELECT 문  (0) 2024.06.11
Designed by Tistory.