다음을 통해 공유


델타로 변환

적용 대상: 예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime

기존 Parquet 테이블을 Delta 테이블로 변환합니다. 이 명령은 디렉터리의 모든 파일을 나열하고, 이러한 파일을 추적하는 Delta Lake 트랜잭션 로그를 만들고, 모든 Parquet 파일의 바닥글을 읽어 데이터 스키마를 자동으로 유추합니다. 변환 프로세스는 변환된 Delta 테이블에 대한 쿼리 성능을 개선시키기 위해 통계를 수집합니다. 테이블 이름을 제공하면 테이블이 이제 Delta 테이블임을 반영하도록 메타스토어도 업데이트됩니다.

이 명령은 기본 파일 형식이 Parquet인 Iceberg 테이블 변환을 지원합니다. 이 경우 변환기는 Iceberg 테이블의 네이티브 파일 매니페스트, 스키마 및 분할 정보를 기반으로 Delta Lake 트랜잭션 로그를 생성합니다.

구문

CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]

매개 변수

  • table_name

    선택적으로 정규화된 테이블 식별자parquet 또는 iceberg 파일 디렉터리에 대한 경로입니다. 이름에는 임시 사양 또는 옵션 사양이 포함되어서는 안됩니다. Iceberg 테이블의 경우 관리되는 iceberg 테이블 변환이 지원되지 않으므로 경로만 사용할 수 있습니다.

  • 통계 없음

    변환 프로세스 중에 통계 컬렉션을 우회하고 변환을 더 빨리 완료합니다. 테이블이 Delta Lake로 변환된 후 OPTIMIZE ZORDER BY를 사용하여 데이터 레이아웃을 재구성하고 통계를 생성할 수 있습니다.

  • PARTITIONED BY

    만든 테이블을 지정된 열로 분할합니다. table_name이 경로인 경우 분할된 데이터에 PARTITIONED BY가 필요합니다. table_name이 정규화된 테이블 식별자인 경우 PARTITIONED BY 절은 선택 사항이며 파티션 사양은 메타스토어에서 로드됩니다. 두 접근법에서 디렉터리 구조가 제공되거나 로드된 PARTITIONED BY 사양을 준수하지 않으면 변환 프로세스가 중단되고 예외가 throw됩니다.

    참고 항목

    Databricks Runtime 11.1 이하에서는 모든 분할된 데이터에 PARTITIONED BY가 필수 인수입니다.

예제

참고 항목

메타스토어에 등록된 Iceberg 테이블 또는 테이블에 대한 분할 정보를 제공할 필요가 없습니다.

CONVERT TO DELTA database_name.table_name; -- only for Parquet tables

CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
  PARTITIONED BY (date DATE); -- if the table is partitioned

CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata

제한 사항

Delta Lake에서 추적하지 않는 모든 파일은 표시되지 않으며 VACUUM을 실행할 때 삭제할 수 있습니다. 변환 프로세스 중에는 데이터 파일을 업데이트하거나 추가하지 않아야 합니다. 테이블이 변환된 후 모든 쓰기가 Delta Lake를 통과하는지 확인합니다.

여러 외부 테이블이 동일한 기본 Parquet 디렉터리를 공유할 수 있습니다. 이 경우 외부 테이블 중 하나에서 CONVERT를 실행하면 기본 디렉터리가 Parquet에서 Delta Lake로 변환되었기 때문에 다른 외부 테이블에 액세스할 수 없습니다. 이러한 외부 테이블을 다시 쿼리하거나 쓰려면 해당 테이블에서도 CONVERT를 실행해야 합니다.

CONVERT는 스키마 및 테이블 속성과 같은 카탈로그 정보를 Delta Lake 트랜잭션 로그에 채웁니다. 기본 디렉터리가 이미 Delta Lake로 변환되었고 해당 메타데이터가 카탈로그 메타데이터와 다른 경우 convertMetastoreMetadataMismatchException이 throw됩니다.

Databricks Runtime을 사용하는 동안 CONVERT가 Delta Lake 트랜잭션 로그의 기존 메타데이터를 덮어쓰도록 하려면 SQL 구성 spark.databricks.delta.convert.metadataCheck.enabled를 false로 설정합니다.