PXF 프레임워크를 사용해서 External table 생성하는 경우
PXF 설명 : https://cool-ri.tistory.com/6
Greenplum PXF
Greenplum PXF : Greenplum이 아닌 외부시스템에서 가지고 있는 DATA 를 Greenplum 으로 Load 할 수 있는 프레임워크 외부시스템 DATA는 ORACLE, Mariadb 처럼 RDBMS의 테이블이 될 수 있으며 하둡의 HDFS, 파일시스
cool-ri.tistory.com
디스크에 저장된 deflate/csv 파일을 즉석에서 읽어서 GPDB 로 스트리밍처럼 처리함.
-> 테이블처럼 보이지만 실제로는 파일을 직접 읽어옴
항목 | External Table | 내부 Table (heap/append-optimized) |
데이터 위치 | 외부 (PXF: HDFS, S3, etc) | GPDB 디스크 내 |
데이터 접근 방식 | 실시간 스트리밍 읽기 | 빠른 블록 I/O 읽기 |
병렬 처리 최적화 | 제한적 (파일 분할 기반) | 매우 강력 (분산, 인덱스, 분할) |
중간 결과 처리 | 모두 메모리 기반 → spill 가능성 ↑ | 디스크 정렬, temp spill, group 처리 가능 |
query planner 힌트 활용 | 거의 없음 | partition pruning, 인덱스, 통계 사용 가능 |
성능 예측 가능성 | 낮음 (네트워크·I/O 영향 큼) | 높음 (메모리와 디스크 기반 계산 안정) |
external table에서 group by + array_agg | 내부 테이블에서 동일한 group by + array_agg | |
쿼리 | SELECT key_col, array_agg(val_col) FROM ext_table GROUP BY key_col; |
|
과정 |
|
|
특징 | 데이터를 디스크에서 바로 읽음 (PXF) GPDB가 데이터를 미리 캐시하거나 정렬 불가 streaming 구조라 중간 취소·복구 어려움 |
데이터를 세그먼트 디스크에서 블록 단위로 읽음 GPDB가 디스크 정렬, spill, temp 파일 처리 가능 disk 기반으로 partial spill 가능 |
구조 | 파일 한 줄 읽고 → groupby 처리 → 다음 줄 읽고..." 이런 구조 메모리 overflow 나면 바로 fail |
데이터를 먼저 disk block으로 chunked load → 필요 시 부분적으로 spill to disk |
Query Plan | External Scan on ext_table GroupAggregate -> Sort (in-memory or spills) |
Gather Motion GroupAggregate -> Seq Scan on internal_table (can use bitmap index if available) |
반응형
'DB > PostgreSQL' 카테고리의 다른 글
Unlogged Table 정의 (0) | 2025.04.22 |
---|---|
쿼리 튜닝 - 플랜 분석 예시 (memory 부족) (0) | 2025.02.18 |
could not find segment file (0) | 2025.01.22 |
cgroup (0) | 2024.11.18 |
GPDB - Query Plan 예시 (0) | 2024.10.01 |