{"record":{"id":"aa49c77b74f28ce1","repo":"apache/beam","slug":"invalid-value-equalities-for-equalities-pcoll-tag-is-not-a","errorCode":null,"errorMessage":"Invalid value \"{equalities}\" for \"equalities\". \"{pcoll_tag}\" is not a specified alias in \"input\"","messagePattern":"Invalid value \"(.+?)\" for \"equalities\"\\. \"(.+?)\" is not a specified alias in \"input\"","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/yaml_join.py","lineNumber":103,"sourceCode":"        f'{error_prefix} {equality} '\n        f'should be a dict[str, str] containing at least 2 items.')\n    if not isinstance(equality, dict):\n      raise invalid_dict_error\n    if len(equality) < 2:\n      raise invalid_dict_error\n\n    for pcoll_tag, col in equality.items():\n      if pcoll_tag not in pcolls:\n        raise ValueError(\n            f'{error_prefix} \"{pcoll_tag}\" is not a specified alias in \"input\"')\n      if col not in valid_cols[pcoll_tag]:\n        raise ValueError(\n            f'{error_prefix} \"{col}\" is not a valid field in \"{pcoll_tag}\".')\n\n    input_edge_list.append(tuple(equality.keys()))\n\n  if not _is_connected(input_edge_list, len(pcolls)):\n    raise ValueError(\n        f'{error_prefix} '\n        f'The provided equalities do not connect all of {list(pcolls.keys())}.')\n\n  return equalities\n\n\ndef _parse_fields(tables, fields):\n  error_prefix = f'Invalid value \"{fields}\" for \"fields\".'\n  if not isinstance(fields, dict):\n    raise ValueError(f'{error_prefix} Fields must be a dict.')\n  output_fields = []\n  named_columns = set()\n  for input, cols in fields.items():\n    if input not in tables:\n      raise ValueError(f'An invalid input \"{input}\" was specified in \"fields\".')\n    if isinstance(cols, list):\n      for col in cols:\n        if not isinstance(col, str):","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/yaml_join.py#L85-L121","documentation":"Within an equality dict, each key must be an input alias declared in the transform's 'input' mapping. _validate_equalities raises this error when a pcoll tag used as an equality key is not found among the specified aliases.","triggerScenarios":"Using a key like {lft: id, rgt: id} when the inputs are declared as {left: ..., right: ...}; renaming an input alias in 'input' without updating equalities; a typo in the alias name.","commonSituations":"Hand-edited YAML where the input alias was changed or misspelled; copying join conditions from a different pipeline with different alias names.","solutions":["Make each equality key exactly match an alias defined in the 'input' mapping.","Fix typos in alias names in equalities.","Update equalities whenever you rename inputs."],"exampleFix":"// before\ninput: {left: read_a, right: read_b}\nequalities: [{lft: id, right: id}]\n// after\ninput: {left: read_a, right: read_b}\nequalities: [{left: id, right: id}]","handlingStrategy":"validation","validationCode":"def check_aliases(equalities, inputs):\n    for eq in equalities:\n        for tag in eq:\n            if tag not in inputs:\n                raise ValueError(f'alias {tag!r} not in input {list(inputs)}')","typeGuard":null,"tryCatchPattern":"try:\n    result = SqlJoinTransform(config)\nexcept ValueError as e:\n    if 'is not a specified alias' in str(e):\n        raise ConfigError(f'equality key must match an input alias: {e}') from e\n    raise","preventionTips":["Copy-paste alias names from the input block instead of retyping them","Grep the spec for each equality key to confirm it exists in input","Rename aliases and equalities together in one edit"],"tags":["apache-beam","yaml","validation","join"],"backgroundTag":"entity-not-found","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"}