apache/seatunnel · error · SeaTunnelRuntimeException

COMMON-19

COMMON-19

Error message

'${identifier}' unsupported convert SeaTunnel data type '${dataType}' of '${field}' to connector data type.

What it means

MaxCompute runtime type converter's reconvert() throws this when a SeaTunnel data type has no MaxCompute representation. TIME (and any other unlisted SqlType) is rejected in the switch default because MaxCompute ODPS types cannot express a TIME-only column.

Solutions

  1. Cast TIME columns to TIMESTAMP or STRING before the MaxCompute sink via a transform
  2. Drop TIME columns from the sink schema
  3. Extend reconvert() with a mapping (e.g. TIME -> STRING 'HH:mm:ss')

Example fix

// before
query = "SELECT id, t FROM src" // t is TIME
// after
query = "SELECT id, CAST(t AS TIMESTAMP) AS t FROM src"
Defensive patterns

Strategy: try-catch

Try / catch

try {
    CatalogColumn col = maxComputeConverter.reconvert(column);
} catch (SeaTunnelConvertException e) {
    LOG.warn("SeaTunnel type {} cannot map to MaxCompute for {}", column.getDataType().getSqlType(), column.getName());
    // fallback: cast TIME to TIMESTAMP in a transform before the sink
}

Prevention

When it happens

Trigger: reconvert() is called on a CatalogColumn with SeaTunnel SqlType TIME (explicitly rejected) or another unmapped type during sink catalog table creation or schema sync.

Common situations: Auto-creating MaxCompute tables from sources with TIME columns; schema evolution carrying TIME or complex types into the MaxCompute sink.

Related errors


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-maxcompute/src/main/java/org/apache/seatunnel/connectors/seatunnel/maxcompute/datatype/MaxComputeTypeConverter.java:535

                        reconvert(
                                new PhysicalColumn(
                                        "element",
                                        elementType,
                                        null,
                                        null,
                                        true,
                                        null,
                                        null,
                                        null,
                                        null));

                builder.nativeType(TypeInfoFactory.getArrayTypeInfo(elementDefine.getNativeType()));
                builder.columnType(String.format("ARRAY<%s>", elementDefine.getColumnType()));
                builder.dataType(ARRAY);
                break;
            case TIME:
            default:
                throw CommonError.convertToConnectorTypeError(
                        MaxcomputeBaseOptions.PLUGIN_NAME,
                        column.getDataType().getSqlType().name(),
                        column.getName());
        }

        return builder.build();
    }
}

View on GitHub (pinned to cf67b549a7)