apache/seatunnel · warning

Range string split failed for table

Error message

Range string split failed for table {}, fallback to hash split

What it means

In FixedChunkSplitter.createSplits, when the string split strategy is RANGE (or AUTO resolves to RANGE), range-based string splits are attempted. If any exception occurs while computing range splits, the splitter logs this warning and falls back to hash-based string splits so the job can still run.

Solutions

  1. No action strictly required: the fallback to createStringColumnSplits (hash split) keeps the job running; check the logged exception for root cause.
  2. Set split.string-split-strategy = HASH explicitly to avoid the failed range attempt and the warning.
  3. Fix the underlying range split failure (check split key column type/data) if range split performance is desired.
  4. Inspect the exception stack trace in the log to identify the dialect limitation.

Example fix

// before (config)
split.string-split-strategy = AUTO
// after (config)
split.string-split-strategy = HASH
Defensive patterns

Strategy: fallback

Prevention

When it happens

Trigger: createSplits with StringSplitStrategy.AUTO and createStringRangeSplits throws (e.g. unsupported key type/range computation error on the split column of the table).

Common situations: Splitting on string/varchar primary keys whose range computation fails on particular dialects or unusual data (empty tables, collation issues, non-comparable values); users with AUTO strategy hit this transparently.

Related errors


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/source/FixedChunkSplitter.java:97

            if (config.getStringSplitStrategy() == null) {
                log.info("useNewStringSplitter is {}", useCharsetBasedStringSplitter);
                if (useCharsetBasedStringSplitter) {
                    return getJdbcSourceStringSplits(table, splitKeyName, splitKeyType);
                } else {
                    return createStringColumnSplits(table, splitKeyName, splitKeyType);
                }
            }
            switch (resolveStringSplitStrategy(table, splitKeyName)) {
                case NONE:
                    return Collections.singletonList(createSingleSplit(table));
                case HASH:
                    return createStringColumnSplits(table, splitKeyName, splitKeyType);
                case RANGE:
                    if (config.getStringSplitStrategy() == StringSplitStrategy.AUTO) {
                        try {
                            return createStringRangeSplits(table, splitKeyName, splitKeyType);
                        } catch (Exception e) {
                            log.warn(
                                    "Range string split failed for table {}, fallback to hash split",
                                    table.getTablePath(),
                                    e);
                            return createStringColumnSplits(table, splitKeyName, splitKeyType);
                        }
                    }
                    return createStringRangeSplits(table, splitKeyName, splitKeyType);
                case AUTO:
                    throw new JdbcConnectorException(
                            CommonErrorCodeDeprecated.ILLEGAL_ARGUMENT,
                            "Unexpected string split strategy: " + config.getStringSplitStrategy());
                default:
                    throw new JdbcConnectorException(
                            CommonErrorCodeDeprecated.ILLEGAL_ARGUMENT,
                            "Unsupported string split strategy: "
                                    + config.getStringSplitStrategy());
            }
        }

View on GitHub (pinned to cf67b549a7)