{"record":{"id":"30a04328667bc9d8","repo":"apache/beam","slug":"unknown-transform-type-r-at-s","errorCode":null,"errorMessage":"Unknown transform type %r at %s","messagePattern":"Unknown transform type %r at (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/yaml_transform.py","lineNumber":372,"sourceCode":"              self.root,\n              pcolls,\n              spec['transforms'],\n              self.providers,\n              self.input_providers)\n          inner_scope.compute_all()\n          if '__implicit_outputs__' in spec['output']:\n            return inner_scope.get_outputs(\n                spec['output']['__implicit_outputs__'])\n          else:\n            return {\n                key: inner_scope.get_pcollection(value)\n                for (key, value) in spec['output'].items()\n            }\n\n      return maybe_with_resource_hints(_CompositeTransformStub())\n\n    if spec['type'] not in self.providers:\n      raise ValueError(\n          'Unknown transform type %r at %s' %\n          (spec['type'], identify_object(spec)))\n\n    # TODO(yaml): Perhaps we can do better than a greedy choice here.\n    # TODO(yaml): Figure out why this is needed.\n    providers_by_input = {k: v for k, v in self.input_providers.items()}\n    input_providers = [\n        providers_by_input[pcoll] for pcoll in input_pcolls\n        if pcoll in providers_by_input\n    ]\n    provider = self.best_provider(spec, input_providers)\n    extra_dependencies, spec = extract_extra_dependencies(spec)\n    if extra_dependencies:\n      provider = provider.with_extra_dependencies(frozenset(extra_dependencies))\n\n    config = SafeLineLoader.strip_metadata(spec.get('config', {}))\n    if not isinstance(config, dict):\n      raise ValueError(","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/yaml_transform.py#L354-L390","documentation":"After verifying `type` exists, create_ptransform looks it up in the registry of known providers (`self.providers`). A type that is registered nowhere — neither built-in nor from any configured provider — raises this ValueError, including the spec location for debugging.","triggerScenarios":"A `type:` value matching no registered transform: misspelled built-in names, custom transforms whose provider was never registered, or a transform only present in a newer Beam version than the installed one.","commonSituations":"Typos like `ReadFormBigQuery`; using a transform added in a later apache-beam release; forgetting to register a custom provider; specs copied from docs for a different Beam version.","solutions":["Fix the typo in the `type:` value (compare against the catalog of built-in YAML transforms).","Upgrade apache_beam (pip install -U apache-beam[yaml]) if the transform exists in a newer release.","Register the custom transform's provider in the pipeline spec / providers configuration.","Check the installed Beam version's docs for exact supported type names."],"exampleFix":"# before\n- type: ReadFormBigQuery\n# after\n- type: ReadFromBigQuery","handlingStrategy":"validation","validationCode":"known = set(registered_transform_types)  # built-ins + your providers\nfor t in pipeline['transforms']:\n    if t.get('type') not in known:\n        raise ValueError(f'Unknown type {t[\"type\"]} at {t.get(\"name\")}')","typeGuard":"def is_registered_type(t, providers):\n    return isinstance(t, dict) and t.get('type') in providers","tryCatchPattern":"try:\n    run_pipeline(spec)\nexcept ValueError as e:\n    if 'Unknown transform type' in str(e):\n        raise UserPipelineError('Fix type name or register a provider; upgrade Beam if newer') from e","preventionTips":["Copy type names from the official transform catalog","Pin apache-beam version matching your pipeline spec docs","Register custom providers before expanding the pipeline"],"tags":["yaml","beam-yaml","pipeline-definition","unknown-type"],"backgroundTag":"invalid-enum-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}