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

  1. Add at least one property column to the row schema
  2. Explicitly configure write_fields with at least one non-VID field when using UPDATE
  3. Switch to INSERT mode if only vertex IDs need to be written
  4. 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

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


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)