apache/seatunnel · error · KuduConnectorException

UNSUPPORTED_DATA_TYPE

UNSUPPORTED_DATA_TYPE

Error message

Unsupported column type: 

What it means

KuduRowSerializer.transform() converts SeaTunnel column values to Kudu column values per SQL type. A SQL type not handled by the switch triggers KuduConnectorException with UNSUPPORTED_DATA_TYPE, reporting the unsupported SqlType. ClassCastExceptions on values are separately wrapped as DATA_TYPE_CAST_FIELD errors.

Source

Thrown at seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/serialize/KuduRowSerializer.java:108

                    case DECIMAL:
                    case BYTES:
                        row.addObject(
                                seaTunnelRowType.getFieldName(columnIndex),
                                element.getField(columnIndex));
                        break;
                    case TIMESTAMP:
                        Object fieldValue = element.getField(columnIndex);
                        if (fieldValue == null) {
                            row.addObject(seaTunnelRowType.getFieldName(columnIndex), null);
                        } else {
                            LocalDateTime localDateTime = (LocalDateTime) fieldValue;
                            row.addObject(
                                    seaTunnelRowType.getFieldName(columnIndex),
                                    java.sql.Timestamp.valueOf(localDateTime));
                        }
                        break;
                    default:
                        throw new KuduConnectorException(
                                CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
                                "Unsupported column type: " + type.getSqlType());
                }
            } catch (ClassCastException e) {
                throw new KuduConnectorException(
                        KuduConnectorErrorCode.DATA_TYPE_CAST_FIELD,
                        "Value type does not match column type "
                                + type.getSqlType()
                                + " for column "
                                + seaTunnelRowType.getFieldName(columnIndex));
            }
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Remove or cast unsupported complex columns before the Kudu sink
  2. Use a transform to convert complex types to supported scalar types
  3. Verify the Kudu table schema matches only supported SeaTunnel types
  4. Extend KuduRowSerializer if a mapping is feasible
Defensive patterns

Strategy: type-guard

Validate before calling

// Verify schema compatibility before writing
for (SeaTunnelDataType<?> t : rowType.getFieldTypes()) {
  if (!(t.getSqlType() == SqlType.STRING || t.getSqlType() == SqlType.INT ... /* supported set */))
    throw new IllegalStateException("Unsupported column type: " + t.getSqlType());
}

Type guard

// Java guard
boolean isSupportedSqlType(SqlType sqlType) {
  return sqlType == SqlType.STRING || sqlType == SqlType.INT || sqlType == SqlType.BIGINT
      || sqlType == SqlType.TIMESTAMP /* ...only supported scalar types... */;
}

Try / catch

try { serializer.serializeRow(row); } catch (KuduConnectorException e) {
  if ("UNSUPPORTED_DATA_TYPE".equals(e.getSeaTunnelErrorCode())) { /* flatten/convert column upstream */ }
} catch (KuduConnectorException castEx) { /* DATA_TYPE_CAST_FIELD: fix value types */ }

Prevention

When it happens

Trigger: Sink writing a SeaTunnelRow whose schema contains a SqlType the serializer does not handle (falling into the default branch), e.g. arrays/maps/rows or other complex types.

Common situations: Source-to-sink pipelines where the upstream produces complex types (ARRAY/MAP/ROW) that Kudu serializer cannot map; schema changes adding new column types upstream.

Related errors


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