외부 테이블에 대한 파티션 검색
이 문서에서는 Unity 카탈로그 외부 테이블의 기본 파티션 검색 전략과 Hive 메타스토어와 일치하는 파티션 검색을 만드는 파티션 메타데이터 로그를 사용하도록 설정하는 선택적 설정에 대해 설명합니다.
Databricks는 파티션이 있는 Unity 카탈로그 외부 테이블에 대해 향상된 읽기 속도 및 쿼리 성능을 위해 파티션 메타데이터 로깅을 사용하도록 설정하는 것이 좋습니다.
Unity 카탈로그의 기본 파티션 검색 전략은 무엇인가요?
기본적으로 Unity 카탈로그는 파티션을 자동으로 검색하기 위해 테이블 위치의 모든 디렉터리를 재귀적으로 나열합니다. 파티션 디렉터리가 많은 큰 테이블의 경우 많은 테이블 작업의 대기 시간을 늘릴 수 있습니다.
파티션 메타데이터 로깅 사용
Important
이 기능은 공개 미리 보기 상태입니다.
Databricks Runtime 13.3 LTS 이상에서는 필요에 따라 Unity 카탈로그에 등록된 외부 테이블에 대한 파티션 검색 전략인 파티션 메타데이터 로깅을 사용하도록 설정할 수 있습니다. 이 동작은 Hive 메타스토어에 사용되는 파티션 검색 전략과 일치합니다. 이 동작은 파티션이 있고 Parquet, ORC, CSV 또는 JSON을 사용하는 Unity 카탈로그 외부 테이블에만 영향을 줍니다. Databricks는 이러한 테이블에 대해 향상된 읽기 속도 및 쿼리 성능을 위해 새로운 동작을 사용하도록 설정하는 것이 좋습니다.
Important
파티션 메타데이터 로깅을 사용하도록 설정된 테이블은 파티션 검색에 대한 동작 변경을 보여 줍니다. 파티션에 대한 테이블 위치를 자동으로 검색하는 대신 Unity 카탈로그는 파티션 메타데이터에 등록된 파티션만 적용합니다. 파티션 메타데이터 수동 추가, 삭제 또는 복구를 참조하세요.
이 동작은 이후 Databricks 런타임 버전에서 기본값이 됩니다. 이 기능을 사용하도록 설정된 테이블은 Databricks Runtime 13.3 LTS 이상을 사용하여서만 읽거나 쓸 수 있습니다.
참고 항목
Databricks Runtime 12.2 LTS 이하의 테이블을 쿼리하여 새 파티션 로그 동작을 사용하지 않는지 확인해야 합니다.
파티션 메타데이터 로깅 사용
테이블에서 파티션 메타데이터 로깅을 사용하도록 설정하려면 현재 SparkSession에 대해 Spark conf를 사용하도록 설정한 다음 외부 테이블을 만들어야 합니다. 이 설정은 테이블을 만드는 SparkSession에서만 필요합니다. 파티션 메타데이터 로깅을 사용하도록 설정된 테이블을 만들면 테이블 메타데이터의 일부로 이 설정을 유지하며 모든 후속 워크로드에서 이 기능을 사용합니다.
다음 구문에서는 SQL을 사용하여 Notebook에서 Spark conf를 설정하는 방법을 보여 줍니다. 컴퓨팅을 구성할 때 Spark 구성을 설정할 수도 있습니다.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Important
Databricks Runtime 13.3 LTS 이상에서 파티션 메타데이터 로깅을 사용하도록 설정된 테이블만 읽고 쓸 수 있습니다. Databricks Runtime 12.2 LTS 이하에서 테이블과 상호 작용해야 하는 워크로드가 있는 경우 이 설정을 사용하지 마세요.
외부 테이블은 삭제할 때 기본 데이터 파일을 삭제하지 않습니다. Databricks는 다음 예제와 같이 구문을 사용하여 CREATE OR REPLACE
테이블을 업그레이드하여 파티션 메타데이터 로깅을 사용하는 것이 좋습니다.
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Unity 카탈로그는 테이블 및 볼륨에 대한 경로 겹침에 대한 규칙을 적용합니다. 해당 위치에 테이블이 이미 있는 경우 데이터 파일 컬렉션에 새 Unity 카탈로그 테이블을 등록할 수 없습니다.
파티션 메타데이터를 사용하여 테이블 작업
Databricks는 Unity 카탈로그에 등록된 모든 테이블에 대해 모든 읽기 및 쓰기에서 테이블 이름을 사용하는 것이 좋습니다. 파티션 메타데이터가 있는 테이블의 경우 테이블 레지스터에 추가된 새 파티션이 Unity 카탈로그에 추가되고 테이블에 대한 쿼리가 등록된 모든 파티션을 읽도록 보장합니다.
읽기 또는 쓰기에 경로 기반 패턴을 사용하면 파티션이 무시되거나 Unity 카탈로그 메타스토어에 등록되지 않을 수 있습니다. 제한 사항 보기.
파티션 나열
다음 명령을 사용하여 Unity 카탈로그에 등록된 모든 파티션을 파티션 메타데이터로 표시합니다.
SHOW PARTITIONS <table-name>
단일 파티션이 Unity 카탈로그에 등록되어 있는지 확인하려면 다음 명령을 사용합니다.
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
수동으로 파티션 메타데이터 추가, 삭제 또는 복구
Unity 카탈로그를 사용하려면 외부 테이블에 대한 모든 파티션이 테이블 등록 중에 절을 사용하여 LOCATION
등록된 디렉터리 내에 포함되어야 합니다.
파티션 메타데이터를 사용하도록 설정하면 테이블 위치에서 파티션을 자동으로 검색할 수 없습니다. 외부 시스템이 테이블 위치에 데이터를 쓰거나 경로 기반 쓰기를 사용하여 테이블의 레코드를 추가하거나 덮어쓰는 경우 파티션 메타데이터를 수동으로 복구해야 합니다.
Azure Databricks는 Parquet, ORC, CSV 및 JSON에서 지원되는 테이블을 저장하기 위해 Hive 스타일 분할을 사용합니다. Hive 스타일 파티션에는 파티션 디렉터리에서 등호로 연결된 키-값 쌍이 포함됩니다 year=2021/month=01/
.
테이블에서 Hive 스타일 분할을 사용하는 경우 Unity 카탈로그의 파티션 메타데이터를 테이블 위치에 있는 파티션과 동기화하는 데 사용할 MSCK REPAIR
수 있습니다. 다음 구문 예제에서는 일반적인 작업을 보여 줍니다.
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
REPAIR TABLE참조.
다른 파티션 형식에 대한 경로를 수동으로 지정
테이블에서 Hive 스타일 분할을 사용하지 않는 경우 파티션을 추가할 때 파티션 위치를 수동으로 지정해야 합니다. 파티션을 수동으로 지정하면 구문에 비해 MSCK REPAIR
대기 시간을 줄일 수 있습니다. 특히 파티션 수가 많은 테이블의 경우 그렇습니다. 다음 구문 예제에서는 파티션 추가를 보여줍니다.
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
구문을 사용하여 ALTER TABLE
파티션의 위치를 삭제, 이름 바꾸기, 복구 및 설정할 수도 있습니다.
ALTER TABLE ... PARTITION참조하세요.
새 파티션 메타데이터 사용 안 함
새 테이블이 파티션 메타데이터를 사용하는지 여부를 제어하는 Spark conf는 기본적으로 사용하지 않도록 설정됩니다. 이 동작을 명시적으로 사용하지 않도록 설정할 수도 있습니다. 다음 구문에서는 SQL을 사용하여 Spark conf를 사용하지 않도록 설정합니다.
SET spark.databricks.nonDelta.partitionLog.enabled = false;
이는 SparkSession에서 만든 테이블이 파티션 메타데이터를 사용하는지 여부만 제어합니다. 동작을 사용하는 테이블에서 파티션 메타데이터를 사용하지 않도록 설정하려면 Spark conf를 사용하도록 설정하지 않은 SparkSession에서 테이블을 삭제하고 다시 만들어야 합니다.
참고 항목
Databricks Runtime 12.2 LTS 이하에서 활성화된 파티션 메타데이터를 사용하여 테이블을 읽거나 쓸 수는 없지만 Unity 카탈로그에 충분한 권한이 있는 경우 이러한 테이블에 대해 실행하거나 DROP
문을 실행할 CREATE OR REPLACE TABLE
수 있습니다.
제한 사항
다음 제한 사항이 존재합니다.
- Databricks Runtime 12.2 LTS 이하를 사용하여 파티션 메타데이터를 사용하도록 설정된 테이블에 읽거나 쓸 수 없습니다.
- 디렉터리 경로를 사용하여 테이블을 읽으면 수동으로 추가되거나 삭제된 파티션을 포함한 모든 파티션이 반환됩니다.
- 테이블 이름 대신 경로를 사용하여 테이블에 레코드를 삽입하거나 덮어쓰면 파티션 메타데이터가 기록되지 않습니다.
- Avro 파일 형식은 지원되지 않습니다.