다음을 통해 공유


델타 테이블 데이터 파일의 크기 조정

적절한 크기의 파일은 쿼리 성능, 리소스 사용률 및 메타데이터 관리에 중요합니다. 파일이 작을수록 작업 오버헤드와 메타데이터 작업이 증가하지만, 큰 파일은 병렬 처리 기능을 충분히 활용하지 못하고 I/O 작업 분배를 왜곡할 수 있습니다. Delta Lake는 파티션 정리 및 데이터 건너뛰기를 위해 파일 메타데이터를 사용하므로 올바른 파일 크기를 대상으로 지정하면 효율적인 읽기, 쓰기 및 유지 관리가 가능합니다.

다음 섹션에서는 다양한 파일 크기 조정 기능을 사용하여 델타 테이블에 대한 성능을 달성하는 방법을 보여 줍니다.

튜닝 가능한 데이터 레이아웃 작업

Optimize

OPTIMIZE 명령은 작은 파일을 더 큰 파일로 다시 작성하여 델타 테이블의 데이터 레이아웃을 개선합니다. 파일 크기 조정 정보를 비롯한 자세한 내용은 OPTIMIZE 명령 설명서를 검토하세요.

자동 압축

자동 압축은 각 쓰기 작업 후 파티션 상태를 자동으로 평가합니다. 파티션 내에서 과도한 파일 조각화(너무 많은 작은 파일)를 검색하면 쓰기가 커밋된 OPTIMIZE 직후 동기 작업이 트리거됩니다. 압축은 프로그래밍 방식으로 도움이 되는 것으로 판단되는 경우에만 실행되므로 파일 유지 관리에 대한 이 기록기 기반 접근 방식은 일반적으로 최적입니다. 자세한 구성 옵션 및 추가 정보는 자동 압축 설명서를 참조하세요.

쓰기 최적화

쓰기 최적화는 쓰기 전 압축(bin packing)을 수행하여 작은 파일 오버헤드를 줄여 더 적은 수의 더 큰 파일을 생성합니다. 이 방법은 Spark가 Parquet 파일을 쓰기 전에 메모리 내 데이터를 최적으로 크기가 조정된 bin으로 섞어 즉시 쓰기 후 정리 작업을 수행하지 않고도 적절한 크기의 파일을 생성할 수 있는 가능성을 극대화합니다.

데이터 섞기의 계산 비용이 특정 쓰기 시나리오에 과도하고 불필요한 처리 시간을 추가할 수 있으므로 쓰기 최적화를 신중하게 사용해야 합니다. 쓰기 최적화는 쓰기 작업에서 나중에 압축할 수 있는 작은 파일을 생성할 경우 유용합니다.

쓰기 최적화로 인해 기록되는 파일이 더 적은 방법을 보여 주는 스크린샷

쓰기 최적화는 일반적으로 다음을 위해 유용합니다.

  • 분할된 테이블
  • 작은 삽입이 자주 있는 테이블
  • 많은 파일(MERGEUPDATEDELETE)을 터치할 가능성이 있는 작업

특정 테이블의 선택적 애플리케이션의 경우 세션 구성을 설정 해제하고 테이블 속성을 개별적으로 사용하도록 설정합니다. 세션 수준 구성을 설정 해제하면 Spark 세션이 쓰기 최적화를 적용해야 하는지 여부에 대해 각 테이블을 연기할 수 있습니다.

  1. 쓰기 최적화 해제

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. 개별 테이블에서 활성화

    ALTER TABLE dbo.table_name
    SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
    

Spark 세션의 모든 분할된 테이블에 대한 쓰기를 사용하도록 설정하려면 세션 구성이 설정되지 않았는지 확인하고 세션 구성 spark.microsoft.delta.optimizeWrite.partitioned.enabled을 사용하도록 설정합니다.

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

최적화 쓰기에서 생성된 대상 파일 크기는 구성을 spark.databricks.delta.optimizeWrite.binSize 통해 조정할 수 있습니다.

비고

리소스 프로필별 기본 최적화 쓰기 설정은 리소스 프로필을 참조하세요.

대상 파일 크기를 일관되게 설정

쓰기 최적화, 자동 압축 및 최적화를 위해 최소 및 최대 대상 파일 크기 세션 구성을 설정할 필요가 없도록 Microsoft Fabric은 테이블 수준에서 관련된 모든 데이터 레이아웃 구성을 통합하는 수단으로 테이블 속성을 제공합니다 delta.targetFileSize . 대상 파일 크기 값은 바이트 문자열(예: 1073741824b,1048576k1024m1g)로 입력됩니다. 지정하면 다른 모든 세션 구성 및 적응형 대상 파일 크기보다 우선합니다.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

