{"record":{"id":"7a2174d401e9f1f0","repo":"apache/beam","slug":"unknown-or-unsupported-atomic-type-beam-type-atomic-type","errorCode":null,"errorMessage":"Unknown or unsupported atomic type: {beam_type.atomic_type}","messagePattern":"Unknown or unsupported atomic type: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/yaml_mapping.py","lineNumber":344,"sourceCode":"  return python_callable.PythonCallableWithSource(source)\n\n\ndef _validator(beam_type: schema_pb2.FieldType) -> Callable[[Any], bool]:\n  \"\"\"Returns a callable converting rows of the given type to Json objects.\"\"\"\n  type_info = beam_type.WhichOneof(\"type_info\")\n  if type_info == \"atomic_type\":\n    if beam_type.atomic_type == schema_pb2.BOOLEAN:\n      return lambda x: isinstance(x, bool)\n    elif beam_type.atomic_type == schema_pb2.INT64:\n      return lambda x: isinstance(x, int)\n    elif beam_type.atomic_type == schema_pb2.DOUBLE:\n      return lambda x: isinstance(x, (int, float))\n    elif beam_type.atomic_type == schema_pb2.STRING:\n      return lambda x: isinstance(x, str)\n    elif beam_type.atomic_type == schema_pb2.BYTES:\n      return lambda x: isinstance(x, bytes)\n    else:\n      raise ValueError(\n          f'Unknown or unsupported atomic type: {beam_type.atomic_type}')\n  elif type_info == \"array_type\":\n    element_validator = _validator(beam_type.array_type.element_type)\n    return lambda value: all(element_validator(e) for e in value)\n  elif type_info == \"iterable_type\":\n    element_validator = _validator(beam_type.iterable_type.element_type)\n    return lambda value: all(element_validator(e) for e in value)\n  elif type_info == \"map_type\":\n    key_validator = _validator(beam_type.map_type.key_type)\n    value_validator = _validator(beam_type.map_type.value_type)\n    return lambda value: all(\n        key_validator(k) and value_validator(v) for (k, v) in value.items())\n  elif type_info == \"row_type\":\n    validators = {\n        field.name: _validator(field.type)\n        for field in beam_type.row_type.schema.fields\n    }\n    return lambda row: all(","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/yaml_mapping.py#L326-L362","documentation":"The `_validator` helper builds runtime type-check callables from a Beam schema FieldType. It only understands the atomic types BOOLEAN, INT64, DOUBLE, STRING, and BYTES; any other atomic type (e.g. INT32, FLOAT, TIMESTAMP, or logical types) hits this ValueError.","triggerScenarios":"Specifying `output_type` on a MapToFields field with a type that maps to an unsupported Beam atomic type, e.g. output_type: 'timestamp', 'float', 'int32', or a logical/logicalType-based schema, when _as_callable wraps the func in checking_func.","commonSituations":"Declaring output_type with a JSON-schema style type name that json_utils.json_type_to_beam_type maps to an unsupported atomic; users writing 'float' (maps to FLOAT atomic) instead of the supported 'number', or using date/timestamp types.","solutions":["Use a supported output_type: one of boolean, string, bytes, integer ('int64'), or number ('double').","For dates/timestamps, emit strings and declare output_type: string, converting at a later step.","If a new type is genuinely needed, extend _validator in yaml_mapping.py to handle that schema_pb2 atomic type."],"exampleFix":"# before\nfields:\n  ts:\n    expression: \"parse_time(created)\"\n    output_type: timestamp\n# after\nfields:\n  ts:\n    expression: \"str(parse_time(created))\"\n    output_type: string","handlingStrategy":"validation","validationCode":"SUPPORTED = {'boolean', 'string', 'bytes', 'integer', 'number'}\nassert output_type in SUPPORTED, f'unsupported output_type: {output_type}'","typeGuard":"def has_supported_atomic_type(spec: dict) -> bool:\n    t = spec.get('type') if isinstance(spec, dict) else spec\n    return t in ('boolean', 'string', 'bytes', 'integer', 'number')","tryCatchPattern":"try:\n    run_pipeline(yaml_spec)\nexcept ValueError as e:\n    if 'Unknown or unsupported atomic type' in str(e):\n        yaml_spec = rewrite_output_types_to_supported(yaml_spec)\n        run_pipeline(yaml_spec)\n    else:\n        raise","preventionTips":["Stick to boolean/string/bytes/integer/number for output_type","Represent dates and timestamps as strings","Test output_type declarations on a small sample pipeline first"],"tags":["yaml","beam-yaml","schema","unsupported-type","validation"],"backgroundTag":"unsupported-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"}