마이크로 파티션 및 데이터 클러스터링

기존 데이터 웨어하우스는 수용 가능한 성능을 달성하고 더 나은 확장을 가능하게 하기 위해 큰 테이블의 정적 분할에 의존합니다. 이러한 시스템에서 파티션 은 특수 DDL 및 구문을 사용하여 독립적으로 조작되는 관리 단위이지만, 정적 파티셔닝에는 유지 관리 오버헤드 및 데이터 스큐 등 잘 알려진 여러 제한 사항으로 인해 일정한 파티션 크기가 달성되지 않을 수 있습니다.

데이터 웨어하우스와 달리 Snowflake 데이터 플랫폼은 마이크로 파티셔닝 이라는 강력하고 고유한 파티셔닝 형식을 구현하여 알려진 제한 없이 정적 파티셔닝의 모든 이점을 제공할 뿐만 아니라 추가적인 상당한 이점을 제공합니다.

마이크로 파티션이란 무엇입니까?

Snowflake 테이블의 모든 데이터는 인접한 저장소 단위인 마이크로 파티션으로 자동 분할됩니다. 각 마이크로 파티션에는 50 MB에서 500 MB 사이의 압축되지 않은 데이터가 포함됩니다(데이터가 항상 압축되어 저장되기 때문에 Snowflake의 실제 크기는 더 작습니다). 테이블의 행 그룹은 열 방식으로 구성된 개별 마이크로 파티션에 매핑됩니다. 이 크기와 구조는 수백만 또는 수억 개의 마이크로 파티션으로 구성될 수 있는 초대형 테이블의 매우 세분화된 정리를 허용합니다.

Snowflake는 다음을 포함하여 마이크로 파티션에 저장된 모든 행에 대한 메타데이터를 저장합니다.

  • 마이크로 파티션의 각 열에 대한 값 범위입니다.

  • 고유 값의 수입니다.

  • 최적화 및 효율적인 쿼리 처리에 사용되는 추가 속성입니다.

참고

마이크로 파티셔닝은 모든 Snowflake 테이블에서 자동으로 수행됩니다. 테이블은 삽입/로드되는 데이터의 순서를 사용하여 투명하게 분할됩니다.

마이크로 파티션의 이점

테이블 데이터 분할에 대한 Snowflake 접근 방식의 이점은 다음과 같습니다.

  • 기존의 정적 파티셔닝과 달리 Snowflake 마이크로 파티션은 자동으로 파생됩니다. 명시적으로 사전에 정의하거나 사용자가 유지 관리할 필요가 없습니다.

  • 이름에서 알 수 있듯이 마이크로 파티션은 크기가 작기 때문에(압축 전 50~500 MB), 매우 효율적인 DML 및 더 빠른 쿼리를 위한 세분화된 정리가 가능합니다.

  • 마이크로 파티션은 값 범위에서 겹칠 수 있으며 균일하게 작은 크기와 결합되어 왜곡을 방지하는 데 도움이 됩니다.

  • 열은 종종 열 저장소 라고 하는 마이크로 파티션 내에 독립적으로 저장됩니다. 이를 통해 개별 열을 효율적으로 스캔할 수 있습니다. 쿼리에서 참조하는 열만 스캔됩니다.

  • 열은 또한 마이크로 파티션 내에서 개별적으로 압축됩니다. Snowflake는 각 마이크로 파티션의 열에 대해 가장 효율적인 압축 알고리즘을 자동으로 결정합니다.

이들 각 테이블에 대해 클러스터링 키를 지정하여 특정 테이블에서 클러스터링을 사용할 수 있습니다. 클러스터링 키 지정에 대한 자세한 내용은 다음을 참조하십시오.

클러스터링할 테이블 선택 전략을 비롯하여, 클러스터링에 대한 추가 정보는 다음을 참조하십시오.

마이크로 파티션의 영향

DML

