pentaho/pentaho-kettle · error · KettleException
AvroInput.Error.NoPathSet
AvroInput.Error.NoPathSet
Error message
AvroInput.Error.NoPathSet
What it means
fieldInit initializes one Avro output field. It first validates that avroInputField.getAvroFieldName() (the Avro path) is non-empty; an empty path means the field cannot be located in the record, so a KettleException with localized message 'AvroInput.Error.NoPathSet' is thrown.
Solutions
- Set the Avro field path for every entry in the step's fields list
- Remove empty/placeholder field rows from the mapping grid
- Re-open the step dialog, fill all paths, and re-save the transformation
Example fix
// before
AvroInputField f = new AvroInputField();
f.setPentahoFieldName("out"); // no avro path
// after
AvroInputField f = new AvroInputField();
f.setPentahoFieldName("out");
f.setAvroFieldName("$.customer.name"); Defensive patterns
Strategy: validation
Validate before calling
for (AvroInputField f : fields) {
if (Const.isEmpty(f.getAvroFieldName())) {
throw new KettleException("Field '" + f.getPentahoFieldName() + "' has no Avro path set");
}
} Type guard
boolean hasAvroPath(AvroInputField f) {
return f.getAvroFieldName() != null && !f.getAvroFieldName().trim().isEmpty();
} Try / catch
try {
nestedReader.init();
} catch (KettleException e) {
logError("An Avro field mapping is missing its path: " + e.getMessage());
setErrors(1);
} Prevention
- Never leave the path column blank when adding mapping rows
- Delete unused/placeholder mapping rows
- Validate mappings programmatically before executing transformations built in code
When it happens
Trigger: A configured Avro input field whose 'path in Avro record' (avroFieldName) is blank when init() calls fieldInit for each field.
Common situations: Adding a row to the fields grid but leaving the path column empty; fields created programmatically without setAvroFieldName; a failed XML/repository load that dropped path values.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- AvroInput.Error.MalformedPathArray
- AvroInput.Error.MalformedPathArray2
- AvroInput.Error.MalformedPathMap
- AvroInput.Error.MalformedPathMap2
- AvroInput.Error.MutipleDifferentExpansions
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/193f11bcd9b54cee.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/avro-format/core/src/main/java/org/pentaho/di/trans/steps/avro/input/AvroNestedReader.java:259
for ( String part : avroInputField.getPathParts() ) {
if ( space == null ) {
avroInputField.getTempParts().add( part );
} else {
avroInputField.getTempParts().add( space.environmentSubstitute( part ) );
}
}
}
/**
* Initialize this field by parsing the path etc.
*
* @param outputIndex the index in the output row structure for this field
* @throws KettleException if a problem occurs
*/
public void fieldInit(AvroInputField avroInputField, int outputIndex ) throws KettleException {
if ( Const.isEmpty( avroInputField.getAvroFieldName() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "AvroInput.Error.NoPathSet" ) );
}
if ( avroInputField.getPathParts() != null ) {
return;
}
String fieldPath = cleansePath( avroInputField.getAvroFieldName() );
String[] temp = fieldPath.split( "\\." );
List<String> pathParts = new ArrayList<>();
avroInputField.setPathParts( pathParts );
for ( String part : temp ) {
pathParts.add( part );
}
if ( pathParts.get( 0 ).equals( "$" ) ) {
pathParts.remove( 0 ); // root record indicator
} else if ( pathParts.get( 0 ).startsWith( "$[" ) ) {
View on GitHub (pinned to f3058517a1)