개발지식 아카이브/Data - Iceberg
-
[Apache Iceberg] 아이스버그 테이블 최적화 - 메트릭 수집개발지식 아카이브/Data - Iceberg 2025. 1. 22. 07:30
Apache 아이스버그 테이블 최적화 - 메트릭 수집 편 메트릭 수집테이블 필드 정보의 수집아이스버그의 고유 특징인 Manifest는 테이블의 모든 필드 메트릭을 추적하여 쿼리 최적화를 돕는다 추적하는 필드 레벨 메트릭은 총 4개이다 카운트 메트릭 3개전체 카운트null 카운트distinct 카운트 Upper ~ lower 범위 값 설정 최적화 하지만 테이블이 엄청 크고, 칼럼수도 무척 많다면? 예를 들어 100개가 넘는다면?→ 이 때는 추적되는 메트릭 수가 메타데이터를 읽는 데 부담이 될 수 있다. 성능 개선을 위해 Table properties를 사용하여 컬럼별 메트릭 추적 여부를 조정할 수 있다.→ 쿼리 필터에서 자주 사용되지 않는 Column의 메트릭은 수집 해제할 수 있음 → ..
-
[Apache Iceberg] 아이스버그 테이블 최적화 - COW와 MOR 설정개발지식 아카이브/Data - Iceberg 2025. 1. 20. 07:30
Apache 아이스버그 테이블 최적화 - COW와 MOR COW와 MORRow 레벨 업데이트 처리 데이터 레이크의 특징은 WORM (Write once read many) 방식을 채택하고 있다는 것이다 => 즉, 파일을 수정할 수 없다.이는 Row 레벨로 데이터를 업데이트하는 여러 가지 모드를 탄생시켰다.데이터 특성 및 기록 주기에 따라서 성능을 최적화할 수 있는 모드를 선택하는 것이 좋다. COW Copy-On-Write 는 default approach로 평가된다 쓰기 성능이 느리다 Row가 하나라도 업데이트/삭제 되면, 해당 데이터 파일을 다시 작성한다 읽기 성능이 빠르다 삭제되거나 업데이트된 파일을 조정하지 않고 읽을 수 있기 때문 ..
-
[Apache Iceberg] 아이스버그 테이블 최적화 - 스토리지 최적화 편개발지식 아카이브/Data - Iceberg 2025. 1. 17. 08:30
Apache 아이스버그 테이블 최적화 - 스토리지 최적화 편 스토리지 최적화남아있는 만료된 파일들테이블을 업데이트하거나 컴팩션 실행시 → 새 파일이 생성되지만, 과거에 생성된 문제의 스몰 파일들은 테이블의 과거 스냅샷으로부터 참조가 끊기지 않고 있어서, 삭제되지 않는다 이러한 불필요한 파일들을 정리하려면?→ 스냅샷을 주기적으로 만료시켜야하며. (= 더 이상 Time travel이 필요하지 않은 스냅샷들) → 스냅샷에서 참조가 끊긴 고아 파일들을 삭제해야 한다 그리고→ 메타데이터를 다시 쓰기 하여, 메타데이터 읽기 성능을 개선한다 스냅샷 만료시키기 spark.sql("CALL system.expire_snapshots('temp.test_compaction', TIMESTAMP '..
-
[Apache Iceberg] 아이스버그 테이블 최적화 - 파티셔닝개발지식 아카이브/Data - Iceberg 2025. 1. 15. 07:30
Apache 아이스버그 테이블 최적화 - 파티셔닝 편 파티셔닝전통적 파티셔닝 특정 필드가 데이터 액세스 방법에 핵심적인 역할을 한다는 것을 알고 있다면 정렬을 넘어 파티셔닝을 시도할 수 있다.예를 들어 아래 그림은 데이터를, party라는 필드 값을 기준으로 파티셔닝을 한 것이다. party = blue 인 것들끼리, party = red 인 것들끼리, party = green... 각각 물리적으로 위치를 분리하여 모은 것이다.이렇게 파티셔닝하면, party 값에 따라 파일스캔범위를 극적으로 줄일 수 있다. 기존의 파티셔닝에는 사실, 다음과 같은 불편한 점들도 있었다. 쿼리 사용자는 테이블의 파티션 필드에 대한 사전 지식이 있어야 한다.버킷으로 분할하려면 레코드가 속한 버킷을 명시하는 추가 ..
-
[Apache Iceberg] 아이스버그 테이블 최적화 - 컴팩션과 정렬개발지식 아카이브/Data - Iceberg 2025. 1. 13. 10:14
Apache 아이스버그 테이블 최적화 - 컴팩션 편 성능 최적화의 핵심 = 읽는 파일 줄이기Apache 아이스버그 테이블의 데이터 성능 최적화의 핵심은 바로 스캔하는 파일의 개수를 줄이는 것이다 Apache Iceberg 테이블을 쿼리 할 때 일어나는 일을 생각해 보자.=> 각 데이터 파일을 열기 → 스캔 → 닫기 쿼리를 위해 스캔해야 하는 파일이 많을수록, 이러한 파일 작업은 쿼리에 더 큰 비용을 초래한다.이 문제는 스트리밍 또는 "실시간" 데이터의 세계에서 더욱 커진다 왜냐하면 스트리밍에서 생성되는 파일들은, 주로 데이터가 생성되는 대로 수집되어, 파일 각각에 몇 개의 레코드만 있는 경우가 많기 때문이다. 이것은 줄곧 스몰파일 이슈로 이어지곤 한다. 스캔해야 할 파일이 많으면 성능에 영향..