{"record":{"id":"c551537b078beed0","repo":"pentaho/pentaho-kettle","slug":"i-don-t-know-how-to-convert-binary-values-to-bigdecimals","errorCode":null,"errorMessage":" : I don't know how to convert binary values to BigDecimals.","messagePattern":" : I don't know how to convert binary values to BigDecimals\\.","errorType":"exception","errorClass":"KettleValueException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java","lineNumber":2215,"sourceCode":"              return convertDateToBigNumber( (Date) convertBinaryStringToNativeType( (byte[]) object ) );\n            case STORAGE_TYPE_INDEXED:\n              return convertDateToBigNumber( (Date) index[( (Integer) object ).intValue()] );\n            default:\n              throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n          }\n        case TYPE_BOOLEAN:\n          switch ( storageType ) {\n            case STORAGE_TYPE_NORMAL:\n              return convertBooleanToBigNumber( (Boolean) object );\n            case STORAGE_TYPE_BINARY_STRING:\n              return convertBooleanToBigNumber( (Boolean) convertBinaryStringToNativeType( (byte[]) object ) );\n            case STORAGE_TYPE_INDEXED:\n              return convertBooleanToBigNumber( (Boolean) index[( (Integer) object ).intValue()] );\n            default:\n              throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n          }\n        case TYPE_BINARY:\n          throw new KettleValueException( toString() + \" : I don't know how to convert binary values to BigDecimals.\" );\n        case TYPE_SERIALIZABLE:\n          throw new KettleValueException( toString() + \" : I don't know how to convert serializable values to BigDecimals.\" );\n        default:\n          throw new KettleValueException( toString() + \" : Unknown type \" + type + \" specified.\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleValueException( \"Unexpected conversion error while converting value [\" + toString()\n          + \"] to a BigNumber\", e );\n    }\n  }\n\n  @Override\n  public Boolean getBoolean( Object object ) throws KettleValueException {\n    if ( object == null ) {\n      return null;\n    }\n    switch ( type ) {\n      case TYPE_BOOLEAN:","sourceCodeStart":2197,"sourceCodeEnd":2233,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java#L2197-L2233","documentation":"ValueMetaBase.getBigNumber() converts a stored value to BigDecimal but has no conversion path for TYPE_BINARY (byte[]) values. The library refuses to guess a binary-to-numeric interpretation, so it throws KettleValueException with this message, prefixed by the field's toString(). It signals an incorrectly typed field in the row metadata rather than a data-value problem.","triggerScenarios":"Calling getBigNumber(object) (directly or via row.getNumber()/RowMeta.getBigNumber) on a ValueMeta whose type is TYPE_BINARY, regardless of storage type.","commonSituations":"A step or UDF sets a field as binary (e.g. raw bytes from a file or network payload) while downstream code treats it as numeric; metadata built with ValueMetaFactory or new ValueMetaBase(name, ValueMetaInterface.TYPE_BINARY) then read as a number; CSV/binary input steps that classify a column as Binary instead of Number.","solutions":["Fix the field's metadata type to TYPE_NUMBER/TYPE_BIGNUMBER (or Integer) so a numeric conversion exists","Decode the bytes yourself (e.g. new String(bytes) then new BigDecimal(s)) before requesting a BigNumber","Reject/repair the upstream step that produces binary data where a number is expected"],"exampleFix":"// before\nValueMetaInterface meta = new ValueMetaBase(\"amount\", ValueMetaInterface.TYPE_BINARY);\nBigDecimal v = meta.getBigNumber(data); // throws\n// after\nValueMetaInterface meta = new ValueMetaBase(\"amount\", ValueMetaInterface.TYPE_BIGNUMBER);\nmeta.setConversionMask(\"#,##0.00\");\nBigDecimal v = meta.getBigNumber(meta.convertDataCompatibility(...)); // proper numeric metadata","handlingStrategy":"validation","validationCode":"if (meta == null || meta.getType() == ValueMetaInterface.TYPE_BINARY) {\n  throw new IllegalArgumentException(\"Field '\" + (meta != null ? meta.getName() : \"?\") + \"' is BINARY; cannot read as BigNumber\");\n}\nBigDecimal v = meta.getBigNumber(value);","typeGuard":"boolean isNumericReadable(ValueMetaInterface m) {\n  int t = m.getType();\n  return t == ValueMetaInterface.TYPE_BIGNUMBER || t == ValueMetaInterface.TYPE_NUMBER\n      || t == ValueMetaInterface.TYPE_INTEGER || t == ValueMetaInterface.TYPE_STRING;\n}","tryCatchPattern":"try {\n  BigDecimal v = meta.getBigNumber(value);\n} catch (KettleValueException e) {\n  log.warn(\"Cannot convert field \" + meta.getName() + \" to BigDecimal: \" + e.getMessage());\n  // fallback: decode bytes or skip row\n}","preventionTips":["Set correct field types at the producing step, never assume downstream coercion","Check getValueMeta(i).getType() before numeric accessors","For byte[] payloads, decode to String/number explicitly first"],"tags":["kettle","pdi","type-conversion","value-metadata"],"backgroundTag":"incompatible-source-type","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}