运行AWS DataBrew作业报错:无法解析数据类型decimal(1,-3317)
报错触发原因分析
该报错本质是AWS Glue DataBrew的类型推断/解析逻辑识别到了非法的decimal类型定义:标准decimal(precision, scale)定义中,scale参数取值范围为-84到127,报错中的-3317完全超出合理范围,属于异常推断结果,常见触发原因如下:
- 隐藏异常值未被排查
你手动检查时未识别到的异常值会导致类型推断错误,常见情况包括:数值列混入带极小数科学计数法标识的内容(如1e-3317)、数值旁粘有不可见控制字符(NUL、换行符等)、空值占位符被误识别为数值内容,这类异常手动浏览时很容易被忽略。 - 类型推断抽样逻辑偏差
DataBrew默认抽样部分前置行做类型推断,若本次文件的抽样范围内刚好存在上述异常值,就会生成错误的decimal类型定义;此前的作业未抽中异常值,因此运行正常。你手动排查的范围如果没有覆盖到抽样区间的异常行,也会出现“数据类型无差异”的误判。 - 管道分隔文件转义异常
若本次文件存在某行字段内包含未转义的管道符|,会触发列错位:非数值列的内容被偏移到数值列中,导致类型推断逻辑识别到非预期内容,输出非法decimal定义。 - 作业元数据缓存冲突
如果你的DataBrew作业绑定的数据集开启了元数据缓存,本次文件的数值列取值范围超出之前缓存的元数据限制时,旧缓存和新的推断结果冲突也会触发该类型解析错误。
验证方法参考:你可以先将DataBrew作业的类型推断规则修改为全量文件推断,或者单独把本次文件的数值列全部先指定为string类型运行作业,导出后筛选存在异常字符的行即可定位问题。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

