Kudu 는 컬럼 타입 변경을 지원하지 않으므로 테이블을 새로 만들게 되는데, 이때 Decimal parse failed 가 나면 원천 STRING 값 중 변환되지 않는 것이 섞여 있다.
SELECT col, count(*)
FROM src_table
WHERE col IS NOT NULL
AND TRY_CAST(col AS DECIMAL(22,4)) IS NULL
GROUP BY col
ORDER BY 2 DESC
자주 걸리는 값은 빈 문자열과 공백, 앞뒤 공백이 붙은 숫자, 천단위 콤마, NULL · - · N/A 같은 문자 표기, 지수 표기다. DECIMAL(22,4) 는 정수부가 최대 18자리이므로 그보다 큰 값도 실패한다.
TRY_CAST(
nullif(trim(replace(col, ',', '')), '')
AS DECIMAL(22,4)
) AS col
TRY_CAST 는 실패 시 에러 대신 NULL 을 넣으므로, 위 조회로 어떤 값이 사라지는지 확인한 뒤 쓴다. 소수점 5자리 이상은 4자리로 반올림된다.