코딩 업무가 주업이었던 상황에서 벗어난 지 꽤 된 데다 애초부터 앱 개발이 주 커리어여서인지...
누가 보면 이런 기본적인걸 아직도 몰랐단 말이냐...라고 비웃을지도 모르겠지만ㅠ
그래도 이제라도 잊지 말자고 틈틈이 연습하고 공부한 내용들을 저장해둔다.
이번엔 Hive SQL에서 Select한 두 개의 결과들을 함께 Join 하는 방법을 찾아본다.
내가 이해한 내용으로 말로 풀어본다면...
- 2개의 테이블에서 원하는 결과를 우선 쿼리한다.
단 2개의 테이블을 Join할 수 있는 공통 Column은 존재해야 함 - 2개의 테이블을 각각 "as" 명령으로 지정해준다.
- 마지막으로 2개의 테이블을 Join 한 것을 from 에 두고 최종 쿼리를 완성한다.
Select후에 Join을 하게 된 이유
굳이 이렇게 복잡하게 먼저 테이블들을 Select 한 다음에 Join을 할 필요는 없을 수도 있다.
하지만, 지금 진행 중인 프로젝트의 경우 하나의 테이블에 기록되는 데이터의 양이
하루에만 데이터가 최소 몇십만 단위로 쌓이고 한 달이면 천만 단위의 데이터다.
그런 테이블을 다른 기초정보 테이블이랑 그냥 Join을 걸어버리면 안 그래도 Hadoop이 Join성능이 좋지 않다는데;;;
그래서 대량의 데이터가 저장된 테이블에서 Group By를 먼저 걸어서 Join이 발생되는 Row 수를 줄이는 게 목적이다.
(실제로 무분별한 Join으로 문제를 발생시켜본 적이나 trouble shooting을 해본 적이 많지는 않지만
다년간의 다양한 프로젝트 PM을 하다 보니 간접경험 혹은 주워들은 정보가 참 많긴 하다. 괜히 부끄럽;;;;)
date | name | no | drink_id | snack_id |
20220801 | bob | 1 | 180 | 150 |
20220801 | jack | 2 | 175 | 110 |
20220801 | john | 3 | 181 | 130 |
20220802 | bob | 1 | 181 | 150 |
20220802 | jack | 2 | 180 | 130 |
.... | .... | .... | .... | .... |
<테이블 1 - snack_bar> 직원들이 스낵바에서 구매한 구매이력을 모아둔 테이블(대량)
date | drink_id | drink_name |
20210801 | 180 | 사이다 |
20211002 | 175 | 콜라 |
20210921 | 181 | 환타 |
.... | .... | .... |
<테이블 2 - drink> 음료수 정보를 관리하는 테이블
2개의 테이블을 Select 한 뒤에 Join 걸어주기
단순 Join 하기
그냥 단순히 조인하는 방법은 비교적 간단하다.
select A.date, A.name, B.drink_name
from snack_bar A left join drink B on A.drink_id = B.drink_id
where A.date = '20220801'
group by A.name;
Select 먼저 하고 Join 하기
위의 2개의 테이블 중에서 snack_bar 테이블이 대량 데이터가 보관 중인 테이블이다.
그래서 먼저 해당 테이블에서 group by를 먼저 해서 Join대상 Row 수를 줄인 다음 Join을 해준다.
select a1.base_date, a1.ch_no, a1.submat_id, a2.submat_nm, a2.submat_len_cd, a1.dur, a1.cnt
from
(select date, name, drink_id from snack_bar
where date = '20220801'
group by name) A
left join
(select drink_id, drink_name from drink) B
on A.drink_id = B.drink_id;
대량 테이블에 그냥 Join 걸어서 하면 얼마나 심각한 부하가 발생되나 하는 걸
이번에 구축한 서버에서테스트해보고 싶은 마음이 아주 잠깐 들었지만 다시는 그런 생각을 하지 않기로 했다ㅎㅎ
그냥 안전하게 먼저 group by 하고 나서 Join을 하는 걸로....ㅠ
'IT, Software > DataBase' 카테고리의 다른 글
HeidiSQL 사용 MariaDB 접속하고 쿼리해보기 (2) | 2022.10.03 |
---|---|
Hive SQL - unix_timestamp, from_unixtime 활용하기 (0) | 2022.08.03 |
Hive SQL - String을 Datetime로 변환, 두개의 Datetime사이 초수 구하기 (0) | 2022.07.28 |
댓글