{"record":{"id":"c4f02254da4b4908","repo":"apache/iceberg","slug":"unsupported-base-type-for-decimal-c4f022","errorCode":null,"errorMessage":"Unsupported base type for decimal: ","messagePattern":"Unsupported base type for decimal: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/data/SparkParquetReaders.java","lineNumber":240,"sourceCode":"          case DATE:\n          case INT_64:\n            return new UnboxedReader<>(desc);\n          case TIMESTAMP_MICROS:\n          case TIMESTAMP_MILLIS:\n            return ParquetValueReaders.timestamps(desc);\n          case DECIMAL:\n            DecimalLogicalTypeAnnotation decimal =\n                (DecimalLogicalTypeAnnotation) primitive.getLogicalTypeAnnotation();\n            switch (primitive.getPrimitiveTypeName()) {\n              case BINARY:\n              case FIXED_LEN_BYTE_ARRAY:\n                return new BinaryDecimalReader(desc, decimal.getScale());\n              case INT64:\n                return new LongDecimalReader(desc, decimal.getPrecision(), decimal.getScale());\n              case INT32:\n                return new IntegerDecimalReader(desc, decimal.getPrecision(), decimal.getScale());\n              default:\n                throw new UnsupportedOperationException(\n                    \"Unsupported base type for decimal: \" + primitive.getPrimitiveTypeName());\n            }\n          case BSON:\n            return new ParquetValueReaders.ByteArrayReader(desc);\n          default:\n            throw new UnsupportedOperationException(\n                \"Unsupported logical type: \" + primitive.getOriginalType());\n        }\n      }\n\n      switch (primitive.getPrimitiveTypeName()) {\n        case FIXED_LEN_BYTE_ARRAY:\n        case BINARY:\n          if (expected != null && expected.typeId() == TypeID.UUID) {\n            return new UUIDReader(desc);\n          }\n          return new ParquetValueReaders.ByteArrayReader(desc);\n        case INT32:","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/data/SparkParquetReaders.java#L222-L258","documentation":"SparkParquetReaders.primitive builds decimal readers from the Parquet physical base type: only BINARY (fixed_len_byte_array path), INT64, and INT32 are supported for DECIMAL logical types. Any other base type annotated as decimal hits the default branch. This UnsupportedOperationException reports a Parquet decimal stored on an unsupported physical type.","triggerScenarios":"Reading a Parquet file whose DECIMAL logical type is annotated on a physical type other than BINARY/FIXED_LEN_BYTE_ARRAY, INT64, or INT32 (e.g. FLOAT/DOUBLE or FIXED_LEN_BYTE_ARRAY handled elsewhere producing this in the annotated path).","commonSituations":"Files written by non-standard Parquet writers that store decimals on float/double or unusual base types; corrupted or hand-crafted Parquet schemas.","solutions":["Rewrite the Parquet data with a standard writer storing decimals on BINARY, INT32, or INT64 base types.","Verify the file's writer and re-export the data with proper decimal encoding.","Read the file with a tolerant reader/tool to confirm its actual schema, then fix upstream.","Upgrade Iceberg if the file uses a legal Parquet decimal encoding the reader should support."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"org.apache.parquet.schema.PrimitiveType pt = desc.asPrimitiveType();\nif (pt.getPrimitiveTypeName().getJavaType() != org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.BINARY\n    && pt.getPrimitiveTypeName() != org.apache.parquet.schema.PrimitiveTypeName.INT64\n    && pt.getPrimitiveTypeName() != org.apache.parquet.schema.PrimitiveTypeName.INT32) {\n  throw new IllegalStateException(\"Decimal must use BINARY/INT32/INT64 base type, got \" + pt.getPrimitiveTypeName());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Export decimals with standard Parquet writers","Inspect Parquet schemas of external files before reading","Re-encode decimals on float/double as proper decimal physical types"],"tags":["spark","parquet","decimal","unsupported-type","reader"],"backgroundTag":"incompatible-source-type","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}