apache/seatunnel · error · DmlParserException

DML statement couldn't be parsed. Please open a Jira issue…

Error message

DML statement couldn't be parsed. Please open a Jira issue with the statement '${redoSql}'.

What it means

When parsing a DML statement from SQL_REDO, the parser throws DmlParserException; parseDmlStatement wraps it, re-throwing DmlParserException with a message asking to report the redo SQL via a Jira issue. This means LogMiner emitted a DML string the connector's parser cannot understand — usually a parser gap rather than user misconfiguration.

Solutions

  1. Capture the full redoSql and open a Debezium Jira issue as the message instructs (include Oracle version and connector version).
  2. Check for a newer Debezium release — many parser gaps are fixed incrementally; upgrade the connector artifact.
  3. As a workaround, adjust application write patterns that produce the exotic DML (e.g. avoid special characters needing nonstandard escaping).
  4. If only one table is affected, temporarily exclude it from capture until the parser fix lands.

Example fix

null
Defensive patterns

Strategy: try-catch

Try / catch

try {
    event = parseDmlStatement(redoSql);
} catch (DmlParserException e) {
    LOGGER.warn("Unparseable DML, capture for Jira: {}", redoSql, e);
}

Prevention

When it happens

Trigger: AbstractLogMinerEventProcessor's DML parse path (called while handling data events) encounters a redo SQL string whose structure defeats the DmlParser — e.g. novel syntax, unusual quoting, long identifiers, or unsupported predicates in the WHERE clause.

Common situations: Oracle-generated DML with unusual column/value escaping (embedded quotes, special characters); inserts/updates with subquery-style predicates after an Oracle upgrade; long column lists exceeding parser assumptions; NLS/session-specific formatting of literals.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/processor/AbstractLogMinerEventProcessor.java:1093

     *
     * @param redoSql the redo SQL statement
     * @param table the table the SQL statement is for
     * @param transactionId the associated transaction id for the SQL statement
     * @return a parse object for the redo SQL statement
     */
    private LogMinerDmlEntry parseDmlStatement(String redoSql, Table table, String transactionId) {
        LogMinerDmlEntry dmlEntry;
        try {
            Instant parseStart = Instant.now();
            dmlEntry = dmlParser.parse(redoSql, table);
            metrics.addCurrentParseTime(Duration.between(parseStart, Instant.now()));
        } catch (DmlParserException e) {
            String message =
                    "DML statement couldn't be parsed."
                            + " Please open a Jira issue with the statement '"
                            + redoSql
                            + "'.";
            throw new DmlParserException(message, e);
        }

        if (dmlEntry.getOldValues().length == 0) {
            if (EventType.UPDATE == dmlEntry.getEventType()
                    || EventType.DELETE == dmlEntry.getEventType()) {
                LOGGER.warn("The DML event '{}' contained no before state.", redoSql);
                metrics.incrementWarningCount();
            }
        }

        return dmlEntry;
    }

    private static Pattern LOB_WRITE_SQL_PATTERN =
            Pattern.compile(
                    "(?s).* := ((?:HEXTORAW\\()?'.*'(?:\\))?);\\s*dbms_lob.write\\([^,]+,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,[^,]+\\);.*");

    /**

View on GitHub (pinned to cf67b549a7)