示例#1
0
 public List<Double> averageColumnSizes(Union rel, RelMetadataQuery mq) {
   final int fieldCount = rel.getRowType().getFieldCount();
   List<List<Double>> inputColumnSizeList = Lists.newArrayList();
   for (RelNode input : rel.getInputs()) {
     final List<Double> inputSizes = mq.getAverageColumnSizes(input);
     if (inputSizes != null) {
       inputColumnSizeList.add(inputSizes);
     }
   }
   switch (inputColumnSizeList.size()) {
     case 0:
       return null; // all were null
     case 1:
       return inputColumnSizeList.get(0); // all but one were null
   }
   final ImmutableNullableList.Builder<Double> sizes = ImmutableNullableList.builder();
   int nn = 0;
   for (int i = 0; i < fieldCount; i++) {
     double d = 0d;
     int n = 0;
     for (List<Double> inputColumnSizes : inputColumnSizeList) {
       Double d2 = inputColumnSizes.get(i);
       if (d2 != null) {
         d += d2;
         ++n;
         ++nn;
       }
     }
     sizes.add(n > 0 ? d / n : null);
   }
   if (nn == 0) {
     return null; // all columns are null
   }
   return sizes.build();
 }
示例#2
0
 public List<Double> averageColumnSizes(Project rel, RelMetadataQuery mq) {
   final List<Double> inputColumnSizes = mq.getAverageColumnSizesNotNull(rel.getInput());
   final ImmutableNullableList.Builder<Double> sizes = ImmutableNullableList.builder();
   for (RexNode project : rel.getProjects()) {
     sizes.add(averageRexSize(project, inputColumnSizes));
   }
   return sizes.build();
 }
示例#3
0
 private List<Double> averageJoinColumnSizes(Join rel, RelMetadataQuery mq, boolean semijoin) {
   final RelNode left = rel.getLeft();
   final RelNode right = rel.getRight();
   final List<Double> lefts = mq.getAverageColumnSizes(left);
   final List<Double> rights = semijoin ? null : mq.getAverageColumnSizes(right);
   if (lefts == null && rights == null) {
     return null;
   }
   final int fieldCount = rel.getRowType().getFieldCount();
   Double[] sizes = new Double[fieldCount];
   if (lefts != null) {
     lefts.toArray(sizes);
   }
   if (rights != null) {
     final int leftCount = left.getRowType().getFieldCount();
     for (int i = 0; i < rights.size(); i++) {
       sizes[leftCount + i] = rights.get(i);
     }
   }
   return ImmutableNullableList.copyOf(sizes);
 }