적응형 대상 파일 크기

Microsoft Fabric은 적응형 대상 파일 크기를 제공하여 테이블 속성을 통해 세션 또는 개별 테이블에 있는 모든 테이블의 대상 파일 크기를 수동으로 조정하는 작업과 관련된 복잡성을 delta.targetFileSize 제거합니다. 적응형 대상 파일 크기는 테이블 크기와 같은 델타 테이블 추론을 사용하여 이상적인 대상 파일 크기를 예측하고 조건이 변경되면 자동으로 대상을 업데이트하여 수동 개입 또는 유지 관리 오버헤드 없이 최적의 성능을 보장합니다.

비고

현재는 기본적으로 사용하도록 설정되지 않았지만 적응 형 대상 파일 크기 세션 구성을 사용하도록 설정하는 것이 좋습니다.

다음 Spark 세션 구성을 설정하여 Spark 세션 내에서 만들거나 수정한 테이블에서 적응형 대상 파일 크기를 사용하도록 설정합니다.

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

사용하도록 설정하면 적응형 대상 파일 크기가 평가되고 다음 시나리오에서 설정됩니다.

  • CREATE TABLE AS SELECTCREATE OR REPLACE TABLE AS SELECT 작업
  • 덮어쓰기(예: DataFrame.write.mode("overwrite") 또는 INSERT OVERWRITE)
  • 새로운 테이블을 만들 때 ErrorIfExists, Append, 또는 Ignore 모드에서 씁니다.
  • 명령 시작 시 OPTIMIZE

설정되면 모든 OPTIMIZE 작업이 시작될 때 이상적인 크기가 계속 다시 평가되어 현재 추론이 최신 데이터 분포 및 테이블 증가를 반영하도록 합니다. 이 적응형 접근 방식은 시간이 지남에 따라 대상 파일 크기를 자동으로 업데이트하므로 데이터가 증가함에 따라 쿼리 및 쓰기 성능을 유지하면서 수동 튜닝이 필요하지 않습니다. 하이퍼 튜닝 또는 테스트 사용 사례와 같이 특정 크기로 잠가야 하는 경우 사용자 정의 delta.targetFileSize 테이블 속성을 명시적으로 설정하여 적응 설정을 재정의할 수 있습니다.

평가된 적응형 대상 파일 크기 값은 DESCRIBE DETAIL 또는 DESCRIBE EXTENDED 명령을 실행하여 테이블에서 감사할 수 있습니다. 적응형 평가 크기는 테이블 속성 delta.targetFileSize.adaptive에 바이트 문자열로 저장됩니다. 이 값은 쓰기 최적화, 자동 압축 및 최적화를 위한 최대 또는 대상 크기 구성으로 사용됩니다. 관련 구성에서 사용하는 최소값은 절반 delta.targetFileSize.adaptive으로 계산됩니다.

적응형 대상 파일 크기는 다음 Spark 세션 구성을 통해 추가로 구성할 수 있습니다.

재산 Description 기본값 세션 구성
minFileSize 적응형 대상 파일 크기가 평가할 때 사용하는 바이트 문자열로 최소 파일 크기(하한)를 지정합니다. 128MB에서 1GB 사이여야 합니다. 128m spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize 최대 파일 크기(상한)를 적응형 대상 파일 크기가 평가할 때 사용하는 바이트 문자열로 지정합니다. 128MB에서 1GB 사이여야 합니다. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize true계산된 대상 파일 크기가 도달maxFileSize하면 추가 크기 평가를 중지하여 매우 큰 테이블에 대한 평가 오버헤드를 줄입니다. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

비고

사용(기본값)을 사용하면 stopAtMaxSize 적응형 대상 크기가 도달한 후 최대값으로 고정되어 추가 계산을 피할 수 있습니다. 증가 후 테이블이 축소될 수 있는 경우 이 속성을 설정하여 false 최대 임계값 아래로 다시 계산할 수 있도록 합니다.

다음 차트에서는 테이블 크기와 최적의 parquet 파일 크기 간의 관계를 보여 줍니다. 10GB 미만의 테이블의 경우 Fabric Spark 런타임은 대상 파일 크기를 128MB로 평가합니다. 테이블 크기가 커짐에 따라 대상 파일 크기는 선형적으로 확장되며 10TB를 초과하는 테이블의 경우 최대 1GB에 도달합니다.

