apache/seatunnel · error · SensorsDataException

UNSUPPORTED_RECORD_TYPE

UNSUPPORTED_RECORD_TYPE

Error message

Unsupported : " + config.getRecordType()

What it means

When entity_name is 'users', SensorsDataRecordBuilder.Builder maps record_type to USER, USER_EVENT, or USER_DETAIL; any other record_type string throws SensorsDataException(UNSUPPORTED_RECORD_TYPE) with 'Unsupported : <value>'. The builder only accepts users/events/details as record types under the users entity.

Source

Thrown at seatunnel-connectors-v2/connector-sensorsdata/src/main/java/org/apache/seatunnel/connectors/sensorsdata/format/record/SensorsDataRecordBuilder.java:77

        private SpecialItemRecord.Builder specialItemRecordBuilder = null;

        private Builder(SensorsDataConfigBase config, RowAccessor rowAccessor) {
            this.rowAccessor = rowAccessor;
            switch (config.getEntityName().toLowerCase()) {
                case USER_ENTITY_NAME:
                    switch (config.getRecordType().toLowerCase()) {
                        case USER_RECORD:
                            this.recordType = SensorsDataRecordType.USER;
                            break;
                        case EVENT_RECORD:
                            this.recordType = SensorsDataRecordType.USER_EVENT;
                            break;
                        case DETAIL_RECORD:
                            this.recordType = SensorsDataRecordType.USER_DETAIL;
                            break;
                        default:
                            throw new SensorsDataException(
                                    SensorsDataErrorCode.UNSUPPORTED_RECORD_TYPE,
                                    "Unsupported : " + config.getRecordType());
                    }
                    this.userRecordBuilder = UserRecordBase.newBuilder(rowAccessor);
                    break;
                case SPECIAL_ITEM_ENTITY_NAME:
                    this.recordType = SensorsDataRecordType.SPECIAL_ITEM;
                    this.specialItemRecordBuilder = SpecialItemRecord.newBuilder(rowAccessor);
                    break;
                default:
                    // not support item record yet.
                    throw new SensorsDataException(
                            SensorsDataErrorCode.UNSUPPORTED_RECORD_TYPE,
                            "Unsupported : " + config.getEntityName());
            }
        }

        private Builder(SensorsDataRecordType recordType, RowAccessor rowAccessor) {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Set record_type to one of exactly "users", "events", or "details" in the sink config.
  2. Check for singular/typo variants (event, user, detail) and fix them to the plural forms.
  3. If you intended item records, use entity_name="items" instead of changing record_type.
  4. Consult the connector documentation for the supported record_type values in your connector version.

Example fix

// before
sink {
  SensorsData {
    entity_name = "users"
    record_type = "event"   // unsupported
  }
}
// after
sink {
  SensorsData {
    entity_name = "users"
    record_type = "events"
  }
}
Defensive patterns

Strategy: validation

Validate before calling

Set<String> allowed = Set.of("users", "events", "details");
if ("users".equalsIgnoreCase(entityName) && !allowed.contains(recordType.toLowerCase())) {
    throw new IllegalArgumentException(
        "record_type must be one of users|events|details, got: " + recordType);
}

Try / catch

try {
    builder = SensorsDataRecordBuilder.newBuilder(config, rowAccessor);
} catch (SensorsDataException e) {
    if (SensorsDataErrorCode.UNSUPPORTED_RECORD_TYPE.equals(e.getErrorCode())) {
        throw new JobConfigException("Invalid record_type/entity_name: " + e.getMessage(), e);
    }
    throw e;
}

Prevention

When it happens

Trigger: Sink startup with entity_name="users" and record_type set to any value other than "users", "events", or "details" (case-insensitive), e.g. "user", "event", "detail", "track", or "item".

Common situations: Typo or singular form used for record_type ("event" instead of "events"); copied config from an items-style sink where record_type differs; docs read from an older connector version that used different values.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/d77010d71ed15759. Report an issue: GitHub.