@Override
    protected boolean isValueAcceptable(String key, String bdbValue, String hadoopValue) {
        if (bdbValue.equals(hadoopValue)) {
            return true;
        }
        String[] bdbValueSplitContents = bdbValue.split(AnalyseConstants.FINAL_VALUE_SPLITTER);
        String[] hadoopValueSplitContents = hadoopValue.split(AnalyseConstants.FINAL_VALUE_SPLITTER);
        if (bdbValueSplitContents.length != hadoopValueSplitContents.length
                && !key.contains("basicDay")) {
            // if contains basicDay, bdbValue will have 4 elements, but hadoop value will have 23 elements
            // also we should compare the first 4 elements.
            return false;
        }
        for (int i = 0; i < bdbValueSplitContents.length; i++) {
            if (!bdbValueSplitContents[i].equals(hadoopValueSplitContents[i])) {
                BigDecimal bdbDigitalValue = BigDecimal.valueOf(Integer.parseInt(bdbValueSplitContents[i]));
                BigDecimal hadoopDigitalValue = BigDecimal.valueOf(Integer.parseInt(hadoopValueSplitContents[i]));
                BigDecimal substractDigitalValue = bdbDigitalValue.subtract(hadoopDigitalValue).abs();
                BigDecimal biggerDigitalValue = bdbDigitalValue.compareTo(hadoopDigitalValue) > 0 ? bdbDigitalValue : hadoopDigitalValue;

                BigDecimal RATE = biggerDigitalValue.compareTo(BigDecimal.valueOf(1000000)) >=0 ? MILLION_RATE :
                        biggerDigitalValue.compareTo(BigDecimal.valueOf(100000)) > 0 ? HUNDRED_THOUSAND_RATE:
                                OTHER_RATE;
                if (substractDigitalValue.divide(biggerDigitalValue, 4, RoundingMode.CEILING).compareTo(RATE) > 0) {
                    return false;
                }
            }
        }
        return true;
    }