데이터과학 삼학년

[Impala] with 문(clause) 결과셋을 임의 저장하지 않음 본문

Data Visualization & DataBase

[Impala] with 문(clause) 결과셋을 임의 저장하지 않음

Dan-k 2023. 2. 13. 22:38
반응형

WITH 문

-복잡한 쿼리를 sub-쿼리의 형태로 구조화하고 재사용하기에 용이한 구문

- with 문을 쓸 때 쿼리의 결과르 temp라는 임시 테이블에 쌓아놓기 때문에 재사용성이 있음 (RDMS, HIVE)

WITH
temp_a AS (
	SELECT *
    FROM dataset.tableA
), 
temp_b AS (
	SELECT *
    FROM dataset.tableB
)
SELECT *
FROM temp_b LEFT JOIN temp_a USING(id)

 

- 너무 많은 서브쿼리 구성은 temp 테이블(with 전용) 의 메모리 over할 수 있기 때문에 지양해야함

- 이를 보완하기 위해 Crate temp Table을 사용함

CREATE TEMPORARY TABLE tmp2 AS SELECT c2, c3, c4 FROM mytable;

 

[예외 케이스]

impala 에서는 WITH 구문 테이블을 쿼리의 결과셋을 임시 테이블에 저장하지 않아 재사용성 없음

- WITH 문의 결과셋 테이블을 하위 쿼리에서 재참조하게 되면 동일한 쿼리를 수행시키는 구조

- 따라서 별도의 테이블을 임의로 생성하여 작업할 필요가 있음

- 아래와 같은 쿼리가 있을 때 tableA는 두번 조회되는 구조로 동작함

WITH
temp_a AS (
	SELECT *
    FROM dataset.tableA
), 
temp_b AS (
	SELECT *
    FROM dataset.tableB
),
temp_c AS (
	SELECT *
    FROM temp_a
    WHERE condition > 0
)
SELECT *
FROM temp_c
    LEFT JOIN temp_b USING(id)
    LEFT JOIN temp_a USING(id)

 

 

source : https://www.2e.co.kr/news/articleView.html?idxno=301587

 

728x90
반응형
LIST
Comments