Unity 카탈로그에서 외부 테이블은 클라우드 테넌트 내의 클라우드 개체 스토리지에 데이터 파일을 저장합니다. Unity 카탈로그는 테이블의 메타데이터를 계속 관리하여 모든 쿼리에서 전체 데이터 거버넌스를 보장합니다. 그러나 데이터의 수명 주기, 최적화, 스토리지 위치 또는 레이아웃은 관리하지 않습니다.
Unity 카탈로그 외부 테이블을 정의할 때 스토리지 위치를 지정해야 합니다. 이 위치는 Unity 카탈로그에 등록된 외부 위치 입니다. 외부 테이블을 삭제하면 Unity 카탈로그는 테이블 메타데이터를 제거하지만 기본 데이터 파일은 삭제하지 않습니다.
이 문서에서는 Unity 카탈로그 외부 테이블에 초점을 맞춥니다. 레거시 Hive 메타스토어의 외부 테이블은 다른 동작을 합니다. 레거시 Hive 메타스토어의 데이터베이스 개체를 참조하세요.
외부 테이블을 사용하는 경우
Databricks는 다음과 같은 사용 사례에 외부 테이블을 사용하는 것이 좋습니다.
- Unity 카탈로그 관리 테이블과 호환되지 않는 기존 데이터를 통해 지원되는 테이블을 등록해야 합니다.
- 또한 다른 외부 액세스 패턴을 지원하지 않는 비 Databricks 클라이언트의 데이터에 직접 액세스해야 합니다. Unity Catalog 권한은 사용자가 외부 시스템에서 데이터 파일에 접근할 때는 적용되지 않습니다. 을 참조하여 외부 시스템을 사용해 Databricks 데이터에 액세스하세요.
대부분의 경우 Databricks는 자동 테이블 최적화, 빠른 쿼리 성능 및 비용 절감을 활용하기 위해 Unity 카탈로그 관리 테이블을 사용하는 것이 좋습니다. 외부 테이블을 관리되는 테이블로 마이그레이션하려면 외부 테이블을 관리형 Unity 카탈로그 테이블로 변환을 참조하세요.
중요합니다
Databricks가 아닌 클라이언트를 사용하거나 Databricks 내에서 경로 기반 액세스를 사용하여 외부 테이블 메타데이터를 업데이트하는 경우 해당 메타데이터는 Unity 카탈로그와 상태를 자동으로 동기화하지 않습니다. Databricks는 이러한 메타데이터 업데이트를 권장하지만 이를 수행하는 경우 MSCK REPAIR TABLE <table-name> SYNC METADATA 실행하여 Unity 카탈로그의 스키마를 최신 상태로 만들어야 합니다.
REPAIR TABLE참조하세요.
외부 테이블에 대한 파일 형식
외부 테이블은 다음 파일 형식을 사용할 수 있습니다.
- 델타
- CSV
- JSON (자바스크립트 객체 표기법)
- AVRO
- 쪽모이 세공 마루
- 광학 문자 인식 (ORC)
- 텍스트
외부 테이블 만들기
SQL 명령 또는 DataFrame 쓰기 작업을 사용하여 외부 테이블을 만들 수 있습니다.
시작하기 전에
외부 테이블을 만들기 전에 먼저 클라우드 스토리지에 대한 액세스 권한을 부여하는 외부 위치를 구성해야 합니다.
외부 위치 구성에 대한 자세한 내용은 클라우드 스토리지를 Azure Databricks에 연결하는 외부 위치 만들기를 참조하세요.
외부 테이블을 생성하려면 다음 권한 요구 사항을 충족해야 합니다.
- 외부 테이블이 액세스하는
CREATE EXTERNAL TABLE에 대한 액세스 권한을 부여하는 외부 위치의LOCATION권한입니다. -
USE CATALOG테이블의 부모 카탈로그에 대한 권한입니다. -
USE SCHEMA테이블의 부모 스키마에 대한 권한입니다. -
CREATE TABLE테이블의 부모 스키마에 대한 권한입니다.
비고
S3 외부 위치가 여러 메타스토어와 연결된 경우 다른 메타스토어에서 동일한 외부 테이블로 쓰기를 하면 일관성 문제가 발생할 수 있으므로 해당 S3 위치를 사용하는 테이블에 쓰기 권한을 부여하지 마세요. 그러나 여러 메타스토어에서 동일한 S3 외부 위치에서 읽는 것은 안전합니다.
SQL 명령 예제
Notebook 또는 SQL 쿼리 편집기에서 다음 명령 예제 중 하나를 사용하여 외부 테이블을 생성합니다.
다음 예에서 자리 표시자 값을 바꿉니다.
-
<catalog>: 테이블을 포함할 카탈로그의 이름입니다. -
<schema>: 테이블을 포함할 스키마의 이름입니다. -
<table-name>: 테이블의 이름입니다. -
<column-specification>: 각 열의 이름 및 데이터 형식입니다. -
<bucket-path>: 테이블이 생성될 클라우드 저장소 버킷의 경로입니다. -
<table-directory>: 테이블이 만들어질 디렉터리입니다. 각 테이블에 대해 고유한 디렉터리를 사용합니다.
ADLS
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
S3
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';
테이블 만들기 매개 변수에 대한 자세한 내용은 CREATE TABLE참조하세요.
DataFrame 쓰기 작업
쿼리 결과 또는 DataFrame 쓰기 작업에서 외부 테이블을 만들 수도 있습니다. DataFrames를 사용하여 테이블을 만들 때 LOCATION 클로즈를 사용하여 외부 스토리지 경로를 지정합니다.
다음 SQL 구문 옵션은 DataFrame 작업에서 작동합니다.
외부 테이블 삭제
테이블을 삭제하려면 해당 소유자이거나 테이블에 대한 MANAGE 권한이 있어야 합니다. 외부 테이블을 삭제하려면 다음 SQL 명령을 실행합니다.
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
외부 테이블을 삭제할 때 Unity 카탈로그는 클라우드 스토리지의 기본 데이터를 삭제하지 않습니다. 테이블과 연관된 데이터를 삭제하려면 기본 데이터 파일을 직접 삭제해야 합니다.
예제 노트북: 외부 테이블 생성
다음 예제 Notebook을 사용하여 카탈로그, 스키마 및 외부 테이블을 만들고 이에 대한 권한을 관리할 수 있습니다.