apache/seatunnel · error · UnsupportedOperationException
MultiTableSinkFactory only support MultiTableFactoryContext
Error message
MultiTableSinkFactory only support MultiTableFactoryContext
What it means
Guard in MultiTableSinkFactory.createSink: this factory can only be invoked with a MultiTableFactoryContext carrying per-table sink contexts; a plain TableSinkFactoryContext (single-table job or wrong factory routing) reaches it and is rejected.
Solutions
- Ensure the job defines multiple tables so the engine builds a MultiTableFactoryContext
- Check factory selection: identifier 'MultiTableSink' should only resolve for multi-table contexts
- When embedding programmatically, construct a MultiTableFactoryContext instead of a plain TableSinkFactoryContext
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/multitablesink/MultiTableSinkFactory.java:41 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/49760b09f2fdd2ff.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/multitablesink/MultiTableSinkFactory.java:41
import org.apache.seatunnel.api.table.factory.MultiTableFactoryContext;
import org.apache.seatunnel.api.table.factory.TableSinkFactory;
import org.apache.seatunnel.api.table.factory.TableSinkFactoryContext;
import com.google.auto.service.AutoService;
@AutoService(Factory.class)
public class MultiTableSinkFactory implements TableSinkFactory {
@Override
public String factoryIdentifier() {
return "MultiTableSink";
}
@Override
public TableSink createSink(TableSinkFactoryContext context) {
if (context instanceof MultiTableFactoryContext) {
return () -> new MultiTableSink((MultiTableFactoryContext) context);
} else {
throw new UnsupportedOperationException(
"MultiTableSinkFactory only support MultiTableFactoryContext");
}
}
@Override
public OptionRule optionRule() {
return OptionRule.builder().build();
}
}
View on GitHub (pinned to cf67b549a7)