다음을 통해 공유


Delta Lake에 대한 데이터 정렬 지원

문자열 필드에 데이터 정렬을 지정하고 Databricks Runtime 16.4 LTS 이상에서 데이터 정렬을 사용하는 델타 테이블을 읽을 수 있습니다.

테이블에서 정렬을 사용하도록 설정하면 collations-preview 작성자 테이블 기능이 추가됩니다. Delta Lake 기능 호환성 및 프로토콜을 참조하세요.

메모

기본적으로 Delta Lake는 문자열 필드에 대한 정렬 규칙을 UTF8_BINARY으로 설정합니다.

열 수준에서 데이터 정렬을 사용하여 테이블 만들기

다음 명령을 사용하여 열 수준에서 데이터 정렬을 사용하여 새 테이블을 만들 수 있습니다.

CREATE TABLE $tableName (
 nonCollatedColName STRING,
 collatedColName STRING COLLATE UNICODE,
 structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
 mapColName MAP<STRING, STRING COLLATE UNICODE>,
 arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta

데이터 정렬을 지정하도록 테이블 열 변경

다음 명령을 사용하여 데이터 정렬을 사용하도록 기존 열을 업데이트할 수 있습니다.

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

기본이 아닌 데이터 정렬을 제거하려면(있는 경우)

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

열의 정렬을 utf8_lcase으로 변경하려면:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

테이블에 대한 데이터 정렬을 변경해도 이전에 작성된 데이터에 대한 통계 또는 데이터 레이아웃이 자동으로 업데이트되지는 않습니다. 새로운 데이터 정렬에서 기록 데이터를 건너뛰는 파일의 성능을 개선하기 위해, Databricks는 다음을 권장합니다.

  • ANALYZE table_name COMPUTE DELTA STATISTICS 실행하여 기존 데이터 파일에 대한 파일 건너뛰기 통계를 업데이트합니다.

  • 액체 클러스터링을 사용하도록 설정된 테이블의 경우 OPTIMIZE FULL table_name 실행하여 액체 클러스터링을 업데이트합니다.

  • 사용하는 ZORDER테이블의 경우 다음을 수행합니다.

    • 다음 명령을 사용하여 기본 Spark 구성을 재정의하여 Spark 세션에서 증분 최적화를 사용하지 않도록 설정합니다.

      SET spark.databricks.optimize.incremental=false
      
    • OPTIMIZE table_name ZORDER BY zorder_column 실행하여 모든 기존 데이터 파일을 다시 작성합니다.

데이터 정렬은 항상 쿼리 결과에서 Azure Databricks에 의해 준수됩니다.

테이블에 대한 데이터 정렬 사용 안 함

데이터 정렬 기능을 삭제하기 전에 테이블의 각 문자열 열에 대한 데이터 정렬을 명시적으로 사용하지 않도록 설정해야 합니다.

열의 정렬 순서를 UTF8_BINARY으로 설정하려면 다음 구문을 사용하세요.

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

테이블 기능을 삭제하려면 다음 명령을 실행합니다.

ALTER TABLE table_name
DROP FEATURE collations-preview

Delta Lake 테이블 기능 삭제 및 테이블 프로토콜 다운그레이드를 참조하세요.

스키마 진화 및 데이터 정렬

데이터 정렬은 다음 규칙을 사용하여 스키마 진화와 상호 작용합니다.

  • 원본 열이 대상 테이블에 이미 있는 경우 대상 테이블에 있는 열의 데이터 정렬은 변경되지 않은 상태로 유지됩니다.
  • 원본 열에 데이터 정렬이 지정된 경우 대상 테이블에 추가된 열은 지정된 데이터 정렬을 사용합니다.
  • 데이터 정렬이 있는 열이 추가될 때 대상 테이블에 데이터 정렬이 활성화되지 않은 경우 collations-preview 테이블 기능이 활성화됩니다.

제한

데이터 정렬을 사용하도록 설정된 테이블에는 다음과 같은 제한 사항이 있습니다.

  • Databricks 런타임에서 인식할 수 없는 데이터 정렬을 사용하여 외부에서 만든 델타 테이블은 쿼리할 때 예외를 발생시킵니다.
  • 델타 공유는 지원되지 않습니다.
  • 정렬된 열은 CHECK 제약 조건과 함께 사용할 수 없습니다.
  • 생성된 열은 데이터 정렬을 사용할 수 없습니다.
  • 데이터 정렬된 열은 블룸 필터 인덱스 열과 함께 사용할 수 없습니다.
  • Scala 또는 Python용 OSS Delta Lake API에서는 데이터 정렬이 지원되지 않습니다. 데이터 정렬을 사용하려면 Spark SQL 또는 DataFrame API를 사용해야 합니다.
  • 동적 파티션 덮어쓰기는 데이터 정렬된 열에서 지원되지 않습니다.
  • 구조적 스트리밍 상태 쿼리에서는 정렬된 열을 참조할 수 없습니다.
  • 외부 판독기는 collations-preview 테이블 기능을 준수하지 않으면 UTF8_BINARY의 기본 데이터 정렬로 전환됩니다.
  • MAP은 키로 정렬된 문자열을 가질 수 없습니다.
  • UniForm은 데이터 정렬에서 작동하지 않습니다.