해결된 질문
작성
·
15
·
수정됨
0
안녕하세요.
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 개수
이 두 질문은 데이터 파티셔닝과 관련된 개념과 최적화 기법에 대해 더 많은 정보를 제공할 수 있으니 참고해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.