apache/seatunnel · error · IllegalArgumentException

The column named [ ] is not exists

Error message

The column named [%s] is not exists

What it means

convertValueByPaimonDataType looks up the column name in the provided Paimon RowType to find its data type; if the name is absent it throws this error. Usually the WHERE clause references a column not in the table schema, or with mismatched quoting/casing.

Solutions

  1. Check the column name spelling against the Paimon table schema.
  2. Match casing exactly to the declared field name (lookup is name-exact).
  3. Strip quotes/backticks consistently; use the bare declared name in the rowType lookup.
  4. If the schema changed, update the query or the rowType passed to the converter.

Example fix

// before: WHERE usernme = 'bob' | // after: WHERE username = 'bob'
Defensive patterns

Strategy: validation

Validate before calling

Set<String> cols = new HashSet<>(rowType.getFieldNames()); String bare = name.replace("`","").replace("\"",""); if (!cols.contains(bare)) throw new IllegalArgumentException("Unknown filter column: " + bare);

Try / catch

try { pred = converter.convertSqlWhereToPaimonPredicate(where, rowType); } catch (IllegalArgumentException e) { if (e.getMessage().contains("is not exists")) throw new IllegalArgumentException("Unknown filter column; check schema", e); throw e; }

Prevention

When it happens

Trigger: A WHERE clause references a column missing from the rowType: misspelled name, wrong case in a case-sensitive schema, leftover column after schema change, or a rowType that differs from the queried table.

Common situations: Typos in SQL filters; schema drift (column renamed/dropped) while cached SQL remains; quoted identifiers whose retained quotes/case do not match rowType field names.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/c60434c62c95135e. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/source/converter/SqlToPaimonPredicateConverter.java:403

                    return Long.parseLong(strValue);
                case FLOAT:
                    return Float.parseFloat(strValue);
                case DOUBLE:
                    return Double.parseDouble(strValue);
                case DATE:
                    return DateTimeUtils.toInternal(DateUtils.parse(strValue));
                case TIME_WITHOUT_TIME_ZONE:
                    return DateTimeUtils.toInternal(TimeUtils.parse(strValue));
                case TIMESTAMP_WITHOUT_TIME_ZONE:
                case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
                    return Timestamp.fromLocalDateTime(
                            org.apache.seatunnel.common.utils.DateTimeUtils.parse(strValue));
                default:
                    throw new IllegalArgumentException(
                            "Unsupported Paimon data type :" + dataType.getTypeRoot());
            }
        }
        throw new IllegalArgumentException(
                String.format("The column named [%s] is not exists", columnName));
    }

    private static Object getJSQLParserDataTypeValue(Expression expression) {
        if (expression instanceof LongValue) {
            return ((LongValue) expression).getValue();
        } else if (expression instanceof StringValue || expression instanceof HexValue) {
            return BinaryString.fromString(((StringValue) expression).getValue());
        } else if (expression instanceof DoubleValue) {
            return ((DoubleValue) expression).getValue();
        } else if (expression instanceof DateValue) {
            return ((DateValue) expression).getValue();
        } else if (expression instanceof TimeValue) {
            return ((TimeValue) expression).getValue();
        } else if (expression instanceof TimestampValue) {
            return ((TimestampValue) expression).getValue();
        }
        throw new IllegalArgumentException("Unsupported expression value type: " + expression);

View on GitHub (pinned to cf67b549a7)