{"record":{"id":"f99c260cd2e8225a","repo":"apache/beam","slug":"description-or-feature-unsupported-because-feature-is-not","errorCode":null,"errorMessage":"{description or feature} unsupported because {feature} is not set in --yaml_experimental_features option.","messagePattern":"(.+?) unsupported because (.+?) is not set in --yaml_experimental_features option\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/options.py","lineNumber":34,"sourceCode":"#\n\nfrom apache_beam.options import pipeline_options\n\n\nclass YamlOptions(pipeline_options.PipelineOptions):\n  @classmethod\n  def _add_argparse_args(cls, parser):\n    parser.add_argument(\n        '--yaml_experimental_features',\n        dest='yaml_experimental_features',\n        action='append',\n        default=[],\n        help=('Enable yaml features ahead of them being declared stable.'))\n\n  @classmethod\n  def check_enabled(cls, pipeline, feature, description=None):\n    if feature not in pipeline._options.view_as(cls).yaml_experimental_features:\n      raise ValueError(\n          f'{description or feature} unsupported because '\n          f'{feature} is not set in --yaml_experimental_features option.')\n","sourceCodeStart":16,"sourceCodeEnd":37,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/options.py#L16-L37","documentation":"check_enabled in apache_beam.yaml.options raises ValueError when a YAML feature gated behind --yaml_experimental_features is used without opting in. Experimental features must be explicitly enabled per pipeline run via the option list.","triggerScenarios":"Invoking a feature that calls YamlOptions.check_enabled(pipeline, 'FeatureName') while the pipeline options do not include that feature name in yaml_experimental_features (e.g. Enrichment, SQL experimental paths).","commonSituations":"Users deploy a YAML pipeline using an experimental transform (e.g. Enrichment) locally then to Dataflow without adding --yaml_experimental_features=Enrichment; upgrading Beam picks up a newly gated feature.","solutions":["Add the feature to the pipeline options: --yaml_experimental_features=<FeatureName> (comma-separated for several).","In Python API, set the option via PipelineOptions flags: ['--yaml_experimental_features=Enrichment'].","Check the feature's documentation for the exact option string expected by check_enabled."],"exampleFix":"// before\npython -m apache_beam.yaml.main --yaml_pipeline_file p.yaml\n// after\npython -m apache_beam.yaml.main --yaml_pipeline_file p.yaml --yaml_experimental_features=Enrichment","handlingStrategy":"validation","validationCode":"def ensure_feature(flags: list, feature: str):\n    opts = [f.split('=', 1)[1] for f in flags if f.startswith('--yaml_experimental_features=')]\n    enabled = {name for chunk in opts for name in chunk.split(',')}\n    if feature not in enabled:\n        raise SystemExit(f'Add --yaml_experimental_features={feature}')","typeGuard":"def feature_enabled(pipeline, feature: str) -> bool:\n    from apache_beam.yaml import options\n    return feature in pipeline._options.view_as(options.YamlOptions).yaml_experimental_features","tryCatchPattern":"try:\n    enrichment_transform(pcoll, ...)\nexcept ValueError as e:\n    if 'yaml_experimental_features' in str(e):\n        rebuild_pipeline_with_feature_flag(extract_feature_name(str(e)))\n    else:\n        raise","preventionTips":["Mirror the same --yaml_experimental_features flags between local runs and Dataflow templates","Check feature docs for the exact opt-in name before using experimental transforms","Keep a shared options module so all environments pass identical flags"],"tags":["yaml","feature-flags","beam-yaml"],"backgroundTag":"feature-not-enabled","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"}