private void updateStats(StatsAggregator statsAggregator, Map<String, String> parameters, String prefix, int maxPrefixLength, boolean atomic) throws HiveException { String aggKey = Utilities.getHashedStatsPrefix(prefix, maxPrefixLength); for (String statType : StatsSetupConst.statsRequireCompute) { String value = statsAggregator.aggregateStats(aggKey, statType); if (value != null && !value.isEmpty()) { long longValue = Long.parseLong(value); if (work.getLoadTableDesc() != null && !work.getLoadTableDesc().getReplace()) { String originalValue = parameters.get(statType); if (originalValue != null && !originalValue.equals("-1")) { longValue += Long.parseLong(originalValue); // todo: invalid + valid = invalid } } parameters.put(statType, String.valueOf(longValue)); } else { if (atomic) { throw new HiveException(ErrorMsg.STATSAGGREGATOR_MISSED_SOMESTATS, statType); } } } statsAggregator.cleanUp(aggKey); }
/** * This method is static as it is called from the shutdown hook at the ExecDriver. */ public static void cleanUp(String jobID, Configuration config) { StatsAggregator statsAggregator; String statsImplementationClass = HiveConf.getVar(config, HiveConf.ConfVars.HIVESTATSDBCLASS); StatsFactory.setImplementation(statsImplementationClass, config); statsAggregator = StatsFactory.getStatsAggregator(); if (statsAggregator.connect(config)) { statsAggregator.cleanUp(jobID + Path.SEPARATOR); // Adding the path separator to avoid an Id being a prefix of another ID } } }