뭐 아래와 같이 ... 기술적으로 뭔가 좋아 보이긴 하지만
기본 RDB 쿼리 튜닝할때 처럼 조인 되는 subQuery로 기간 및 조건 으로 줄여서 조인하는하는거랑 비슷해 보이는듯 ?
마스터 테이블에 파티션닝도 미리 되어 있어야 하고 ..
Apache Spark 3.0에서 도입된 쿼리 최적화 기능으로, 특히 스타 스키마 쿼리(Star Schema Query)에서 불필요한 데이터 스캔을 줄여 성능을 향상시키는 데 효과적입니다.
브로드캐스트 해싱:
작은 크기의 디멘션 테이블을 모든 익스큐터(Executor)에 브로드캐스트(Broadcast)합니다.
동적 필터 생성:
브로드캐스트된 디멘션 테이블 데이터를 기반으로 팩트 테이블 스캔에 적용할 동적 필터를 생성합니다.
파티션 프루닝:
동적 필터를 사용하여 팩트 테이블의 관련 없는 파티션을 스캔하지 않고 건너뜁니다.
성능 향상:
불필요한 데이터 스캔을 줄여 쿼리 실행 시간을 단축합니다.
리소스 절약:
스캔해야 할 데이터 양이 줄어들어 CPU, 메모리, I/O 등 리소스 사용량을 줄입니다.
스타 스키마:
팩트 테이블과 여러 개의 디멘션 테이블로 구성된 스타 스키마 형태의 데이터 모델에 효과적입니다.
조인 조건:
- 팩트 테이블과 디멘션 테이블 간의 조인 조건이 파티션 필터링에 적합해야 합니다.
- 디멘션 테이블이 브로드캐스트 해시 조인(Broadcast Hash Join) 방식으로 조인되어야 합니다.
Spark 버전:
Spark 3.0 이상에서 사용 가능합니다.
SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.country = 'USA'
위 쿼리에서 customers 테이블이 작고 country 열로 파티셔닝되어 있다면,
DPP를 통해 customers.country = 'USA' 조건을 만족하는 파티션만 스캔하여 orders 테이블의 불필요한 스캔을 방지할 수 있습니다.
브로드캐스트 해시 조인 힌트:
쿼리 힌트(Query Hint)를 사용하여 특정 테이블을 브로드캐스트 해시 조인으로 조인하도록 Spark 쿼리 플래너에게 지시할 수 있습니다. 예를 들어, 다음과 같이 /+ BROADCAST(products) / 힌트를 사용하여 products 테이블을 브로드캐스트 해시 조인으로 조인하도록 지정할 수 있습니다.