{"record":{"id":"90ce8629a0f7793d","repo":"apache/beam","slug":"tablecell-can-hold-arbitrary-instances-which-may-be-non","errorCode":null,"errorMessage":"TableCell can hold arbitrary instances, which may be non-deterministic.","messagePattern":"TableCell can hold arbitrary instances, which may be non-deterministic\\.","errorType":"exception","errorClass":"NonDeterministicException","httpStatus":null,"severity":"warning","filePath":"sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/TableRowJsonCoder.java","lineNumber":99,"sourceCode":"            .registerModule(new JavaTimeModule())\n            .registerModule(new JodaModule())\n            .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)\n            .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);\n    INSTANCE = new TableRowJsonCoder();\n    TYPE_DESCRIPTOR = new TypeDescriptor<TableRow>() {};\n  }\n\n  private TableRowJsonCoder() {}\n\n  /**\n   * {@inheritDoc}\n   *\n   * @throws NonDeterministicException always. A {@link TableRow} can hold arbitrary {@link Object}\n   *     instances, which makes the encoding non-deterministic.\n   */\n  @Override\n  public void verifyDeterministic() throws NonDeterministicException {\n    throw new NonDeterministicException(\n        this, \"TableCell can hold arbitrary instances, which may be non-deterministic.\");\n  }\n\n  @Override\n  public TypeDescriptor<TableRow> getEncodedTypeDescriptor() {\n    return TYPE_DESCRIPTOR;\n  }\n}\n","sourceCodeStart":81,"sourceCodeEnd":108,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/TableRowJsonCoder.java#L81-L108","documentation":"TableRowJsonCoder.verifyDeterministic always throws NonDeterministicException: a TableRow can hold arbitrary Object instances (nested cells, Jackson JsonNode values) whose encodings are not guaranteed byte-identical across encodes of equal rows. Beam therefore forbids its use wherever deterministic encoding (grouping keys, state) is required.","triggerScenarios":"Registering TableRowJsonCoder as a key coder for GroupByKey/Combine/stateful transforms, or any pipeline-validation call to verifyDeterministic() on this coder.","commonSituations":"Users grouping by TableRow keys in BigQuery-related pipelines; streaming pipelines requiring deterministic serialization for dedup or Exactly-Once semantics.","solutions":["Use a deterministic key type (String, Long, custom Avro/protobuf coder) instead of TableRow as a grouping key.","Extract a deterministic subset of fields into a custom POJO with a deterministic coder.","Avoid relying on byte-level equality of TableRow encodings; compare via explicit fields."],"exampleFix":"// before\n.apply(GroupByKey.<TableRow, Iterable<Row>>create());\n// after\n.apply(MapElements.via(...)) // project to String key first\n.apply(GroupByKey.<String, Iterable<Row>>create());","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  TableRowJsonCoder.of().verifyDeterministic();\n} catch (NonDeterministicException e) {\n  // use a deterministic custom coder / String key instead\n}","preventionTips":["Project rows to deterministic key types before grouping.","Avoid depending on byte-equality of serialized TableRows for dedup."],"tags":["java","beam","bigquery","determinism","coder"],"backgroundTag":"unsupported-operation","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"}