{"record":{"id":"392d102ec4bb68e2","repo":"apache/iceberg","slug":"equality-field-ids-not-supported-for-this-writer-t","errorCode":null,"errorMessage":"Equality field ids not supported for this writer type","messagePattern":"Equality field ids not supported for this writer type","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/apache/iceberg/formats/FileWriterBuilderImpl.java","lineNumber":161,"sourceCode":"    return this;\n  }\n\n  @Override\n  public FileWriterBuilderImpl<W, D, S> keyMetadata(EncryptionKeyMetadata newKeyMetadata) {\n    this.keyMetadata = newKeyMetadata;\n    return this;\n  }\n\n  @Override\n  public FileWriterBuilderImpl<W, D, S> sortOrder(SortOrder newSortOrder) {\n    this.sortOrder = newSortOrder;\n    return this;\n  }\n\n  @Override\n  public FileWriterBuilderImpl<W, D, S> equalityFieldIds(int... fieldIds) {\n    if (content != FileContent.EQUALITY_DELETES) {\n      throw new UnsupportedOperationException(\n          \"Equality field ids not supported for this writer type\");\n    }\n\n    this.equalityFieldIds = fieldIds;\n    return this;\n  }\n\n  ModelWriteBuilder<D, S> modelWriteBuilder() {\n    return modelWriteBuilder;\n  }\n\n  String location() {\n    return location;\n  }\n\n  FileFormat format() {\n    return format;\n  }","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/core/src/main/java/org/apache/iceberg/formats/FileWriterBuilderImpl.java#L143-L179","documentation":"FileWriterBuilderImpl.equalityFieldIds(...) configures equality-delete field IDs, which only make sense for writers whose content type is EQUALITY_DELETES. Calling it on a builder configured for data files or position deletes throws UnsupportedOperationException — the builder cannot honor the setting for this writer type.","triggerScenarios":"Chaining .equalityFieldIds(...) on a FileWriterBuilder created for a data file or position-delete writer (FileContent.DATA or POSITION_DELETES).","commonSituations":"Generic writer-building code that always sets equality fields; copy-pasted builder chains reused across delete types; confusion between position deletes and equality deletes.","solutions":["Only call equalityFieldIds when building an equality-delete writer (FileContent.EQUALITY_DELETES).","Set the content type explicitly with content(FileContent.EQUALITY_DELETES) before configuring equality fields.","For position deletes, use position-delete-specific configuration (delete spec) instead.","Remove the equalityFieldIds call from data-file writer builders."],"exampleFix":"// before\nFileWriterBuilder.<W,D,S>create()\n    .content(FileContent.DATA) // wrong: data writer\n    .equalityFieldIds(1, 2)\n    .build();\n// after\nFileWriterBuilder.<W,D,S>create()\n    .content(FileContent.EQUALITY_DELETES)\n    .equalityFieldIds(1, 2)\n    .build();","handlingStrategy":"validation","validationCode":"if (builder instanceof FileWriterBuilderImpl && content != FileContent.EQUALITY_DELETES) {\n  throw new IllegalArgumentException(\"equalityFieldIds only valid for equality-delete writers\");\n}","typeGuard":"boolean supportsEqualityFields(FileContent c) { return c == FileContent.EQUALITY_DELETES; }","tryCatchPattern":"try {\n  builder.equalityFieldIds(1, 2);\n} catch (UnsupportedOperationException e) {\n  throw new IllegalStateException(\"configure content(EQUALITY_DELETES) before equalityFieldIds\", e);\n}","preventionTips":["Set content(FileContent.EQUALITY_DELETES) before calling equalityFieldIds.","Never share a generic builder chain across data/position-delete/equality-delete writers.","Branch builder configuration on FileContent."],"tags":["file-writer","deletes","builder","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}