@Override
          public void run() {
            try {
              Class<? extends InputFormat> inputFormatCls = partDesc
                      .getInputFileFormatClass();
              InputFormat inputFormatObj = HiveInputFormat.getInputFormatFromCache(
                      inputFormatCls, myJobConf);
              if (inputFormatObj instanceof ContentSummaryInputFormat) {
                ContentSummaryInputFormat csif = (ContentSummaryInputFormat) inputFormatObj;
                final ContentSummary cs = csif.getContentSummary(path, myJobConf);
                recordSummary(path, cs);
                return;
              }
              String metaTableStorage = null;
              if (partDesc.getTableDesc() != null &&
                      partDesc.getTableDesc().getProperties() != null) {
                metaTableStorage = partDesc.getTableDesc().getProperties()
                        .getProperty(hive_metastoreConstants.META_TABLE_STORAGE, null);
              }
              if (partDesc.getProperties() != null) {
                metaTableStorage = partDesc.getProperties()
                        .getProperty(hive_metastoreConstants.META_TABLE_STORAGE, metaTableStorage);
              }

              HiveStorageHandler handler = HiveUtils.getStorageHandler(myConf, metaTableStorage);
              if (handler instanceof InputEstimator) {
                long total = 0;
                TableDesc tableDesc = partDesc.getTableDesc();
                InputEstimator estimator = (InputEstimator) handler;
                for (String alias : HiveFileFormatUtils.doGetAliasesFromPath(pathToAlias, path)) {
                  JobConf jobConf = new JobConf(myJobConf);
                  TableScanOperator scanOp = (TableScanOperator) aliasToWork.get(alias);
                  Utilities.setColumnNameList(jobConf, scanOp, true);
                  Utilities.setColumnTypeList(jobConf, scanOp, true);
                  PlanUtils.configureInputJobPropertiesForStorageHandler(tableDesc);
                  Utilities.copyTableJobPropertiesToConf(tableDesc, jobConf);
                  total += estimator.estimate(jobConf, scanOp, -1).getTotalLength();
                }
                recordSummary(path, new ContentSummary(total, -1, -1));
              } else if (handler == null) {
                // Nullify summary for non-native tables,
                // in order not to be selected as a mapjoin target
                FileSystem fs = path.getFileSystem(myConf);
                recordSummary(path, fs.getContentSummary(path));
              }
            } catch (Exception e) {
              // We safely ignore this exception for summary data.
              // We don't update the cache to protect it from polluting other
              // usages. The worst case is that IOException will always be
              // retried for another getInputSummary(), which is fine as
              // IOException is not considered as a common case.
              LOG.info("Cannot get size of {}. Safely ignored.", path);
              LOG.debug("Cannot get size of {}. Safely ignored.", path, e);
            }
          }
Performs a ContentSummary lookup over a set of paths using 1 or more
threads. The 'summary' argument is directly modified.

@param ctx
@param pathNeedProcess
@param work
@param summary
@param executor
@throws IOException
ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java