{"record":{"id":"d30b3f8721f160c9","repo":"apache/beam","slug":"invalid-write-disposition-s-expecting-s","errorCode":null,"errorMessage":"Invalid write disposition %s. Expecting %s","messagePattern":"Invalid write disposition (.+?)\\. Expecting (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/io/gcp/bigquery.py","lineNumber":609,"sourceCode":"  WRITE_EMPTY = 'WRITE_EMPTY'\n\n  @staticmethod\n  def validate_create(disposition):\n    values = (\n        BigQueryDisposition.CREATE_NEVER, BigQueryDisposition.CREATE_IF_NEEDED)\n    if disposition not in values:\n      raise ValueError(\n          'Invalid create disposition %s. Expecting %s' % (disposition, values))\n    return disposition\n\n  @staticmethod\n  def validate_write(disposition):\n    values = (\n        BigQueryDisposition.WRITE_TRUNCATE,\n        BigQueryDisposition.WRITE_APPEND,\n        BigQueryDisposition.WRITE_EMPTY)\n    if disposition not in values:\n      raise ValueError(\n          'Invalid write disposition %s. Expecting %s' % (disposition, values))\n    return disposition\n\n\nclass BigQuerySchemaUpdateOption(str, Enum):\n  \"\"\"Enum holding standard strings used for schema update options.\"\"\"\n\n  ALLOW_FIELD_ADDITION = 'ALLOW_FIELD_ADDITION'\n  ALLOW_FIELD_RELAXATION = 'ALLOW_FIELD_RELAXATION'\n\n  @staticmethod\n  def validate(options):\n    if options is None:\n      return None\n    if not isinstance(options, list):\n      raise ValueError(\n          'schema_update_options must be a list. Received %s.' %\n          type(options).__name__)","sourceCodeStart":591,"sourceCodeEnd":627,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/io/gcp/bigquery.py#L591-L627","documentation":"BigQueryDisposition.validate_write rejects a write disposition string that is not one of WRITE_TRUNCATE, WRITE_APPEND, or WRITE_EMPTY. The offending value is the 'disposition' argument passed to the BigQuery sink/Source.","triggerScenarios":"Passing write_disposition with an invalid value (typo, wrong case, e.g. 'WRITE_TRUNCATED' or 'append') to WriteToBigQuery or BigQuery load configuration.","commonSituations":"Copy-pasting dispositions from other BigQuery client libraries with different naming; typos in YAML/config-driven pipelines.","solutions":["Use BigQueryDisposition.WRITE_APPEND / WRITE_TRUNCATE / WRITE_EMPTY constants","Correct the disposition string spelling and casing","Pre-validate with BigQueryDisposition.validate_write(value)"],"exampleFix":"// before\nWriteToBigQuery(..., write_disposition='WRITE_APPEND ')  # trailing space\n// after\nWriteToBigQuery(..., write_disposition=BigQueryDisposition.WRITE_APPEND)","handlingStrategy":"validation","validationCode":"from apache_beam.io.gcp.bigquery import BigQueryDisposition\nassert write_disposition in (BigQueryDisposition.WRITE_TRUNCATE, BigQueryDisposition.WRITE_APPEND, BigQueryDisposition.WRITE_EMPTY)","typeGuard":"def is_valid_write_disposition(d):\n    return d in ('WRITE_TRUNCATE', 'WRITE_APPEND', 'WRITE_EMPTY')","tryCatchPattern":"try:\n    BigQueryDisposition.validate_write(disposition)\nexcept ValueError as e:\n    logging.error('Bad write disposition %r, defaulting', disposition)\n    disposition = BigQueryDisposition.WRITE_APPEND","preventionTips":["Use BigQueryDisposition constants exclusively","Strip/normalize strings coming from config files","Add validate_write call in config loading code"],"tags":["python","apache-beam","bigquery","enum","validation"],"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-14T16:17:12.679Z"}