테이블 크기와 최적 parquet 파일 크기 간의 관계를 보여 주는 차트입니다.

128MB에서 작게 시작한 다음 테이블 크기가 커짐에 따라 parquet 파일의 크기를 조정하면 다음과 같은 이점이 있습니다.

  • 델타 파일 건너뛰기 개선: 적절한 크기의 파일은 최적의 데이터 클러스터링 및 건너뛰기를 지원하므로 쿼리 실행 중에 델타의 파일 건너뛰기 프로토콜이 더 관련이 없는 파일을 제거할 수 있습니다. 1GB 파일 대신 128MB 파일이 있는 작은 테이블을 사용하면 8배 더 많은 파일을 건너뛸 수 있습니다.

  • 업데이트 비용 절감: MERGEUPDATE 작업은 영향을 받는 파일만 다시 작성합니다. 적절한 크기의 파일은 작업당 처리되는 파일 수를 최소화하여 재작성되는 데이터의 양을 줄입니다. 삭제 벡터를 사용하도록 설정하면 적절한 파일 크기가 중요합니다. 대형 파일의 행 수준 삭제 표시자로 인해 압축 또는 제거 작업 중에 많은 정리 비용이 발생합니다.

  • 최적화된 병렬 처리: 올바른 크기의 파일을 사용하면 Spark가 이상적인 작업 병렬 처리를 수행할 수 있습니다. 너무 많은 작은 파일이 스케줄러를 압도합니다. 너무 적은 대용량 파일이 Spark 풀을 활용하지 않습니다. 최적의 크기 조정은 읽기 및 쓰기 처리량을 최대화합니다.

적응형 대상 파일 크기는 압축 성능을 30~60% 향상시키고 기본값보다 최적의 파일 크기를 선택할 때 더 빠른 쿼리 및 쓰기를 제공할 수 있습니다. 적응형 평가에서 기본 Spark 세션 구성과 동일한 크기를 생성하는 경우 성능이 향상될 것으로 예상되지 않습니다.

중요합니다

테이블이 증가함에 따라 적응형 대상 파일 크기가 증가할 때 이미 압축된 파일을 다시 작성하는 쓰기 증폭을 방지하려면 파일 수준 압축 대상을 사용하도록 설정합니다. 이 기능은 이전 적응형 대상 크기에서 압축된 파일이 불필요하게 다시 압축되지 않도록 방지합니다. 자세한 내용은 파일 수준 압축 대상에 대한 설명서를 참조하세요.

모범 사례 요약

  • 자주 발생하는 작은 쓰기(스트리밍 또는 마이크로 일괄 처리)가 있는 수집 파이프라인에 대해, 수동 예약을 방지하고 파일을 자동으로 압축되게 하기 위해 자동 압축 사용을 설정하십시오.
    • 다른 쓰기 패턴의 경우 작은 파일 누적에 대한 보험으로 사용하도록 설정하는 것이 도움이 될 수 있지만 데이터 처리 서비스 수준 목표가 처리 시간의 주기적인 급증을 허용할지 여부를 저울질합니다.
  • 적응형 대상 파일 크기를 사용하도록 설정 하여 최적의 대상 파일 크기에 대한 추측을 제거합니다.
  • 일괄 처리 작업에서 (데이터 셔플, 분할 시나리오, 또는 빈번한 작은 쓰기가 가능한) 제어된 데이터 수집 경로에서 쓰기 최적화를 사용하여 작은 파일 생성 및 다운스트림 유지 관리 비용을 줄입니다. 사전 쓰기 압축(쓰기 최적화)은 사후 쓰기 압축(최적화)보다 비용이 적게 드는 경향이 있습니다.
  • 파티션을 여러 개 다시 작성해야 하거나 Z-Order를 실행해야 하는 경우, 조용한 시간에 전체 테이블 작업을 OPTIMIZE 예약합니다.
  • 빠른 최적화를 사용하도록 설정하여 쓰기 증폭을 최소화하고 OPTIMIZE 의 멱등성을 향상시킵니다(빠른 최적화 참조).
  • 데이터 레이아웃 기능 및 Spark 세션에서 대상 파일 크기 값을 일관되게 유지하려면 delta.targetFileSize 사용 하거나 사용하는 것이 좋습니다.
  • 테이블 크기가 커지고 대상 파일 크기가 커짐에 따라 쓰기 증폭을 방지하기 위해 파일 수준 압축 대상을 사용하도록 설정합니다.