문자열 필드에 데이터 정렬을 지정하고 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=falseOPTIMIZE 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은 데이터 정렬에서 작동하지 않습니다.