데이터 건너뛰기

Note

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

Delta Lake 또는 관리형 Apache Iceberg 테이블에 데이터를 기록할 때 데이터 스키핑 통계가 자동으로 수집됩니다. Azure Databricks 쿼리 시 파일별 통계(최소값 및 최대값, null 개수 및 총 레코드)를 사용하여 관련 없는 파일을 건너뛰고 쿼리 속도를 향상합니다.

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

통계 열 지정

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

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

테이블 속성 Databricks 런타임을 지원함 Description
dataSkippingNumIndexedCols 지원되는 모든 Databricks 런타임 버전 데이터를 수집할 때 사용되는 열의 수를 늘리거나 줄입니다. 열 순서에 따라 달라집니다.
dataSkippingStatsColumns Databricks Runtime 13.3 LTS 이상 통계가 수집되는 열 이름 목록을 지정합니다. 대체합니다 dataSkippingNumIndexedCols.

테이블 속성은 테이블을 만들 때 또는 ALTER TABLE 문을 사용하여 설정할 수 있습니다. 테이블 속성 참조를 참조하세요. 다음 예제에서는 명명된 열에 통계 컬렉션을 설정하도록 기본 통계 컬렉션 동작을 재정의합니다.

Delta Lake

ALTER TABLE table_name SET TBLPROPERTIES('delta.dataSkippingStatsColumns' = 'col1, col2, col3')

빙산 테이블

ALTER TABLE table_name SET TBLPROPERTIES('iceberg.dataSkippingStatsColumns' = 'col1, col2, col3')

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

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

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Note

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

Z 순서 지정이란?

Note

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

Z 순서 지정은 관련 정보를 동일한 파일 집합에 공동 배치하는 기술입니다. Azure Databricks 데이터 건너뛰기 알고리즘은 이 공동 지역성을 자동으로 사용합니다. 이 동작은 읽어야 하는 데이터의 양을 줄입니다. 데이터를 Z 오더로 정렬하려면 ZORDER BY 절에서 정렬할 열을 지정합니다.

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

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

ZORDER BY에 대해 여러 열을 쉼표로 구분된 목록으로 지정할 수 있습니다. 그러나 효과는 각 추가 열과 함께 떨어집니다.

Databricks는 통계가 수집되지 않은 열에 ZORDER BY를 사용하는 것은 효과가 없고 불필요한 컴퓨팅 리소스를 사용하므로 그렇게 하지 않을 것을 권장합니다. 데이터를 건너뛰려면 min, max 및 count와 같은 열 로컬 통계가 필요합니다. 스키마의 열 순서를 다시 지정하여 특정 열에서 통계 수집을 구성하거나 통계를 수집할 열 수를 늘릴 수 있습니다.

Note

  • Z 순서 지정은 idempotent 가 아니지만 증분 작업이 되는 것을 목표로 합니다. Z 순서 지정에 걸리는 시간이 여러 실행보다 줄어드는 것은 보장되지 않습니다. 그러나 Z 순서로 된 파티션에 새 데이터가 추가되지 않은 경우 해당 파티션의 다른 Z 순서는 아무런 영향을 미치지 않습니다.

  • Z 순서 지정은 튜플 수와 관련하여 균등하게 분산된 데이터 파일을 생성하는 것을 목표로 하지만 스토리지의 데이터 크기는 반드시 그렇지 않습니다. 파일 크기 및 튜플 수는 상관 관계가 있지만, 그렇지 않은 경우 작업 시간을 최적화하는 오차가 있을 수 있습니다.

    예를 들어 ZORDER BY날짜 와 가장 최근 레코드가 모두 과거의 OPTIMIZE 레코드보다 훨씬 더 넓은 경우(예: 더 긴 배열 또는 문자열 값) 작업의 작업 기간 및 결과 파일 크기가 왜곡될 수 있습니다. 그러나 이는 명령 자체에 OPTIMIZE 대한 문제일 뿐입니다. 후속 쿼리에는 부정적인 영향을 미치지 않을 수 있습니다.