apache/seatunnel · error · UnsupportedOperationException

Unsupported save mode:

Error message

Unsupported save mode: 

What it means

DefaultSaveModeHandler.handleSchemaSaveMode hit the default branch of its switch on schemaSaveMode: the configured value does not correspond to any known SchemaSaveMode enum constant. This is a sentinel guard for an unrecognized/null save mode string from the sink config ('schema_save_mode' option), not a data problem — the job fails before any DDL is applied.

Solutions

  1. Set schema_save_mode in the sink config to one of the supported values: RECREATE_SCHEMA, CREATE_SCHEMA_WHEN_NOT_EXIST, ERROR_WHEN_SCHEMA_NOT_EXIST, or IGNORE
  2. Check for typos and case differences in the configured value
  3. If using a custom save mode handler, make sure the config maps to a valid enum constant
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/DefaultSaveModeHandler.java:96 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/DefaultSaveModeHandler.java:96

        catalog.open();
    }

    @Override
    public void handleSchemaSaveMode() {
        switch (schemaSaveMode) {
            case RECREATE_SCHEMA:
                recreateSchema();
                break;
            case CREATE_SCHEMA_WHEN_NOT_EXIST:
                createSchemaWhenNotExist();
                break;
            case ERROR_WHEN_SCHEMA_NOT_EXIST:
                errorWhenSchemaNotExist();
                break;
            case IGNORE:
                break;
            default:
                throw new UnsupportedOperationException("Unsupported save mode: " + schemaSaveMode);
        }
    }

    @Override
    public void handleDataSaveMode() {
        switch (dataSaveMode) {
            case DROP_DATA:
                keepSchemaDropData();
                break;
            case APPEND_DATA:
                keepSchemaAndData();
                break;
            case CUSTOM_PROCESSING:
                customProcessing();
                break;
            case ERROR_WHEN_DATA_EXISTS:
                errorWhenDataExists();
                break;

View on GitHub (pinned to cf67b549a7)