Github user kevinjmh commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2654#discussion_r215827023
--- Diff:
datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
---
@@ -331,8 +332,18 @@ private BloomQueryModel
buildQueryModelInternal(CarbonColumn carbonColumn,
// for dictionary/date columns, convert the surrogate key to bytes
internalFilterValue = CarbonUtil.getValueAsBytes(DataTypes.INT,
convertedValue);
} else {
- // for non dictionary dimensions, is already bytes,
- internalFilterValue = (byte[]) convertedValue;
+ // for non dictionary dimensions, numeric columns will be of
original data,
+ // so convert the data to bytes
+ if (DataTypeUtil.isPrimitiveColumn(carbonColumn.getDataType())) {
+ if (convertedValue == null) {
+ convertedValue =
DataConvertUtil.getNullValueForMeasure(carbonColumn.getDataType(),
+ carbonColumn.getColumnSchema().getScale());
+ }
+ internalFilterValue =
+ CarbonUtil.getValueAsBytes(carbonColumn.getDataType(),
convertedValue);
--- End diff --
Result of `getValueAsBytes` conflicts with existing bloom index data which
will affect query result.
For measure in 'NoDict', original implementation used
`NonDictionaryFieldConverterImpl` to convert value, but now it uses
`MeasureFieldConverterImpl` to convert value
---