모든 DML 작업(예: DELETE, UPDATE, MERGE)은 기본 마이크로 파티션 메타데이터를 활용하여 테이블 유지 관리를 용이하고 단순화합니다. 예를 들어, 테이블에서 모든 행 삭제와 같은 일부 작업은 메타데이터 전용 작업입니다.

테이블에서 열 삭제하기

테이블의 열이 삭제되면 삭제된 열의 데이터가 포함된 마이크로 파티션은 drop 문이 실행될 때 다시 작성되지 않습니다. 삭제된 열의 데이터는 저장소에 남아 있습니다. 자세한 내용은 ALTER TABLE의 사용법 노트 를 참조하십시오.

쿼리 정리

Snowflake에서 유지 관리하는 마이크로 파티션 메타데이터를 사용하면 반정형 데이터가 포함된 열을 포함하여 쿼리 런타임에 마이크로 파티션의 열을 정확하게 정리할 수 있습니다. 즉, 범위 내 값의 10%에 액세스하는 값 범위에 대한 필터 조건자를 지정하는 쿼리는 이상적으로는 마이크로 파티션의 10%만 스캔해야 합니다.

예를 들어, 큰 테이블에 날짜 및 시간 열이 있는 1년 동안의 기록 데이터가 포함되어 있다고 가정합니다. 데이터의 균일한 분포를 가정할 때 특정 시간을 대상으로 하는 쿼리는 이상적으로 테이블에 있는 마이크로 파티션의 1/8760을 스캔한 다음 시간 열에 대한 데이터가 포함된 마이크로 파티션 부분만 스캔합니다. Snowflake는 쿼리가 한 열로만 필터링하는 경우 전체 파티션이 검색되지 않도록 파티션의 열 기반 검색을 사용합니다.

즉, 스캔한 마이크로 파티션과 컬럼 데이터의 비율이 실제 선택된 데이터의 비율에 가까울수록 테이블에서 수행되는 정리가 더 효율적입니다.

시계열 데이터의 경우 이 수준의 정리는 1시간 이하의 세분화된 범위(즉, 《슬라이스》) 내의 쿼리에 대해 잠재적으로 1초 미만의 응답 시간을 가능하게 합니다.

모든 술어 식을 정리에 사용할 수 있는 것은 아닙니다. 예를 들어, Snowflake는 하위 쿼리가 상수를 생성하더라도 하위 쿼리가 있는 조건자를 기반으로 마이크로 파티션을 정리하지 않습니다.

데이터 클러스터링이란 무엇입니까?

일반적으로 테이블에 저장된 데이터는 자연 차원(예: 날짜 및/또는 지리적 리전)에 따라 정렬/정렬됩니다. 이 《클러스터링》은 쿼리의 핵심 요소입니다. 정렬되지 않았거나 부분적으로만 정렬된 테이블 데이터는 특히 매우 큰 테이블에서 쿼리 성능에 영향을 미칠 수 있기 때문입니다.

Snowflake에서는 데이터가 테이블에 삽입/로드되면서 클러스터링 메타데이터가 수집되고 프로세스 중에 생성된 각 마이크로 파티션에 대해 기록됩니다. 그런 다음 Snowflake는 이 클러스터링 정보를 활용하여 쿼리 중 마이크로 파티션의 불필요한 스캔을 방지하고 이러한 열을 참조하는 쿼리의 성능을 크게 가속화합니다.

다음 다이어그램은 날짜별로 정렬된 4개의 열이 있는 Snowflake 테이블(t1)을 보여줍니다.

Logical and physical table structures with natural sorting

테이블은 4개의 마이크로 파티션에 저장된 24개의 행으로 구성되며 각 마이크로 파티션 간에 균등하게 분할된 행이 있습니다. 각 마이크로 파티션 내에서 데이터는 열별로 정렬 및 저장되므로 Snowflake는 테이블에 대한 쿼리에 대해 다음 작업을 수행할 수 있습니다.

  1. 먼저 쿼리에 필요하지 않은 마이크로 파티션을 정리합니다.

  2. 그런 다음 나머지 마이크로 파티션 내에서 열별로 정리합니다.

