apache/seatunnel · warning

Unsupported SQL type: {}, fallback to STRING

Error message

Unsupported SQL type: {}, fallback to STRING

What it means

DatabendTypeConverter.mapToDatabendType converts a SeaTunnel catalog type to a Databend SQL type string. When the SeaTunnelDataType does not match any known case it logs this warning and falls back to the Databend STRING type. The schema generated for a sink table (or type expression) will therefore use STRING for that column, which may not match the intended upstream types.

Source

Thrown at seatunnel-connectors-v2/connector-databend/src/main/java/org/apache/seatunnel/connectors/seatunnel/databend/util/DatabendTypeConverter.java:85

                        "DECIMAL(%d,%d)", decimalType.getPrecision(), decimalType.getScale());
            case DATE:
                return "DATE";
            case TIME:
                return "TIME";
            case TIMESTAMP:
                return "TIMESTAMP";
            case BYTES:
                return "VARBINARY";
            case ARRAY:
                return "ARRAY(STRING)";
            case MAP:
                return "MAP(STRING, STRING)";
            case NULL:
                return "NULL";
            case ROW:
                return "STRING";
            default:
                log.warn("Unsupported SQL type: {}, fallback to STRING", sqlType);
                return "STRING";
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Inspect the logged sqlType to see which SeaTunnel type fell through.
  2. Explicitly cast/restructure the column in your pipeline to a supported type (STRING, ARRAY, MAP, primitives).
  3. Extend the converter's switch if you own the code, adding the missing SeaTunnelType mapping.
  4. Verify the sink schema with a manual CREATE TABLE and adjust the upstream catalog accordingly.

Example fix

// before
// converter falls through to STRING for the unsupported type
// after
SeaTunnelRowType schema = new SeaTunnelRowType(
    new String[]{"payload"},
    new SeaTunnelDataType<?>[]{BasicType.STRING_TYPE}); // cast upstream ROW -> STRING
Defensive patterns

Strategy: validation

Validate before calling

SeaTunnelDataType<?> t = catalogColumn.getColumnType();
if (t instanceof SeaTunnelRowType || t instanceof SeaTunnelMapType) {
    // confirm the converter handles this type or cast to STRING upstream
}

Type guard

if (sqlType instanceof BasicType || sqlType instanceof ArrayType || sqlType instanceof MapType) { /* handled path */ }

Prevention

When it happens

Trigger: A sink catalog containing a SeaTunnel type with no explicit Databend mapping (e.g. certain ARRAY/MAP element combos or ROW besides the handled NULL/ROW cases) reaches the default branch while building the CREATE TABLE or type expression via databendType().

Common situations: Schemas inferred from sources with types Databend cannot represent directly; upstream CDC or transforms producing SeaTunnel ROW/MAP types; version drift between SeaTunnel API types and the converter's switch.

Understand the failure class

Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.

Related errors


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