apache/seatunnel · error · DeepLakeConnectorException
UNSUPPORTED_ROW_KIND
UNSUPPORTED_ROW_KIND
Error message
DeepLake sink supports append-only input, but received ${element.getRowKind()} What it means
DeepLakeSinkWriter.write only accepts RowKind.INSERT rows; UPDATE_BEFORE/UPDATE_AFTER/DELETE rows are rejected with DeepLakeConnectorException(UNSUPPORTED_ROW_KIND). The Deep Lake sink is append-only, so changelog streams must be reduced to inserts before writing.
Source
Thrown at seatunnel-connectors-v2/connector-deeplake/src/main/java/org/apache/seatunnel/connectors/seatunnel/deeplake/sink/DeepLakeSinkWriter.java:82
+ DeepLakeSql.qualifiedTable(
config.getWorkspace(), config.getTable())
+ " LIMIT 0");
}
} catch (RuntimeException | Error e) {
try {
client.close();
} catch (IOException closeError) {
e.addSuppressed(closeError);
}
throw e;
}
}
@Override
public void write(SeaTunnelRow element) {
ensureActive();
if (element.getRowKind() != RowKind.INSERT) {
throw new DeepLakeConnectorException(
DeepLakeConnectorErrorCode.UNSUPPORTED_ROW_KIND,
"DeepLake sink supports append-only input, but received "
+ element.getRowKind());
}
try {
rows.add(DeepLakeRowConverter.convert(element, rowType));
if (rows.size() >= batchSize) {
flush();
}
} catch (RuntimeException | Error e) {
failed = true;
throw e;
}
}
@Override
public Optional<Void> prepareCommit() {
ensureActive();View on GitHub (pinned to cf67b549a7)
Solutions
- Insert a deduplication/aggregation transform upstream so only INSERT rows reach the sink
- Flatten CDC u_u/d_u events into insert-only form (materialize current state)
- Use a sink supporting changelog semantics if append-only processing is not acceptable
Example fix
// before source(MySQL-CDC) -> sink(DeepLake) // after source(MySQL-CDC) -> transform(Deduplicate, keys=[id]) -> sink(DeepLake)
Defensive patterns
Strategy: validation
Validate before calling
if (row.getRowKind() != RowKind.INSERT) { throw new IllegalStateException("DeepLake sink requires INSERT rows, got " + row.getRowKind()); } Type guard
boolean isInsertOnly(SeaTunnelRow row) { return row.getRowKind() == RowKind.INSERT; } Try / catch
try { writer.write(row); } catch (DeepLakeConnectorException e) { if ("UNSUPPORTED_ROW_KIND".equals(e.getErrorCode())) log.error("Non-insert row rejected: {}", e.getMessage()); throw e; } Prevention
- Always place a dedup/aggregate transform between CDC sources and the Deep Lake sink
- Use Deep Lake only for append-only pipelines
- Assert RowKind.INSERT in tests for streaming jobs feeding this sink
When it happens
Trigger: Writing SeaTunnelRows whose RowKind is not INSERT — typically CDC data (MySQL CDC/debezium) flowing directly into the sink, or a transform emitting update/delete events.
Common situations: CDC-to-Deep Lake pipelines without a deduplication/aggregation step; streaming jobs emitting retract messages; upstream transforms leaving change kinds intact.
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 row kind.
- UNSUPPORTED_OPERATION
- Unsupported rowKind: " + rowKind
- UNSUPPORTED_ROW_KIND
- UNSUPPORTED_OPERATION
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/53d69df791b2aeb9.
Report an issue: GitHub.