Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
sqoop Oracle NLOB type의 데이터를 import하는 경우 No Java type for SQL type 2011 for column rst와 같은 오류 발생시 조치사항
oracle LOB(NLOB, CLOB, BLOB)타입의 컬럼에 대해서는 sqoop작업시 자동으로 매핑할 수 있는 java type이 없어서 "Cannot resolve SQL type 2011", "No Java type for SQL type 2011 for column rst" 오류가 발생한다.
--map-columu-java "컬럼명=String"을 sqoop 문의 인자로 지정하라고 되어 있지만 여전히 오류가 발생한다.
그래서 --query에 지정되는 쿼리에서 가장 바깥 부분의 select문장에서 DBMS_LOB.SUBSTR(LOB타입의컬럼명, 32767, 1) AS rst와 같이 oracle에서 지원하는 함수를 사용하여 일반 문자열로 변경해주면 면 sqoop이 정상적으로 수행된다.
to_char(LOB타입의컬럼명) 형태도 가능하지만 지원하는 문자열의 길이가 4000byte까지만 가능하고 DBMS_LOB.SUBSTR함수는 최대 32767Bytes까지 지원 가능하다.
(한글의 경우는 최대 지원 문자열의 1/2까지만 사용가능함)