apache/beam · error
Encountered a type that is not currently supported by RowCod
Error message
Encountered a type that is not currently supported by RowCoder: ${JSON.stringify(f.type)} What it means
NamedTransform._check_allowed validates a fully qualified transform name against _FILTER_GLOB using fnmatch. If the name does not match the configured allow-list glob (or no glob is set), ValueError is raised. This is a deliberate security/policy gate restricting which transforms a pipeline may resolve by name.
Source
Thrown at sdks/typescript/src/apache_beam/coders/row_coder.ts:130
private hasNullableFields: boolean;
private components: Coder<any>[];
addFieldOfType(obj: any, f: Field, value: any): any {
if (f.type !== undefined) {
let typeInfo = f.type?.typeInfo;
switch (typeInfo.oneofKind) {
case "atomicType":
case "rowType":
case "logicalType":
obj[f.name] = value;
break;
case "arrayType":
obj[f.name] = value === undefined ? undefined : Array.from(value);
break;
// case "iterableType":
// case "mapType":
default:
throw new Error(
`Encountered a type that is not currently supported by RowCoder: ${JSON.stringify(
f.type,
)}`,
);
}
return obj;
}
}
static inferTypeFromJSON(obj: any, nullable: boolean = true): FieldType {
if (obj instanceof TypePlaceholder) {
return obj.fieldType;
}
let fieldType: FieldType = {
nullable: nullable,
typeInfo: {
oneofKind: undefined,View on GitHub (pinned to 12126d8942)
Solutions
- Adjust _FILTER_GLOB (or the filter configuration) so the fully qualified name matches, e.g. widen the glob pattern.
- Use a fully qualified name within the allowed namespace.
- Check glob case-sensitivity — fnmatchcase is used, so pattern and name case must match.
Example fix
// before
_FILTER_GLOB = 'apache_beam.transforms.*'
p | NamedTransform('org.apache.beam.sdk.io.kafka.KafkaIO.read')
// after
_FILTER_GLOB = 'org.apache.beam.*' # or use a name matching the existing filter Defensive patterns
Strategy: validation
Validate before calling
import fnmatch
assert fnmatch.fnmatchcase(fully_qualified_name, NamedTransform._FILTER_GLOB), f'{fully_qualified_name} not allowed by {NamedTransform._FILTER_GLOB}' Type guard
def name_allowed(name: str, glob: str) -> bool:
import fnmatch
return bool(glob) and fnmatch.fnmatchcase(name, glob) Try / catch
try:
p | NamedTransform(fq_name)
except ValueError as e:
logger.error('Transform blocked by filter: %s', e)
raise Prevention
- Check _FILTER_GLOB before resolving new transform names
- Remember fnmatchcase is case-sensitive
- Keep the allow-list glob in sync with the namespaces your pipeline uses
When it happens
Trigger: Resolving/expanding a NamedTransform whose fully qualified name fails fnmatch against cls._FILTER_GLOB, e.g. filter 'apache_beam.transforms.*' with name 'com.example.Custom', called via expand() or _resolve().
Common situations: Class-level _FILTER_GLOB left at a restrictive default or set to the wrong pattern; referencing transforms from third-party packages not covered by the glob; glob typos (case sensitivity: fnmatchcase).
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- Unknown type of encoding context
- Unknown type of decoding context
- User provided temp database ID cannot start with %r
- List operation failed
- Could not find coder for URN " + urn
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/e819e4efa82c2b3f.
Report an issue: GitHub.