private static void setBucketingColsIfComplete(BucketingSortingCtx bctx,
      Operator<? extends OperatorDesc> op, BucketCol[] newBucketCols) {

    if (newBucketCols != null) {
      List<BucketCol> newBucketColList = Arrays.asList(newBucketCols);
      // If newBucketColList had a null value it means that at least one of the input bucket
      // columns did not have a representative found in the output columns, so assume the data
      // is no longer bucketed
      if (!newBucketColList.contains(null)) {
        bctx.setBucketedCols(op, newBucketColList);
      }
    }
  }
If the list of output bucket columns has been populated and every column has at least
one representative in the output they can be inferred

@param bctx - BucketingSortingCtx containing inferred columns
@param op - The operator we are inferring information about the output of
@param newBucketCols - An array of columns on which the output is bucketed, e.g. as output by
                       the method findBucketingSortingColumns
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/BucketingSortingOpProcFactory.java