apache/seatunnel · error · NebulaGraphConnectorException
INVALID_CONFIG
INVALID_CONFIG
Error message
UPDATE mode requires at least one property field.
What it means
When write_mode = UPDATE, the NebulaGraph sink needs at least one property (non-VID) field to write. NebulaGraphRowConverter's constructor throws INVALID_CONFIG if the effective write_fields list ends up empty after defaulting to all schema fields minus the VID field.
Solutions
- Add at least one property column to the row schema
- Explicitly configure write_fields with at least one non-VID field when using UPDATE
- Switch to INSERT mode if only vertex IDs need to be written
- Verify vid_field is not consuming the only column in the schema
Example fix
// before
NebulaGraph {
write_mode = UPDATE
schema = {
fields { id: string }
}
}
// after
NebulaGraph {
write_mode = UPDATE
schema = {
fields { id: string, name: string, age: int }
}
} Defensive patterns
Strategy: validation
Validate before calling
List<String> fields = schema.getFieldNames();
List<String> props = fields.stream().filter(f -> !f.equals(vidField)).collect(Collectors.toList());
if (writeMode == UPDATE && props.isEmpty()) {
throw new IllegalArgumentException("UPDATE mode requires at least one non-VID field");
} Try / catch
try {
sink.write(row);
} catch (NebulaGraphConnectorException e) {
if (e.getErrorCode() == NebulaGraphConnectorErrorCode.INVALID_CONFIG) {
// add property fields or switch write_mode
}
throw e;
} Prevention
- Ensure UPDATE-mode schemas include at least one property column
- Never set write_fields to an empty list explicitly
- Review schema vs write_mode pairing in config review
When it happens
Trigger: Using UPDATE mode with a row schema that contains only the VID field (no other columns), or write_fields explicitly set to an empty list in UPDATE mode.
Common situations: Schema defined with just an id column; user sets write_fields = [] believing it means 'all'; VID field is the only field after the VID is removed from the defaulted field list.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- At least one sink plugin must be configured.
- At least one source plugin must be configured.
- AzureCosmosDB requires uri, endpoint, or connection string…
- Cannot specify both ' ' and root-level ' '.
- checkResult.getMsg()
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/d14094e418f63add.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-nebulagraph/src/main/java/org/apache/seatunnel/connectors/seatunnel/nebulagraph/sink/NebulaGraphRowConverter.java:60
final class NebulaGraphRowConverter {
private final SeaTunnelRowType rowType;
private final int vidIndex;
private final List<String> propertyNames;
private final List<Integer> propertyIndexes;
NebulaGraphRowConverter(NebulaGraphSinkConfig config, SeaTunnelRowType rowType) {
this.rowType = rowType;
this.vidIndex = fieldIndex(rowType, config.getVidField(), "vid_field");
validateVidType(rowType.getFieldType(vidIndex), config.getVidField());
List<String> configuredFields = config.getWriteFields();
if (configuredFields.isEmpty()) {
configuredFields = new ArrayList<>(Arrays.asList(rowType.getFieldNames()));
configuredFields.remove(config.getVidField());
}
if (config.getWriteMode() == NebulaGraphWriteMode.UPDATE && configuredFields.isEmpty()) {
throw invalid("UPDATE mode requires at least one property field.");
}
this.propertyNames = new ArrayList<>(configuredFields.size());
this.propertyIndexes = new ArrayList<>(configuredFields.size());
for (String field : configuredFields) {
int index = fieldIndex(rowType, field, "write_fields");
validatePropertyType(rowType.getFieldType(index), field);
propertyNames.add(field);
propertyIndexes.add(index);
}
}
NebulaGraphVertex convert(SeaTunnelRow row) {
if (row.getArity() != rowType.getTotalFields()) {
throw invalid(
"Input row arity "
+ row.getArity()
+ " does not match the configured schema arity "View on GitHub (pinned to cf67b549a7)