apache/beam · error
Schema missing on RowType
Error message
Schema missing on RowType
What it means
RowCoder encountered a rowType schema field whose schema property is undefined. A row-typed field is encoded by recursively constructing a nested RowCoder from its schema, so the throw fires when the rowType input lacks the schema payload it requires (malformed or incompletely populated schema proto).
Solutions
- Set rowType.schema on every row-typed field before passing the schema to RowCoder (or use RowCoder.fromSchema with a fully specified Schema proto).
- If the schema came from JSON inference, verify the nested row values were plain objects so inferSchemaOfJSON could derive a nested schema.
- Log typeInfo.rowType at the throw site to identify which field is missing its schema.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at sdks/typescript/src/apache_beam/coders/row_coder.ts:286 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/45fff144328cd8f0.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/typescript/src/apache_beam/coders/row_coder.ts:286
`Encountered an Atomic type that is not currently supported by RowCoder: ${atomicType}`,
);
}
break;
case "arrayType":
if (typeInfo.arrayType.elementType !== undefined) {
return new IterableCoder(
this.getCoderFromType(typeInfo.arrayType.elementType),
);
} else {
throw new Error("ElementType missing on ArrayType");
}
// case "iterableType":
// case "mapType":
case "rowType":
if (typeInfo.rowType.schema !== undefined) {
return RowCoder.fromSchema(typeInfo.rowType.schema);
} else {
throw new Error("Schema missing on RowType");
}
break;
case "logicalType":
const logicalTypeInfo = logicalTypes.get(typeInfo.logicalType.urn);
if (logicalTypeInfo !== undefined) {
const reprCoder = this.getCoderFromType(
typeInfo.logicalType.representation!,
);
return {
encode: (element: any, writer: Writer, context: Context) =>
reprCoder.encode(
logicalTypeInfo.toRepr(element),
writer,
context,
),
decode: (reader: Reader, context: Context) =>
logicalTypeInfo.fromRepr(reprCoder.decode(reader, context)),
toProto: (pipelineContext: ProtoContext) => {View on GitHub (pinned to 12126d8942)