@Override
  public List<Range> getIndexRowRanges(String column, Range indexRange) {
    List<Range> rowIds = new ArrayList<Range>();
    Scanner scan = null;
    String col = this.colMap.get(column);

    if (col != null) {

      try {
        LOG.debug("Searching tab=" + indexTable + " column=" + column + " range=" + indexRange);
        Connector conn = getConnector();
        scan = conn.createScanner(indexTable, auths);
        scan.setRange(indexRange);
        Text cf = new Text(col);
        LOG.debug("Using Column Family=" + toString());
        scan.fetchColumnFamily(cf);

        for (Map.Entry<Key, Value> entry : scan) {

          rowIds.add(new Range(entry.getKey().getColumnQualifier()));

          // if we have too many results return null for a full scan
          if (rowIds.size() > maxRowIds) {
            return null;
          }
        }

        // no hits on the index so return a no match range
        if (rowIds.isEmpty()) {
          LOG.debug("Found 0 index matches");
        } else {
          LOG.debug("Found " + rowIds.size() + " index matches");
        }

        return rowIds;
      } catch (AccumuloException | AccumuloSecurityException | TableNotFoundException e) {
        LOG.error("Failed to scan index table: " + indexTable, e);
      } finally {
        if (scan != null) {
          scan.close();
        }
      }
    }

    // assume the index is bad and do a full scan
    LOG.debug("Index lookup failed for table " + indexTable);
    return null;
  }
Get a list of rowid ranges by scanning a column index.

@param column     - the hive column name
@param indexRange - Key range to scan on the index table
@return List of matching rowid ranges or null if too many matches found
if index values are not found a newline range is added to list to
short-circuit the query
accumulo-handler/src/java/org/apache/hadoop/hive/accumulo/AccumuloDefaultIndexScanner.java