apache/beam · error · Error

Unknown transform type

Error message

Unknown transform type:${transform.spec.urn}

What it means

createOperator maps the transform's spec.urn against the operatorsByUrn registry to find the worker-side operator constructor; the urn printed in the message has no registered operator. The faulty input is the transform spec urn in the pipeline proto: the runner asked this worker to execute a transform kind it has no operator for.

Solutions

  1. Align SDK versions between pipeline submission and worker so all urns in the pipeline are in operatorsByUrn.
  2. Remove or replace the transform whose urn appears in the message with one supported by the TypeScript worker.
  3. Register a custom operator under that urn if you intentionally introduced a new transform type.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at sdks/typescript/src/apache_beam/worker/operators.ts:131 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/4ffa43679fbb069a. Report an issue: GitHub.

Appendix: source

Thrown at sdks/typescript/src/apache_beam/worker/operators.ts:131

    public getStateProvider: () => StateProvider,
    public getBundleId: () => string,
    public loggingStageInfo: LoggingStageInfo,
    public metricsContainer: MetricsContainer,
  ) {
    this.pipelineContext = new PipelineContext(descriptor, "");
  }
}

export function createOperator(
  transformId: string,
  context: OperatorContext,
): IOperator {
  const transform = context.descriptor.transforms[transformId];
  // Ensure receivers are eagerly created.
  Object.values(transform.outputs).map(context.getReceiver);
  let operatorConstructor = operatorsByUrn.get(transform.spec!.urn!);
  if (operatorConstructor === null || operatorConstructor === undefined) {
    throw new Error("Unknown transform type:" + transform.spec!.urn);
  }
  return operatorConstructor(transformId, transform, context);
}

type OperatorConstructor = (
  transformId: string,
  transformProto: PTransform,
  context: OperatorContext,
) => IOperator;
interface OperatorClass {
  new (
    transformId: string,
    transformProto: PTransform,
    context: OperatorContext,
  ): IOperator;
}

const operatorsByUrn: Map<string, OperatorConstructor> = new Map();

View on GitHub (pinned to 12126d8942)