Trino 의 Oracle connector 로 데이터를 조회 시 아래의 링크와 같이 Number 타입의 컬럼을 무시하는 에러가 발생했다.
참고 : Ignore column
소스 데이터의 컬럼이 잘 못 되었는지?
소스 테이블의 컬럼은 존재하고 있었다.
Trino Oracle connector 에서 사용하면 안되는 컬럼명이 있는지?
문서에서는 별도의 내용이 없었다.
Trino Oracle connector 가 받지 못하는 타입이 있는지?
해당 원인이 가장 발생할 이유가 적합했다. 문서상에서 타입에 대한 말이 있는지 확인해보자 Number 쪽의 설정이 필요했다.
Oracle 에서는 타입 중 Number 타입을 지원하고 있다. 마찬가지로 Hive, Spark, Trino 등 Decimal 타입을 지원하며 이와 호환이 된다.
하지만 Oracle 에서는 Number 타입의 Precision, Scale 을 지정하지 않을 경우 기존의 Decimal 타입의 38 자리보다 더 많이 들어갈 수 있다고 한다. (무한대로 가능하다고 한다.)
참고 : Oracle Data Type
- Precision : 숫자의 전체 자리 수
- Scale : 1 밑의 소수 자리 수
그렇기 때문에 Trino 에서는 이와 같은 컬럼 타입을 무시하는 경우가 발생한다. (물론 보통 자리수가 너무 많으면 이상치일 가능성이 높을 것이다.)
데이터를 가져올 때 기준을 세워둔 자리 수를 넘는 컬럼이 있으면, 반올림 같은 것들을 수행할 수 있도록 하고, 기본 Precision 을 결정할 수 있는 옵션이 존재한다.
oracle.number.default-scale
oracle.number.rounding-mode
oracle.number.default-scale 의 경우 지정을 하지 않으면 컬럼을 무시할 수 도 있다고 한다.
oracle.number.rounding-mode 의 경우 scale 의 범위가 Trino 에서 지정한 범위보다 더 클 경우 처리하는 방법에 대해 다음과 같은 옵션을 지정할 수 있다.
UNNECESSARYCEILINGFLOORHALF_DOWNHALF_EVENHALF_UPUPDOWN 참고 : Trino Ocracle connector - Number to decimal configuration properties
해당 옵션들을 설정하여 Oracle 의 Number type 이 무시되는 경우를 해결했다.