code: private void processRows(
        IncrementalIndex<?> index,
        BitmapFactory bitmapFactory,
        List<IncrementalIndex.DimensionDesc> dimensions
    )
    {
      int rowNum = 0;
      for (IncrementalIndexRow row : index.getFacts().persistIterable()) {
        final Object[] dims = row.getDims();
  
        for (IncrementalIndex.DimensionDesc dimension : dimensions) {
          final int dimIndex = dimension.getIndex();
          DimensionAccessor accessor = accessors.get(dimension.getName());
  
          // Add 'null' to the dimension's dictionary.
          if (dimIndex >= dims.length || dims[dimIndex] == null) {
            accessor.indexer.processRowValsToUnsortedEncodedKeyComponent(null, true);
            continue;
          }
          final ColumnCapabilities capabilities = dimension.getCapabilities();
  
          if (capabilities.hasBitmapIndexes()) {
            final MutableBitmap[] bitmapIndexes = accessor.invertedIndexes;
            final DimensionIndexer indexer = accessor.indexer;
            indexer.fillBitmapsFromUnsortedEncodedKeyComponent(dims[dimIndex], rowNum, bitmapIndexes, bitmapFactory);
          }
        }
        ++rowNum;
      }
    }
docs: Sometimes it's hard to tell whether one dimension contains a null value or not.
  If one dimension had show a null or empty value explicitly, then yes, it contains
  null value. But if one dimension's values are all non-null, it still early to say
  this dimension does not contain null value. Consider a two row case, first row had
  "dimA=1" and "dimB=2", the second row only had "dimA=3". To dimB, its value are "2" and
  never showed a null or empty value. But when we combines these two rows, dimB is null
  in row 2. So we should iterate all rows to determine whether one dimension contains
  a null value.