{"record":{"id":"501d332a6e4b7741","repo":"apache/beam","slug":"invalid-create-disposition-s-expecting-s","errorCode":null,"errorMessage":"Invalid create disposition %s. Expecting %s","messagePattern":"Invalid create disposition (.+?)\\. Expecting (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/io/gcp/bigquery.py","lineNumber":598,"sourceCode":"    return bigquery.TableRow(\n        f=[bigquery.TableCell(v=to_json_value(e)) for e in od.values()])\n\n\nclass BigQueryDisposition(object):\n  \"\"\"Class holding standard strings used for create and write dispositions.\"\"\"\n\n  CREATE_NEVER = 'CREATE_NEVER'\n  CREATE_IF_NEEDED = 'CREATE_IF_NEEDED'\n  WRITE_TRUNCATE = 'WRITE_TRUNCATE'\n  WRITE_APPEND = 'WRITE_APPEND'\n  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","sourceCodeStart":580,"sourceCodeEnd":616,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/io/gcp/bigquery.py#L580-L616","documentation":"BigQueryDisposition.validate_create checks that a create disposition is one of CREATE_NEVER or CREATE_IF_NEEDED; any other string raises ValueError. This validates the static configuration of BigQuery sinks/loads.","triggerScenarios":"Passing create_disposition with a typo or unsupported value (e.g. 'CREATE_IF_NEDED', 'create_if_needed', or empty string) to WriteToBigQuery or BigQuery batch load configuration.","commonSituations":"Hand-typed disposition strings copied from SQL/other SDKs with different casing or naming; programmatic config assembled from user input.","solutions":["Use the enum constants: BigQueryDisposition.CREATE_IF_NEEDED or CREATE_NEVER","Fix the typo/casing of the disposition string","Validate user-provided config through validate_create before constructing the sink"],"exampleFix":"// before\nWriteToBigQuery(..., create_disposition='create_if_needed')\n// after\nfrom apache_beam.io.gcp.bigquery import BigQueryDisposition\nWriteToBigQuery(..., create_disposition=BigQueryDisposition.CREATE_IF_NEEDED)","handlingStrategy":"validation","validationCode":"from apache_beam.io.gcp.bigquery import BigQueryDisposition\nassert create_disposition in (BigQueryDisposition.CREATE_IF_NEEDED, BigQueryDisposition.CREATE_NEVER)","typeGuard":"def is_valid_create_disposition(d):\n    return d in ('CREATE_IF_NEEDED', 'CREATE_NEVER')","tryCatchPattern":"try:\n    BigQueryDisposition.validate_create(disposition)\nexcept ValueError as e:\n    logging.error('Bad create disposition %r, defaulting', disposition)\n    disposition = BigQueryDisposition.CREATE_IF_NEEDED","preventionTips":["Always use BigQueryDisposition constants, never raw strings","Validate user config at pipeline-argument parsing time","Watch for casing when importing dispositions from other SDKs"],"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"}