1.0. 쿼리를 작성하다 보면
다음처럼 쿼리가 복잡해지는 경우가 있다
```
SELECT
col1, col2
FROM (
SELECT
col1, col2, col3
FROM Table
)
만약 이 쿼리가 다른 곳에서도 필요하면 복사 -> 붙여넣기해서
SELECT
*
FROM (
SELECT
col1, col2
FROM (
SELECT
col1, col2, col3
FROM Table
)
)
.
.
.
-> 이러한 작업이 반복되면
-> 쿼리는 복잡해지고
-> 가독성이 떨어지게 된다
=> WITH 구문을 활용해서 가독성을 높여줄 수 있다!
WITH sample AS ( SELECT id, player1_id, player2_id, FROM basic.battle )SELECT * FROM sample
WITH sample AS ( SELECT id, player1_id, player2_id, FROM basic.battle ), sample2 AS ( SELECT id, name, hometown FROM basic.trainer WHERE id = 3 ), sample3 AS ( SELECT * FROM sample2 )SELECT * FROM sample3
WITH sample_tp AS ( SELECT trainer_id, catch_datetime, status FROM basic.trainer_pokemon ), sample_tp_t AS ( SELECT t.*, tp.* FROM basic.trainer as t LEFT JOIN sample_tp as tp ON tp.trainer_id = t.id )SELECT * FROM sample_tp_t WHERE hometown = "Seoul"
WITH 문을 통해 쿼리의 가독성을 높일 수 있지만,
회사에서의 데이터는 시간의 흐름에 따라 계속 업데이트 되기 때문에
-> WITH 문으로 저장한 쿼리를 계속해서 갱신시켜 줘야 한다
=> 쿼리를 계속 갱신시켜주거나
=> 속도가 느려도 된다면, VIEW를 사용하기도 한다
VIEW로 저장하기 - 쿼리를 실행한 후, 저장->뷰 저장을 클릭
- 저장할 데이터세트와 테이블 이름을 지정하고 저장을 클릭
이제 저장된 뷰(sample_view) 확인 가능. Table과 VIEW는 이모티콘이 다른 것을 확인할 수 있다
VIEW를 클릭한 후, 세부정보 클릭하면 쿼리문 확인 가능. 쿼리 수정도 가능
쿼리의 가독성을 챙기기 위해 WITH 문을 사용한다면,
비용을 줄이고, 데이터를 잘 관리하기 위해 PARTITON으로 나뉜 테이블을 사용한다
(테이블 저장에 따라 PARTITION이 없는 테이블도 있다)
PARTITION 사용 시 이점
PARTITION을 나누는 기준
1) Ingestion time (수집 시간): 데이터 수집(로드) 날짜를 기준으로 파티션 나눔
2) DATE/TIMESTAMP : Date나 Timestamp로 파티션 나눔 - 자주 사용
3) Integer (정수) : 정수 값을 기준으로 파티션 나눔
PARTITION으로 나뉜 테이블 확인하기 - battle 테이블은 Partition을 나눈 테이블이다 - 그냥 Table과 Partition을 나눈 테이블의 이모티콘이 다른 것을 알 수 있다
PARTITION을 나눈 테이블 사용하기 - Partition 테이블 클릭 -> 세부정보 -> 파티션 정보 먼저 확인
- 쿼리 -> 새 탭에서 열기 클릭
- 다음과 같은 쿼리가 자동으로 생성
- 쿼리를 조금 더 보기 좋게 가공
: WHERE 절에 건 PARTITION 필터