apache/seatunnel · error · IOException
Row kind ${rowKind} is not supported in NebulaGraph ${writeM
Error message
Row kind ${rowKind} is not supported in NebulaGraph ${writeMode} mode. What it means
NebulaGraphSinkWriter.write inspects each row's RowKind. DELETE rows are always rejected, and in INSERT mode only INSERT rows are accepted; UPDATE_BEFORE rows are skipped. Unsupported combinations throw UNSUPPORTED_DATA_TYPE via unsupportedRowKind, naming the row kind and current write mode.
Source
Thrown at seatunnel-connectors-v2/connector-nebulagraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/nebulagraph/sink/NebulaGraphSinkWriter.java:67
}
NebulaGraphSinkWriter(
NebulaGraphSinkConfig config, SeaTunnelRowType rowType, NebulaGraphClient client) {
this.config = config;
this.converter = new NebulaGraphRowConverter(config, rowType);
this.statementBuilder =
new NebulaGraphStatementBuilder(
config.getTag(), converter.getPropertyNames(), config.getWriteMode());
this.buffer = new ArrayList<>(config.getBatchSize());
this.client = client == null ? new SessionPoolNebulaGraphClient(config) : client;
}
@Override
public void write(SeaTunnelRow row) throws IOException {
ensureWritable();
RowKind rowKind = row.getRowKind();
if (rowKind == RowKind.DELETE) {
throw unsupportedRowKind(rowKind);
}
if (config.getWriteMode() == NebulaGraphWriteMode.INSERT && rowKind != RowKind.INSERT) {
throw unsupportedRowKind(rowKind);
}
if (rowKind == RowKind.UPDATE_BEFORE) {
return;
}
buffer.add(converter.convert(row));
if (buffer.size() >= config.getBatchSize()) {
flush();
}
}
@Override
public Optional<Void> prepareCommit() {
try {
ensureWritable();View on GitHub (pinned to cf67b549a7)
Solutions
- Set write_mode = UPDATE (or the mode that supports the row kinds you ingest) for CDC streams
- Filter DELETE rows upstream with a Sql transform (e.g. WHERE __op != 'DELETE' or row kind filtering)
- Use a transform to convert UPDATE_BEFORE/DELETE rows appropriately before the sink
- Route delete events to a separate sink or handle them via explicit delete logic if supported
Example fix
// before
NebulaGraph {
write_mode = INSERT // CDC stream has UPDATE/DELETE kinds
}
// after
NebulaGraph {
write_mode = UPDATE
} Defensive patterns
Strategy: validation
Validate before calling
RowKind k = row.getRowKind();
if (k == RowKind.DELETE) throw new IllegalArgumentException("DELETE rows unsupported by NebulaGraph sink");
if (writeMode == INSERT && k != RowKind.INSERT) throw new IllegalArgumentException("mode INSERT only accepts INSERT rows"); Try / catch
try {
sink.write(row);
} catch (NebulaGraphConnectorException e) {
if (e.getMessage() != null && e.getMessage().contains("Row kind")) {
// switch write_mode or filter the row kind upstream
}
throw e;
} Prevention
- Match write_mode to the changelog kinds your source emits
- Filter DELETE/UPDATE_BEFORE rows with a Sql transform for CDC pipelines
- Review row-kind support before pointing CDC sources at NebulaGraph
When it happens
Trigger: Consuming CDC data (e.g. MySQL-CDC) where DELETE or UPDATE_AFTER/UPDATE_BEFORE rows reach an INSERT-mode NebulaGraph sink; DELETE rows in any write mode.
Common situations: CDC pipeline targeting NebulaGraph with default INSERT mode; Debezium-style changelog streams not filtered; using the sink where a delete/delete-supporting sink is expected.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Unsupported rowKind: " + rowKind
- Multiple incremental splits are not supported
- not supported create new Offset by committed offset.
- The SplitChange type of %s is not supported.
- should not call here, error
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f925ae1dec1ac203.
Report an issue: GitHub.