다음을 통해 공유


데이터 파일 레이아웃 최적화

예측 최적화는 Unity 카탈로그 관리 테이블에서 자동으로 실행됩니다 OPTIMIZE . Databricks는 데이터 유지 관리를 간소화하고 스토리지 비용을 절감하기 위해 모든 Unity 카탈로그 관리 테이블에 대해 예측 최적화를 사용하도록 설정하는 것이 좋습니다. Unity 카탈로그 관리 테이블에 대한 예측 최적화를 참조하세요.

OPTIMIZE 명령은 데이터 파일을 다시 작성하여 델타 테이블의 데이터 레이아웃을 개선합니다. 액체 클러스터링이 사용하도록 설정된 OPTIMIZE 테이블의 경우 데이터 파일을 다시 작성하여 액체 클러스터링 키로 데이터를 그룹화합니다. 파티션이 정의된 테이블의 경우 파티션 내에서 파일 압축 및 데이터 레이아웃이 수행됩니다.

액체 클러스터링이 없는 테이블에는 필요에 따라 다시 작성할 때 데이터 클러스터링을 개선하는 절이 포함될 ZORDER BY 수 있습니다. Databricks는 파티션 ZORDER또는 기타 데이터 레이아웃 접근 방식 대신 액체 클러스터링을 사용하는 것이 좋습니다.

OPTIMIZE를 참조하세요.

구문 예제

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

SQL

OPTIMIZE table_name

Python

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

Scala

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

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

SQL

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

Python

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

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
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해야 하나요?

Unity 카탈로그 관리 테이블에 대한 예측 최적화를 사용하도록 설정하여 비용 효율적일 때 자동으로 실행되도록 OPTIMIZE 합니다.

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

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

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

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

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