다음을 통해 공유


Delta Lake에 대한 데이터 건너뛰기

참고 항목

Databricks Runtime 13.3 이상에서 Databricks는 델타 테이블 레이아웃에 액체 클러스터링을 사용하는 것이 좋습니다. 클러스터링이 Z 순서 지정과 호환되지 않습니다. Delta 테이블에 Liquid 클러스터링 사용을 참조하세요.

데이터 건너뛰기 정보는 델타 테이블에 데이터를 쓸 때 자동으로 수집됩니다. Azure Databricks의 Delta Lake는 쿼리 시간에 이 정보(최소값 및 최대값, null 개수 및 파일당 총 레코드)를 활용하여 더 빠른 쿼리를 제공합니다.

문에 사용되는 ZORDER 열에 대해 수집된 통계가 있어야 합니다. Z 순서 지정이란?을 참조하세요.

델타 통계 열 지정

기본적으로 Delta Lake는 테이블 스키마에 정의된 처음 32개 열에 대한 통계를 수집합니다. 예측 최적화를 사용하도록 설정하면 파일 건너뛰기 통계가 지능적으로 선택되며 처음 32개 열로 제한되지 않습니다. 예측 최적화는 Unity 카탈로그 관리 테이블에서 통계를 수집하기 위한 명령인 자동으로 실행됩니다 ANALYZE. Databricks는 데이터 유지 관리를 간소화하고 스토리지 비용을 절감하기 위해 모든 Unity 카탈로그 관리 테이블에 대해 예측 최적화를 사용하도록 설정하는 것이 좋습니다. Unity 카탈로그 관리 테이블에 대한 예측 최적화를 참조하세요.

Important

예측 최적화 ANALYZE 는 공개 미리 보기로 제공됩니다. 여기에는 쓰기 중에 지능형 통계 수집이 포함됩니다. 공개 미리 보기에 등록하려면 이 양식을 사용합니다.

예측 최적화를 사용하지 않는 경우 다음 테이블 속성 중 하나를 설정하여 통계 컬렉션을 32열로 제한하는 동작을 수정할 수 있습니다.

테이블 속성 Databricks 런타임 지원 설명
delta.dataSkippingNumIndexedCols 지원되는 모든 Databricks 런타임 버전 델타에서 통계를 수집하는 열 수를 늘리거나 줄입니다. 열 순서에 따라 달라집니다.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS 이상 Delta Lake에서 통계를 수집하는 열 이름 목록을 지정합니다. 대체합니다 dataSkippingNumIndexedCols.

테이블 속성은 테이블을 만들 때 또는 문을 사용하여 ALTER TABLE 설정할 수 있습니다. Delta 테이블 속성 참조를 참조하세요.

이러한 속성을 업데이트해도 기존 데이터에 대한 통계가 자동으로 다시 계산되지는 않습니다. 대신 테이블에서 데이터를 추가하거나 업데이트할 때 향후 통계 수집의 동작에 영향을 줍니다. Delta Lake는 현재 통계 열 목록에 포함되지 않은 열에 대한 통계를 활용하지 않습니다.

Databricks Runtime 14.3 LTS 이상에서 테이블 속성을 변경하거나 통계에 대해 지정된 열을 변경한 경우 다음 명령을 사용하여 Delta 테이블에 대한 통계 다시 계산을 수동으로 트리거할 수 있습니다.

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

참고 항목

긴 문자열은 통계 수집 중에 잘립니다. 특히 열이 쿼리 필터링에 자주 사용되지 않는 경우 통계 컬렉션에서 긴 문자열 열을 제외하도록 선택할 수 있습니다.

Z 순서 지정이란?

참고 항목

Databricks는 모든 새 델타 테이블에 액체 클러스터링을 사용하는 것이 좋습니다. 액체 클러스터링과 함께 사용할 ZORDER 수 없습니다.

Z 순서 지정은 동일한 파일 세트에서 관련 정보를 공동 배치하는 기술입니다. 이 공동 배치는 Azure Databricks 데이터 건너뛰기 알고리즘의 Delta Lake에서 자동으로 사용됩니다. 이 동작은 Azure Databricks의 Delta Lake에서 읽어야 하는 데이터의 양을 크게 줄입니다. Z 순서 데이터에 대해 ZORDER BY 절에서 정렬할 열을 지정합니다.

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

열이 쿼리 조건자에서 일반적으로 사용되고 해당 열의 카디널리티가 높은 경우(즉, 많은 수의 고유 값) ZORDER BY를 사용합니다.

ZORDER BY에 대해 여러 열을 쉼표로 구분된 목록으로 지정할 수 있습니다. 그러나 추가 열이 있을 때마다 지역성 효과는 감소합니다. 통계가 수집되지 않는 열에 대한 Z 순서 지정은 효과적이지 못하며 리소스가 소모됩니다. 데이터 건너뛰기에는 min, max 및 count와 같은 열 로컬 통계가 필요하기 때문입니다. 스키마의 열을 다시 정렬하여 특정 열에 대한 통계 수집을 구성하거나 통계를 수집할 열의 수를 늘릴 수 있습니다.

참고 항목

  • Z 순서 지정은 idempotent 가 아니지만 증분 작업이 되는 것을 목표로 합니다. 여러 번 실행할 때 Z-순서 지정에 걸리는 시간이 감소한다는 보장은 없습니다. 그러나 Z-순서가 지정된 파티션에 새 데이터가 추가되지 않은 경우 해당 파티션의 다른 Z-순서 지정은 아무 효과도 없습니다.

  • Z 순서 지정은 튜플 수와 관련하여 균등하게 균형 잡힌 데이터 파일을 생성하는 것을 목표로 하지만 반드시 디스크의 데이터 크기는 아닙니다. 두 측정값에는 상관 관계가 있는 경우가 많지만 상관 관계가 없어서 최적화 작업 시간이 기울어지는 상황도 발생할 수 있습니다.

    예를 들어 ZORDER BY 날짜 와 가장 최근 레코드가 모두 과거의 레코드보다 훨씬 더 넓고(예: 더 긴 배열 또는 문자열 값) 작업의 작업 기간이 기울어질 뿐만 아니라 결과 파일 크기도 왜곡될 것으로 예상됩니다 OPTIMIZE . 그러나 이는 OPTIMIZE 명령 자체에 대한 문제일 뿐이며, 후속 쿼리에 부정적인 영향을 주지 않아야 합니다.