Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
Oracle LOB타입의 데이터는 일반적인 방법으로 import하면 오류가 발생한다.
(오류 내용 : No Java type for SQL type -11 for column 컬럼명)
원인은 Oracle에서는 catalog정보에서 사용자, 테이블명, 컬럼명을 대문자로 관리하기 때문이다.
sqoop문에 옵션을 추가해줘야 하는데 --query다음에 --map-column-java lob컬럼명=String 이라는 옵션을 추가하여 주는것이다.
여기서 lob컬럼명은 LOB타입의 컬럼명으로 반드시 대문자로 써야한다. 그렇지 않으면 컬럼명을 찾을 수 없다는 오류가 발생하면서 sqoop이 실패하게 된다.
또한 LOB타입 컬럼의 가져오는 길이를 제한하려면 --inline-lob-limit 12000와 같이 제한할 길이를 지정하여 옵션을 준다.
select문장에서 LOB타입의 컬럼을 가공하려 하지 말것. 가공하게 되면 sqoop하는 과정에서 다음과 같은 오류를 만나게 된다. sqoop import할때는 있는 그대로 가져와서 필요시 가공할것.
1. substr(cast(lob컬럼명 as varchar2(4000)), 12000) as rst 와 같이 가공한 경우
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion(actual: 35090, maximum:4000) <- 최대 지원 가능한 크기는 4000인데 35090 크기의 데이터가 있어서 오류가 발생하는것임.
2. dbms_lob.substr(lob컬럼명, 5000, 1) as rst와 같이 가공한 경우
ORA-06502: PL/SQL: numeric or value error: character string buffer too small <- 최대 지원 가능한 크기는 4000인데 35090 크기의 데이터가 있어서 오류가 발생하는것임.