table import는 되지만 free-form query의 ORC 출력 경로에서 column type 조회가 실패한다.
원본에서 패치 논의는 있었으나 적용 완료 기록은 없다. 두 단계 변환은 Sqoop/Hive 공식 문법으로 구성한 추가 우회이며 원본에서 검증한 조치는 아니다.
query 결과를 분리된 text staging 위치로 가져온 뒤 Hive INSERT로 ORC를 생성해 문제 코드 경로를 우회한다.
확인 수준: 추가 조사 해법 · 해당 케이스 적용 결과 미확인
적용 조건: <...>와 예시 DB·테이블·경로·수치는 실제 확인값으로 바꾼다. 명령과 메뉴는 참고 문서를 바탕으로 보강한 예시이며 대상 시스템에서 실행하지 않았다. 버전·원인에 따른 분기와 남은 확인 사항은 아래에 명시한다.
sqoop import --connect '<jdbc-url>' --username '<db-user>' -P \
--query 'SELECT id, amount FROM source_table WHERE $CONDITIONS' \
--target-dir '<new-hdfs-staging-path>' --as-textfile \
--fields-terminated-by '\t' --null-string 'NULL_VALUE' --null-non-string 'NULL_VALUE' -m 1
$CONDITIONS는 Sqoop가 치환하도록 작은따옴표를 유지한다. 이 예시는 숫자 컬럼 두 개이며 탭·개행이 포함된 문자열에는 그대로 적용하지 않는다.CREATE EXTERNAL TABLE db.stage_import(id BIGINT, amount DECIMAL(18,2))
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE LOCATION '<new-hdfs-staging-path>'
TBLPROPERTIES ('serialization.null.format'='NULL_VALUE');
CREATE TABLE db.orc_import(id BIGINT, amount DECIMAL(18,2)) STORED AS ORC;
INSERT INTO TABLE db.orc_import SELECT id, amount FROM db.stage_import;
원본 query와 staging·ORC의 건수, NULL, decimal 합계가 일치하는지 확인한다.