IMPORT/EXPORT
IMPORT/EXPORT (Import/Export)
버전 정보 (Version information)
EXPORT와 IMPORT 명령은 Hive 0.8.0에서 추가되었어요 (HIVE-1918 참조).
EXPORT와 IMPORT 명령에 대한 복제(replication) 확장은 Hive 1.2.0에서 추가되었어요 (HIVE-7973 및 Hive Replication Development 참조).
출처: 문서
본문
개요 (Overview)
EXPORT 명령은 테이블이나 파티션의 데이터를 메타데이터와 함께 지정된 출력 위치로 내보내요. 이 출력 위치는 다른 Hadoop이나 Hive 인스턴스로 옮겨진 뒤 IMPORT 명령으로 그곳에서 가져올 수 있습니다.
파티션된 테이블을 내보낼 때 원본 데이터는 서로 다른 HDFS 위치에 있을 수 있어요. 파티션의 일부만 내보내기/가져오기도 지원됩니다.
내보낸 메타데이터는 대상 디렉터리에 저장되고, 데이터 파일은 하위 디렉터리에 저장돼요.
EXPORT와 IMPORT 명령은 소스·대상 metastore DBMS와 무관하게 동작해요. 예를 들어 Derby와 MySQL 데이터베이스 간에도 사용할 수 있습니다.
IMPORT는 대상 테이블/파티션이 없으면 생성해요. 모든 테이블 속성/파라미터는 EXPORT로 아카이브를 생성할 때 사용된 테이블과 동일합니다. 대상이 존재하면 적절한 스키마, Input/OutputFormat 등을 갖췄는지 검사가 수행돼요. 대상 테이블이 존재하고 파티션되지 않았다면 비어 있어야 합니다. 대상 테이블이 존재하고 파티션된 경우, 가져오는 파티션은 테이블에 존재하지 않아야 해요.
Export 구문 (Export Syntax)
EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]
TO 'export_target_path' [ FOR replication('eventid') ]
Import 구문 (Import Syntax)
IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]
FROM 'source_path'
[LOCATION 'import_target_path']
복제 사용 (Replication usage)
EXPORT와 IMPORT 명령은 복제(replication) 맥락에서 사용될 때 약간 다르게 동작하며, hive warehouse 간 복제를 수행하는 도구에 사용되도록 설계되었어요. 대부분의 경우 최종 사용자는 이 추가 태그를 사용할 필요가 없으며, 증분 복제 도구가 그 시점부터 인계받을 수 있도록 복제 대상 warehouse의 수동 부트스트랩(bootstrap)을 할 때만 사용하면 됩니다.
이 명령들은 복제되는 객체(테이블/파티션)에 "repl.last.id"라는 특수 테이블 속성을 사용해, 복제가 대상 객체에 영향을 주는 업데이트보다 새 것일 때만 객체를 업데이트하도록 보장해요. export 쪽에서는 소스 warehouse에서 단조 증가하는(소스 warehouse metastore가 수정될 때마다 증가하는) id로 복제 export 덤프에 태그를 붙입니다. 또한 복제용으로 태그된 export는 현재 존재하지 않는 객체를 내보내려 해도 오류를 발생시키지 않아요. (복제의 일반적 흐름에서, 외부 도구가 복제를 위해 이벤트를 처리할 시점에는 객체가 제거되었을 가능성이 있으므로, 복제 파이프라인을 중단해서는 안 되기 때문입니다.)
import 쪽에는 구문 변화가 없지만, FOR REPLICATION 태그로 생성된 export 덤프에서 import를 실행하면, 복제 대상 객체가 존재하는지 확인해요. 객체가 이미 존재하면 해당 객체의 repl.last.id 속성을 확인해 가져오는 것이 대상 warehouse의 객체 현재 상태보다 새 것인지 판단합니다. 업데이트가 더 새 것이면 객체를 새 정보로 교체합니다. 업데이트가 이미 제자리에 있는 객체보다 오래된 것이면 업데이트는 무시되고 오류도 발생하지 않아요.
처음으로 수동 부트스트랩을 위해 EXPORT를 사용하는 사용자에게는 " FOR replication('bootstrapping') " 태그를 사용하길 권장합니다. (고급 사용자 참고: 여기서 'bootstrapping' 선택은 임의적이며 'foo'여도 무방해요. 진짜 목표는 이후 모든 증분 복제 id가 이 원본 id보다 크도록 하는 값, 즉 이 초기 id의 정수값이 0이 되도록 하는 것이므로, 숫자를 포함하지 않는 어떤 문자열이든 허용됩니다. 반면 초기 태그를 "123456"으로 하는 것은 후속 업데이트 중 repl.last.id < 123456인 것들이 적용되지 않을 수 있어 좋지 않아요.)
예제 (Examples)
간단한 export와 import:
export table department to 'hdfs_exports_location/department';
import from 'hdfs_exports_location/department';
import 시 테이블 이름 바꾸기:
export table department to 'hdfs_exports_location/department';
import table imported_dept from 'hdfs_exports_location/department';
파티션 export와 import:
export table employee partition (emp_country="in", emp_state="ka") to 'hdfs_exports_location/employee';
import from 'hdfs_exports_location/employee';
테이블 export 후 파티션 import:
export table employee to 'hdfs_exports_location/employee';
import table employee partition (emp_country="us", emp_state="tn") from 'hdfs_exports_location/employee';
import 위치 지정:
export table department to 'hdfs_exports_location/department';
import table department from 'hdfs_exports_location/department'
location 'import_target_location/department';
external 테이블로 import:
export table department to 'hdfs_exports_location/department';
import external table department from 'hdfs_exports_location/department';
더 알아보기 (Learn more)
EXPORT/IMPORT는 테이블·파티션의 데이터와 메타데이터를 다른 Hadoop/Hive 인스턴스로 옮길 때 사용해요. 복제 시에는 repl.last.id 속성을 활용해 증분 업데이트를 보장하며, 초기 부트스트랩은 FOR replication('bootstrapping') 태그로 수행하는 것이 좋습니다.