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)
728x90
반응형
LIST