private static List<BucketCol> getNewBucketCols(List<BucketCol> bucketCols,
List<ColumnInfo> colInfos) {
List<BucketCol> newBucketCols = new ArrayList<BucketCol>(bucketCols.size());
for (int i = 0; i < bucketCols.size(); i++) {
BucketCol bucketCol = new BucketCol();
for (Integer index : bucketCols.get(i).getIndexes()) {
// The only time this condition should be false is in the case of dynamic partitioning
// where the data is bucketed on a dynamic partitioning column and the FileSinkOperator is
// being processed. In this case, the dynamic partition column will not appear in
// colInfos, and due to the limitations of dynamic partitioning, they will appear at the
// end of the input schema. Since the order of the columns hasn't changed, and no new
// columns have been added/removed, it is safe to assume that these will have indexes
// greater than or equal to colInfos.size().
if (index < colInfos.size()) {
bucketCol.addAlias(colInfos.get(index).getInternalName(), index);
} else {
return null;
}
}
newBucketCols.add(bucketCol);