Delta Lake에서 최적화를 사용하여 데이터 파일 압축

OPTIMIZE를 참조하세요.

Azure Databricks의 Delta Lake는 테이블에서 쿼리 읽기 속도를 향상시킬 수 있습니다. 이 속도를 개선하는 한 가지 방법은 작은 파일을 더 큰 파일로 병합하는 것입니다.

참고 항목

Databricks Runtime 13.3 이상에서 Databricks는 델타 테이블 레이아웃에 클러스터링 사용하는 것이 좋습니다. Delta 테이블에 Liquid 클러스터링 사용을 참조하세요.

Databricks는 예측 최적화를 사용하여 델타 테이블에 대해 자동으로 실행하는 OPTIMIZE 것이 좋습니다. Delta Lake에 대한 예측 최적화를 참조하세요.

구문 예제

OPTIMIZE 명령을 실행하여 압축을 트리거합니다.

SQL

OPTIMIZE delta.`/data/events`

Python

from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

또는 다음을 수행합니다.

SQL

OPTIMIZE events

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()

많은 양의 데이터가 있고 이 중 일부만 최적화하려는 경우 WHERE를 사용하여 선택적 파티션 조건자를 지정할 수 있습니다.

SQL

OPTIMIZE events WHERE date >= '2022-11-18'

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

참고 항목

  • bin 압축 최적화는 idempotent입니다. 즉, 동일한 데이터 세트에서 두 번 실행되는 경우 두 번째 실행은 영향을 주지 않습니다.
  • bin 압축은 디스크 크기와 관련하여 균등하게 균형 잡힌 데이터 파일을 생성하는 것을 목표로 하지만 반드시 파일당 튜플 수는 아닙니다. 그러나 두 측정값에는 상관 관계가 있는 경우가 많습니다.
  • 작업을 실행하기 OPTIMIZE 위한 Python 및 Scala API는 Databricks Runtime 11.3 LTS 이상에서 사용할 수 있습니다.

델타 테이블의 판독기는 스냅샷 격리를 사용합니다. 즉, OPTIMIZE에서 트랜잭션 로그로부터 불필요한 파일을 제거할 때 판독기가 중단되지 않습니다. OPTIMIZE는 테이블과 관련된 데이터를 변경하지 않으므로 OPTIMIZE 전후의 읽기 결과는 동일합니다. 스트리밍 원본인 테이블에서 OPTIMIZE를 수행해도 이 테이블을 원본으로 처리하는 현재 또는 미래의 스트림에는 영향을 주지 않습니다. OPTIMIZE는 작업에서 제거한 파일과 추가한 파일에 대한 파일 통계(최소, 최대, 합계 등)를 반환합니다. Optimize 통계에는 Z 순서 지정 통계, 일괄 처리 수 및 최적화된 파티션 수도 포함됩니다.

자동 압축을 사용하여 작은 파일을 자동으로 압축할 수도 있습니다. Azure Databricks에서 Delta Lake의 자동 압축을 참조 하세요.

얼마나 자주 실행 OPTIMIZE해야 하나요?

OPTIMIZE를 실행하는 빈도를 선택하면 성능과 비용 간에 균형이 유지됩니다. 최종 사용자 쿼리 성능을 향상시키려면 OPTIMIZE를 더 자주 실행합니다. 이로 인해 리소스 사용량이 증가하여 비용이 더 많이 발생합니다. 비용을 최적화하려면 자주 실행하지 않습니다.

Databricks는 시작 시 매일 OPTIMIZE를 실행하고 다음부터 빈도를 조정하여 비용 및 성능 사이의 상충 관계를 맞추도록 권장합니다.

실행 OPTIMIZE 하기에 가장 적합한 인스턴스 유형(bin-packing 및 Z-Ordering)은 무엇인가요?

두 작업은 모두 많은 양의 Parquet 디코딩 및 인코딩을 수행하는 CPU 집약적 작업입니다.

Databricks는 컴퓨팅 최적화 인스턴스 형식을 권장합니다. OPTIMIZE 또한 연결된 SSD의 이점을 누릴 수 있습니다.