{"record":{"id":"53d69df791b2aeb9","repo":"apache/seatunnel","slug":"unsupported-row-kind-53d69d","errorCode":"UNSUPPORTED_ROW_KIND","errorMessage":"DeepLake sink supports append-only input, but received ${element.getRowKind()}","messagePattern":"DeepLake sink supports append-only input, but received (.+?)","errorType":"error_code","errorClass":"DeepLakeConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-deeplake/src/main/java/org/apache/seatunnel/connectors/seatunnel/deeplake/sink/DeepLakeSinkWriter.java","lineNumber":82,"sourceCode":"                                + DeepLakeSql.qualifiedTable(\n                                        config.getWorkspace(), config.getTable())\n                                + \" LIMIT 0\");\n            }\n        } catch (RuntimeException | Error e) {\n            try {\n                client.close();\n            } catch (IOException closeError) {\n                e.addSuppressed(closeError);\n            }\n            throw e;\n        }\n    }\n\n    @Override\n    public void write(SeaTunnelRow element) {\n        ensureActive();\n        if (element.getRowKind() != RowKind.INSERT) {\n            throw new DeepLakeConnectorException(\n                    DeepLakeConnectorErrorCode.UNSUPPORTED_ROW_KIND,\n                    \"DeepLake sink supports append-only input, but received \"\n                            + element.getRowKind());\n        }\n        try {\n            rows.add(DeepLakeRowConverter.convert(element, rowType));\n            if (rows.size() >= batchSize) {\n                flush();\n            }\n        } catch (RuntimeException | Error e) {\n            failed = true;\n            throw e;\n        }\n    }\n\n    @Override\n    public Optional<Void> prepareCommit() {\n        ensureActive();","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-deeplake/src/main/java/org/apache/seatunnel/connectors/seatunnel/deeplake/sink/DeepLakeSinkWriter.java#L64-L100","documentation":"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.","triggerScenarios":"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.","commonSituations":"CDC-to-Deep Lake pipelines without a deduplication/aggregation step; streaming jobs emitting retract messages; upstream transforms leaving change kinds intact.","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"],"exampleFix":"// before\nsource(MySQL-CDC) -> sink(DeepLake)\n// after\nsource(MySQL-CDC) -> transform(Deduplicate, keys=[id]) -> sink(DeepLake)","handlingStrategy":"validation","validationCode":"if (row.getRowKind() != RowKind.INSERT) { throw new IllegalStateException(\"DeepLake sink requires INSERT rows, got \" + row.getRowKind()); }","typeGuard":"boolean isInsertOnly(SeaTunnelRow row) { return row.getRowKind() == RowKind.INSERT; }","tryCatchPattern":"try { writer.write(row); } catch (DeepLakeConnectorException e) { if (\"UNSUPPORTED_ROW_KIND\".equals(e.getErrorCode())) log.error(\"Non-insert row rejected: {}\", e.getMessage()); throw e; }","preventionTips":["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"],"tags":["deeplake","sink","rowkind","cdc"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}