Search in sources :

Example 1 with Range

use of org.apache.hadoop.hive.ql.plan.ColStatistics.Range in project hive by apache.

the class StatsUtils method getRangePartitionColumn.

private static Range getRangePartitionColumn(PartitionIterable partitions, String partColName, String colType, String defaultPartName) {
    Range range = null;
    String partVal;
    String colTypeLowerCase = colType.toLowerCase();
    if (colTypeLowerCase.equals(serdeConstants.TINYINT_TYPE_NAME) || colTypeLowerCase.equals(serdeConstants.SMALLINT_TYPE_NAME) || colTypeLowerCase.equals(serdeConstants.INT_TYPE_NAME) || colTypeLowerCase.equals(serdeConstants.BIGINT_TYPE_NAME)) {
        long min = Long.MAX_VALUE;
        long max = Long.MIN_VALUE;
        for (Partition partition : partitions) {
            partVal = partition.getSpec().get(partColName);
            if (partVal.equals(defaultPartName)) {
                // partition column value is null.
                continue;
            } else {
                long value = Long.parseLong(partVal);
                min = Math.min(min, value);
                max = Math.max(max, value);
            }
        }
        range = new Range(min, max);
    } else if (colTypeLowerCase.equals(serdeConstants.FLOAT_TYPE_NAME) || colTypeLowerCase.equals(serdeConstants.DOUBLE_TYPE_NAME)) {
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        for (Partition partition : partitions) {
            partVal = partition.getSpec().get(partColName);
            if (partVal.equals(defaultPartName)) {
                // partition column value is null.
                continue;
            } else {
                double value = Double.parseDouble(partVal);
                min = Math.min(min, value);
                max = Math.max(max, value);
            }
        }
        range = new Range(min, max);
    } else if (colTypeLowerCase.startsWith(serdeConstants.DECIMAL_TYPE_NAME)) {
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        for (Partition partition : partitions) {
            partVal = partition.getSpec().get(partColName);
            if (partVal.equals(defaultPartName)) {
                // partition column value is null.
                continue;
            } else {
                double value = new BigDecimal(partVal).doubleValue();
                min = Math.min(min, value);
                max = Math.max(max, value);
            }
        }
        range = new Range(min, max);
    } else {
        // Columns statistics for complex datatypes are not supported yet
        return null;
    }
    return range;
}
Also used : Partition(org.apache.hadoop.hive.ql.metadata.Partition) Range(org.apache.hadoop.hive.ql.plan.ColStatistics.Range) BigDecimal(java.math.BigDecimal)

Aggregations

BigDecimal (java.math.BigDecimal)1 Partition (org.apache.hadoop.hive.ql.metadata.Partition)1 Range (org.apache.hadoop.hive.ql.plan.ColStatistics.Range)1