{"record":{"id":"71157313780a2c83","repo":"apache/seatunnel","slug":"unsupported-paimon-data-type-datatype-gettypero","errorCode":null,"errorMessage":"Unsupported Paimon data type :${dataType.getTypeRoot()}","messagePattern":"Unsupported Paimon data type :(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/source/converter/SqlToPaimonPredicateConverter.java","lineNumber":399,"sourceCode":"                    return Short.parseShort(strValue);\n                case INTEGER:\n                    return Integer.parseInt(strValue);\n                case BIGINT:\n                    return Long.parseLong(strValue);\n                case FLOAT:\n                    return Float.parseFloat(strValue);\n                case DOUBLE:\n                    return Double.parseDouble(strValue);\n                case DATE:\n                    return DateTimeUtils.toInternal(DateUtils.parse(strValue));\n                case TIME_WITHOUT_TIME_ZONE:\n                    return DateTimeUtils.toInternal(TimeUtils.parse(strValue));\n                case TIMESTAMP_WITHOUT_TIME_ZONE:\n                case TIMESTAMP_WITH_LOCAL_TIME_ZONE:\n                    return Timestamp.fromLocalDateTime(\n                            org.apache.seatunnel.common.utils.DateTimeUtils.parse(strValue));\n                default:\n                    throw new IllegalArgumentException(\n                            \"Unsupported Paimon data type :\" + dataType.getTypeRoot());\n            }\n        }\n        throw new IllegalArgumentException(\n                String.format(\"The column named [%s] is not exists\", columnName));\n    }\n\n    private static Object getJSQLParserDataTypeValue(Expression expression) {\n        if (expression instanceof LongValue) {\n            return ((LongValue) expression).getValue();\n        } else if (expression instanceof StringValue || expression instanceof HexValue) {\n            return BinaryString.fromString(((StringValue) expression).getValue());\n        } else if (expression instanceof DoubleValue) {\n            return ((DoubleValue) expression).getValue();\n        } else if (expression instanceof DateValue) {\n            return ((DateValue) expression).getValue();\n        } else if (expression instanceof TimeValue) {\n            return ((TimeValue) expression).getValue();","sourceCodeStart":381,"sourceCodeEnd":417,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/source/converter/SqlToPaimonPredicateConverter.java#L381-L417","documentation":"convertValueByPaimonDataType converts literal values to the target column's Paimon data type via a switch over LogicalTypeRoot; types not covered (e.g. ARRAY, MAP, ROW, or scalars missing from the switch) hit the default branch and throw. Only scalar types are supported for predicate literals.","triggerScenarios":"A comparison or IN literal is converted for a column whose rowType entry has an unsupported LogicalTypeRoot (complex types or a newly added type not in the switch).","commonSituations":"Pushdown predicates against complex-type columns; schema evolution introducing a type the converter's switch was never updated for.","solutions":["Remove predicates on complex-type (ARRAY/MAP/ROW) columns from the WHERE clause; filter after read.","Verify the column's actual type in the Paimon schema and ensure the predicate targets a scalar column.","Add a case to the type switch in convertValueByPaimonDataType if the scalar type should be supported."],"exampleFix":"// before: WHERE tags = 'a,b' (tags is ARRAY<STRING>) | // after: remove predicate; filter tags after read","handlingStrategy":"validation","validationCode":"Set<String> OK = Set.of(\"CHAR\",\"VARCHAR\",\"BOOLEAN\",\"TINYINT\",\"SMALLINT\",\"INT\",\"BIGINT\",\"FLOAT\",\"DOUBLE\",\"DATE\",\"TIME_WITHOUT_TIME_ZONE\",\"TIMESTAMP_WITHOUT_TIME_ZONE\",\"TIMESTAMP_WITH_LOCAL_TIME_ZONE\"); LogicalType t = rowType.getTypeAt(rowType.getFieldIndex(col)); boolean convertible = OK.contains(t.getTypeRoot().toString());","typeGuard":null,"tryCatchPattern":"try { pred = converter.convertSqlWhereToPaimonPredicate(where, rowType); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"Unsupported Paimon data type\")) { /* remove predicate for that column */ } throw e; }","preventionTips":["Restrict pushdown predicates to scalar-typed columns.","Check the rowType before generating predicates on any column.","Update the type switch when new types are introduced to the schema."],"tags":["paimon","type-conversion","unsupported-type"],"backgroundTag":"unsupported-config-value","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"}