이 다이어그램은 Snowflake가 마이크로 파티션에서 활용하는 데이터 클러스터링의 소규모 개념 표현으로만 의도되었다는 점에 유의하십시오. 일반적인 Snowflake 테이블은 수천 또는 수백만 개의 마이크로 파티션으로 구성될 수 있습니다.

Snowflake는 다음을 포함하여 테이블의 마이크로 파티션에 대한 클러스터링 메타데이터를 유지 관리합니다.

Snowflake는 다음을 포함하여 테이블의 마이크로 파티션에 대한 클러스터링 메타데이터를 유지 관리합니다.

  • 테이블을 구성하는 총 마이크로 파티션 수입니다.

  • 지정된 테이블 열 하위 세트에서 서로 겹치는 값을 포함하는 마이크로 파티션의 수입니다.

  • 겹치는 마이크로 파티션의 깊이입니다.

클러스터링 깊이

채워진 테이블의 클러스터링 깊이는 테이블의 지정된 열에 대해 겹치는 마이크로 파티션의 평균 깊이(1 이상)를 측정합니다. 평균 깊이가 작을수록 지정된 열에 대해 테이블이 더 잘 클러스터링됩니다.

클러스터링 깊이는 다음과 같은 다양한 목적으로 사용할 수 있습니다.

  • 특히 DML이 테이블에서 수행될 때 시간이 지남에 따라 큰 테이블의 클러스터링 《상태》 모니터링.

  • 클러스터링 키 를 명시적으로 정의하면 큰 테이블이 이점을 얻을 수 있는지 확인합니다.

마이크로 파티션이 없는 테이블(즉, 채워지지 않은/빈 테이블)의 클러스터링 깊이는 0 입니다.

참고

테이블의 클러스터링 깊이는 테이블이 잘 클러스터링되어 있는지 여부를 절대적으로 또는 정확하게 측정하는 것이 아닙니다. 궁극적으로 쿼리 성능은 테이블이 얼마나 잘 클러스터되어 있는지에 대한 가장 좋은 지표입니다.

  • 테이블에 대한 쿼리가 필요하거나 예상대로 수행되고 있다면 테이블이 잘 클러스터된 것입니다.

  • 시간이 지남에 따라 쿼리 성능이 저하되면 테이블이 더 이상 잘 클러스터되지 않을 수 있으며 클러스터링의 이점을 얻을 수 있습니다.

클러스터링 깊이 그림

다음 다이어그램은 A부터 Z까지 값 범위가 있는 5개의 마이크로 파티션으로 구성된 테이블의 개념적 예를 제공하고 중첩이 클러스터링 깊이에 미치는 영향을 보여줍니다.

Example of clustering depth

이 다이어그램은 다음과 같이 설명합니다.

  1. 처음에는 모든 마이크로 파티션의 값 범위가 겹칩니다.

  2. 중첩되는 마이크로 파티션의 수가 감소할수록 중첩 깊이가 감소합니다.

  3. 모든 마이크로 파티션에서 값 범위가 겹치지 않으면 마이크로 파티션은 일정한 상태 에 있는 것으로 간주됩니다(즉, 클러스터링으로 개선할 수 없음).

다이어그램은 실제 테이블을 나타내기 위한 것이 아닙니다. 많은 수의 마이크로 파티션에 데이터가 포함된 실제 테이블에서 모든 마이크로 파티션에서 일정한 상태에 도달하는 것은 쿼리 성능을 향상시키는 데 필요하지도 않고 필요하지도 않습니다.

테이블에 대한 클러스터링 정보 모니터링

Snowflake는 테이블에 대한 클러스터링 메타데이터를 보고 모니터링하기 위해 다음 시스템 기능을 제공합니다.

이러한 함수가 클러스터링 메타데이터를 사용하는 방법에 대한 자세한 내용은 이 항목의 클러스터링 깊이 설명 섹션을 참조하십시오.