alibaba/DataX · error · RuntimeException

>=,> can't support this columnType:%s

Error message

>=,> can't support this columnType:%s

What it means

Inside dx_filter's doGreat (operators > and >=), only numeric columns (Long/Double) and Date columns are comparable; any other column type reaching the final else throws RuntimeException('>=,> can't support this columnType:...') under TRANSFORMER_RUN_EXCEPTION. Null raw data is skipped, but Bool/bytes and unknown custom Column types cannot be ordered numerically.

Source

Thrown at core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java:128

                }
            }
        } else if (column instanceof StringColumn || column instanceof BytesColumn || column instanceof BoolColumn) {
            String ori = column.asString();
            if (hasEqual) {
                if (ori.compareTo(value) >= 0) {
                    return null;
                } else {
                    return record;
                }
            } else {
                if (ori.compareTo(value) > 0) {
                    return null;
                } else {
                    return record;
                }
            }
        } else {
            throw new RuntimeException(">=,> can't support this columnType:" + column.getClass().getSimpleName());
        }
    }

    private Record doLess(Record record, String value, Column column, boolean hasEqual) {

        //如果字段为空,直接不参与比较。即空也属于无穷大
        if(column.getRawData() == null){
            return record;
        }

        if (column instanceof DoubleColumn) {
            Double ori = column.asDouble();
            double val = Double.parseDouble(value);

            if (hasEqual) {
                if (ori <= val) {
                    return null;
                } else {

View on GitHub (pinned to 80ec23d5c5)

Solutions

  1. Target a numeric or date column with > / >=.
  2. Recheck the column index against the reader's column order after schema changes.
  3. For string comparison semantics use like or =/!= instead of >.

Example fix

// before
{"name": "dx_filter", "parameter": [3, ">", "1"]}  // column 3 is boolean

// after
{"name": "dx_filter", "parameter": [3, "=", "true"]}
Defensive patterns

Strategy: validation

Validate before calling

Column c = record.getColumn(idx);
boolean comparable = c instanceof LongColumn || c instanceof DoubleColumn || c instanceof DateColumn;
if ((code.equals(">") || code.equals(">=")) && !comparable) {
    throw new IllegalArgumentException(">/>= needs numeric or date column, got " + c.getClass().getSimpleName());
}

Type guard

static boolean orderableByGreat(Column c) {
    return c instanceof LongColumn || c instanceof DoubleColumn || c instanceof DateColumn;
}

Prevention

When it happens

Trigger: Filtering with ">"/">=" on a column that arrives as BoolColumn, BytesColumn, or a custom Column subclass — e.g. parameter [3, ">", "1"] where column 3 is a boolean flag.

Common situations: Column index drift after source schema changes (numeric column replaced by boolean/bytes); mysql bit(1) columns surfacing as BoolColumn.

Related errors


AI-assisted analysis of alibaba/DataX@80ec23d5c5 (2026-08-14). Data as JSON: /api/errors/084ea8653dc9180e. Report an issue: GitHub.