private void fixTmpPathConcatenate(Path inputPath, int listBucketingDepth)
      throws HiveException, IOException {
    dpPath = inputPath;
    Path newPath = new Path(".");

    int depth = listBucketingDepth;
    // Build the path from bottom up. pick up list bucketing subdirectories
    while ((inputPath != null) && (depth > 0)) {
      newPath = new Path(inputPath.getName(), newPath);
      inputPath = inputPath.getParent();
      depth--;
    }

    Path newTmpPath = new Path(tmpPath, newPath);
    Path newTaskTmpPath = new Path(taskTmpPath, newPath);
    if (!fs.exists(newTmpPath)) {
      fs.mkdirs(newTmpPath);
    }
    updatePaths(newTmpPath, newTaskTmpPath);
  }
Fixes tmpPath to point to the correct list bucketing sub-directories.
Before this is called, tmpPath will default to the root tmp table dir
Reason to add a new method instead of changing fixTmpPath()
Reason 1: logic has slightly difference
fixTmpPath(..) needs 2 variables in order to decide path delta which is in variable newPath.
1. inputPath.depth()
2. tmpPath.depth()
fixTmpPathConcatenate needs 2 variables too but one of them is different from fixTmpPath(..)
1. inputPath.depth()
2. listBucketingDepth
Reason 2: less risks
The existing logic is a little not trivial around map() and fixTmpPath(). In order to ensure
minimum impact on existing flow, we try to avoid change on existing code/flow but add new code
for new feature.

@param inputPath
@throws HiveException
@throws IOException
ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateMapper.java