{"record":{"id":"28a7a1c389894872","repo":"apache/seatunnel","slug":"the-decimal-column-type-decimal-is-out-o-28a7a1","errorCode":null,"errorMessage":"The decimal column {} type decimal({},{}) is out of range, which exceeds the maximum precision of {}, it will be converted to decimal({},{})","messagePattern":"The decimal column (.+?) type decimal\\((.+?),(.+?)\\) is out of range, which exceeds the maximum precision of (.+?), it will be converted to decimal\\((.+?),(.+?)\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/utils/RowTypeConverter.java","lineNumber":339,"sourceCode":"                            (org.apache.seatunnel.api.table.type.DecimalType) dataType;\n                    int precision = seatunnelDecimalType.getPrecision();\n                    scale = seatunnelDecimalType.getScale();\n                    if (precision <= 0) {\n                        precision = DecimalType.DEFAULT_PRECISION;\n                        scale = DecimalType.DEFAULT_SCALE;\n                        log.warn(\n                                \"The decimal column {} type decimal({},{}) is out of range, \"\n                                        + \"which is precision less than 0, \"\n                                        + \"it will be converted to decimal({},{})\",\n                                column.getName(),\n                                seatunnelDecimalType.getPrecision(),\n                                seatunnelDecimalType.getScale(),\n                                precision,\n                                scale);\n                    } else if (precision > DecimalType.MAX_PRECISION) {\n                        scale = (int) Math.max(0, scale - (precision - DecimalType.MAX_PRECISION));\n                        precision = DecimalType.MAX_PRECISION;\n                        log.warn(\n                                \"The decimal column {} type decimal({},{}) is out of range, \"\n                                        + \"which exceeds the maximum precision of {}, \"\n                                        + \"it will be converted to decimal({},{})\",\n                                column.getName(),\n                                seatunnelDecimalType.getPrecision(),\n                                seatunnelDecimalType.getScale(),\n                                DecimalType.MAX_PRECISION,\n                                precision,\n                                scale);\n                    }\n                    if (scale < 0) {\n                        scale = DecimalType.DEFAULT_SCALE;\n                        log.warn(\n                                \"The decimal column {} type decimal({},{}) is out of range, \"\n                                        + \"which is scale less than 0, \"\n                                        + \"it will be converted to decimal({},{})\",\n                                column.getName(),\n                                seatunnelDecimalType.getPrecision(),","sourceCodeStart":321,"sourceCodeEnd":357,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/utils/RowTypeConverter.java#L321-L357","documentation":"Same RowTypeConverter decimal visit path: when requested precision exceeds Paimon's DecimalType.MAX_PRECISION (38), the converter clamps precision to 38 and shrinks scale by the overflow amount (min 0), warning that the column type was adjusted.","triggerScenarios":"Column declared decimal(p,s) with p > 38 (e.g. DECIMAL(50,10) from a big-number source) while converting the schema for Paimon.","commonSituations":"Sources like Oracle NUMBER or some CDC streams reporting huge precisions; metadata mapping defaults of 64-bit precision; copy-pasted DDL from systems supporting larger decimals.","solutions":["Cap the source column to decimal(38,s) in your job schema to make the conversion explicit.","If values genuinely exceed 38 digits, serialize the column as STRING/bytes instead of decimal.","Adjust the source connector metadata mapping to bound precision at 38.","Accept the automatic clamp only if you confirmed no value uses the truncated digits."],"exampleFix":"// before\nDECIMAL(50,10)\n// after\nDECIMAL(38,4)  // or STRING if >38 digits of value are required","handlingStrategy":"validation","validationCode":"if (decimalType.getPrecision() > 38) decimalType = new DecimalType(38, Math.max(0, decimalType.getScale() - (decimalType.getPrecision() - 38)));","typeGuard":"boolean fitsPaimonDecimal(DecimalType t) { return t.getPrecision() <= 38; }","tryCatchPattern":null,"preventionTips":["Cap precision at 38 at schema definition","Use STRING for >38-digit values","Verify source metadata precision bounds"],"tags":["paimon","decimal","type-conversion"],"backgroundTag":"value-out-of-range","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}