델타 테이블 삭제 또는 바꾸기
Azure Databricks는 Unity 카탈로그 또는 Hive 메타스토어에 등록된 테이블을 삭제하고 바꾸기 위한 SQL 표준 DDL 명령을 지원합니다. 이 문서에서는 구성된 환경 및 원하는 결과에 따라 델타 테이블을 삭제하고 바꾸는 예제와 구문에 대한 권장 사항을 제공합니다.
테이블을 삭제하는 경우
테이블을 영구적으로 삭제하고 동일한 위치에 새 테이블을 만들 의도가 없는 경우 metastore에서 테이블을 제거하는 데 사용해야 DROP TABLE
합니다. 예시:
DROP TABLE table_name
DROP TABLE
에는 테이블 형식과 테이블이 Unity 카탈로그에 등록되어 있는지 또는 레거시 Hive 메타스토어에 등록되었는지에 따라 의미 체계가 다릅니다.
테이블 유형 | 메타 저장소 | 동작 |
---|---|---|
관리형 | Unity 카탈로그 | 테이블이 메타스토어에서 제거되고 기본 데이터가 삭제될 것으로 표시됩니다. Unity 카탈로그 관리 테이블에서 7일 동안 데이터를 사용할 수 있습니다 UNDROP . |
관리형 | Hive | 테이블이 메타스토어에서 제거되고 기본 데이터가 삭제됩니다. |
외부 | Unity 카탈로그 | 테이블은 메타스토어에서 제거되지만 기본 데이터는 그대로 유지됩니다. 이제 URI 액세스 권한은 데이터를 포함하는 외부 위치에 의해 제어됩니다. |
외부 | Hive | 테이블은 메타스토어에서 제거되지만 기본 데이터는 그대로 유지됩니다. 모든 URI 액세스 권한은 변경되지 않습니다. |
DROP TABLE
의미 체계는 테이블 형식마다 다르며 Unity 카탈로그는 내부 테이블 ID를 사용하여 델타 테이블의 기록을 유지 관리합니다. 그러나 모든 테이블은 작업이 완료된 후 이전에 등록된 테이블 이름에 메타스토어의 데이터 및 테이블 기록에 대한 활성 링크가 더 이상 없다는 공통 결과를 공유합니다.
DROP TABLE을 참조하세요.
참고 항목
Databricks는 프로덕션 파이프라인 또는 시스템에 대해 동일한 이름을 사용하여 테이블을 삭제한 다음 다시 만드는 패턴을 권장하지 않습니다. 이 패턴은 동시 작업에 예기치 않은 결과를 초래할 수 있기 때문에 권장되지 않습니다. 동시 작업으로 데이터 바꾸기를 참조 하세요.
테이블을 교체하는 경우
Databricks는 대상 테이블을 새 데이터로 완전히 덮어쓰려는 사용 사례에 문을 사용하는 CREATE OR REPLACE TABLE
것이 좋습니다. 예를 들어 Parquet 디렉터리의 모든 데이터로 델타 테이블을 덮어쓰려면 다음 명령을 실행할 수 있습니다.
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
CREATE OR REPLACE TABLE
에는 사용 중인 테이블 형식 또는 메타스토어와 관계없이 동일한 의미 체계가 있습니다. 다음은 다음과 같은 중요한 이점입니다 CREATE OR REPLACE TABLE
.
- 테이블 내용이 대체되지만 테이블 ID는 유지 관리됩니다.
- 테이블 기록은 유지되며 명령을 사용하여 테이블을 이전 버전으로
RESTORE
되돌릴 수 있습니다. - 작업은 단일 트랜잭션이므로 테이블이 존재하지 않는 시간이 없습니다.
- 테이블에서 읽는 동시 쿼리는 중단 없이 계속할 수 있습니다. 대체 전후 버전이 테이블 기록에 계속 존재하기 때문에 동시 쿼리는 필요에 따라 테이블의 두 버전 중 하나를 참조할 수 있습니다.
CREATE TABLE [USING]을 참조하세요.
데이터를 동시 작업으로 바꾸기
동시 작업에 사용될 수 있는 테이블의 데이터를 완전히 대체하려면 을 사용해야 CREATE OR REPLACE TABLE
합니다.
다음 안티패턴을 사용하면 안 됩니다.
-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;
이 권장 사항의 이유는 관리 테이블 또는 외부 테이블을 사용하는지 여부 및 Unity 카탈로그를 사용하는지에 따라 다르지만 이 패턴을 사용하는 모든 델타 테이블 형식에서 오류, 레코드 삭제 또는 손상된 결과가 발생할 수 있습니다.
대신 Databricks는 다음 예제와 같이 항상 사용하는 CREATE OR REPLACE TABLE
것이 좋습니다.
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
원자성 데이터 교체 중에 테이블 기록이 유지되므로 동시 트랜잭션은 참조되는 원본 테이블의 버전에 대한 유효성을 검사할 수 있으므로 예기치 않은 동작이나 결과를 발생하지 않고 필요에 따라 동시 트랜잭션을 실패하거나 조정할 수 있습니다.