S3 폴더 구조에 따른 Static Partition Pruning, DPP 질문
안녕하세요.
Static Partition Pruning이 가능한 폴더 구조에 대해서 궁금한 점이 있습니다.
Hive-Style(/year=2024/data.csv) 로 폴더를 구성해야 스파크에서 메타데이터에 year를 설정하고 Static Partition Pruning, DP가 가능하다고 하는데 맞을까요?
맞다면 Hive-Style의 폴더 구조가 아닌 상태의 데이터들을 대상으로도 Static Partition Pruning, DPP가 가능한지 궁금합니다.ex.) Hive-style이 아닌 폴더 구조/2024/data.csv
/2025/data.csv
감사합니다!
답변 2
0
안녕하세요 sgjeong1108님,
Dynamic Partition Pruning(DPP)이 제대로 동작하려면 스파크가 "파티션 컬럼 -> 디렉터리 위치" 매핑을 메타데이터로 알고 있어야 합니다.
이 매핑을 알리는 일반적인 방법이 말씀하신 Hive-style 디렉터리(col=value/…) 이고, 이 경우 메타스토어가 없어도(그냥 spark.read.parquet만 해도) 자동 "파티션 디스커버리"가 됩니다
근데, Hive-style이 아니어도 됩니다. 다만 그 경우엔 메타스토어(또는 Delta/Iceberg 카탈로그) 에 파티션을 등록해 스파크가 매핑을 알게 해줘야 SPP/DPP가 작동합니다
만약 디렉토리가 /year=2024/data.parquet라면 다음과 같이 하시면 됩니다.
df.write
.partitionBy("year")
.mode("overwrite")
.parquet("/path/to/data")그게 아니라면 location을 사용하시면 됩니다.
CREATE EXTERNAL TABLE events (
user_id BIGINT, ts TIMESTAMP, ...
)
PARTITIONED BY (year INT)
STORED AS PARQUET
LOCATION 's3://bucket/events'; -- 이거는 상위 루트
-- 폴더명이 'year=2024'가 아니어도 되요
ALTER TABLE events ADD PARTITION (year=2024) LOCATION 's3://bucket/events/2024';
ALTER TABLE events ADD PARTITION (year=2025) LOCATION 's3://bucket/events/2025';
0
안녕하세요, 인프런 AI 인턴입니다. sgjeong1108님.
Static Partition Pruning은 데이터베이스 나 데이터 처리 시스템에서 사용하는 최적화 기술로, 쿼리를 실행할 때 불필요한 데이터를 가능한 한 줄여서 성능을 향상시키는 방법입니다. 이 기술은 특히 대규모 데이터셋을 다룰 때 유용합니다.
간단히 설명하자면, Hive-Style 폴더 구조를 사용하면 Spark가 파티션을 인식하여 관련된 데이터만을 스캔할 수 있도록 도와줍니다. 이로 인해 데이터의 불필요한 스캔을 줄이고 쿼리 성능을 크게 향상시킬 수 있습니다. Hive-Style의 폴더 구조는 일반적으로 다음과 같은 형태입니다: /year=2024/data.csv.
질문에 주신 대로 Hive-Style 폴더 구조가 아닌 상태(예: /2024/data.csv)에서 Static Partition Pruning을 사용하는 것은 제한적일 수 있습니다. 비슷한 효과를 얻기 위해서는 사용자 정의 logic을 통해 메타데이터 관리를 해야 할 수도 있으며, 이는 단순히 Hive-Style 폴더 사용보다 복잡할 수 있습니다.
관련 질문과 답변에서 유사한 주제를 더 깊게 다루고 있습니다:
- cdc 기반의 스트리밍 데이터 처리
- parquet read시 partition 개수
이 두 질문은 데이터 파티셔닝과 관련된 개념과 최적화 기법에 대해 더 많은 정보를 제공할 수 있으니 참고해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
databricks에 cluster 메뉴가 없습니다.
0
47
2
주피터 사용 및 도커 설치
0
92
2
broadcast Join과 boradcast + UDF 차이
0
62
2
append 모드 사용 시 집계
0
66
2
CDC 기반 스파크 아키텍처 구현 방법이 궁금합니다.
0
108
2
BroadCast 지원 가능 메모리 문의
0
89
2
rdd, dataframe, spark sql 각각 언제 사용할까요?
0
187
2
강의 후반부에 나온 실습 코드는 어디서 받을 수 있나요?
0
198
3
cdc 기반의 스트리밍 데이터 처리
1
230
2
broadcast 코드 예시 관련 질문
0
128
2
재생에 문제가 생겼어요 라는 메세지가 자꾸 뜨네요
0
115
1
스트리밍 예제 실행 시 py4j.protocol.Py4JNetworkError 발생
0
214
2
Repartition과 Coalesce에 대해 궁금한 점이 있어요!
1
166
1
pyspark 현업에서 로컬 개발 및 운영
1
337
1
Spark Structured Streaming Gracefully shutdown 질문
1
446
2
PySpark Runtime Architecture 내용 중 질문이 있습니다!
1
213
1
docker 설치 이후에 터미널 여는 부분에서 막혔습니다
1
458
2
app-<timestamp>-<executor_id> 폴더가 spark-events 내부에 생기게 하고 싶습니다.
1
275
1
pyspark.SparkContext 실행 오류 관련 질문
2
378
1
스파크 아키텍쳐 관련 문의 드립니다.
1
353
2
3.0에서 추가된 shuffle_hash, shuffle_replicate_nl hint는 어떤 상황에서 쓰는게 좋을까요?
1
320
1
데이터 엔지니터의 현 트렌드가 궁금합니다
1
472
1
스칼라강의도 제작하신다고 하셨는데 계획하고 계실까요??
1
296
2
pyspark / spark 차이점 질문드립니다.
1
1160
1





