You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Andrew Purtell (JIRA)" <ji...@apache.org> on 2008/11/01 00:29:44 UTC

[jira] Issue Comment Edited: (HBASE-883) Secondary Indexes

    [ https://issues.apache.org/jira/browse/HBASE-883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12644456#action_12644456 ] 

apurtell edited comment on HBASE-883 at 10/31/08 4:28 PM:
----------------------------------------------------------------

o.a.h.h.client.tableindexed.IndexScanner.ScannerWrapper needs next(int).

A suggestion:

{code}

    /** {@inheritDoc} */
    public RowResult next() throws IOException {
        RowResult[] result = next(1);
        if (result == null || result.length < 1)
          return null;
        return result[0];
    }

    /** {@inheritDoc} */
    public RowResult[] next(int nbRows) throws IOException {
      RowResult[] indexResult = indexScanner.next(nbRows);
      if (indexResult == null) {
        return null;
      }
      RowResult[] result = new RowResult[indexResult.length];
      for (int i = 0; i < indexResult.length; i++) {
        RowResult row = indexResult[i];
        byte[] baseRow = row.get(INDEX_BASE_ROW_COLUMN).getValue();
        LOG.debug("next index row [" + Bytes.toString(row.getRow())
            + "] -> base row [" + Bytes.toString(baseRow) + "]");
        HbaseMapWritable<byte[], Cell> colValues =
          new HbaseMapWritable<byte[], Cell>();
        if (columns != null && columns.length > 0) {
          LOG.debug("Going to base table for remaining columns");
          RowResult baseResult = IndexedTable.this.getRow(baseRow, columns);
          colValues.putAll(baseResult);
        }
        for (Entry<byte[], Cell> entry : row.entrySet()) {
          byte[] col = entry.getKey();
          if (HStoreKey.matchingFamily(INDEX_COL_FAMILY_NAME, col)) {
            continue;
          }
          colValues.put(col, entry.getValue());
        }
        result[i] = new RowResult(baseRow, colValues);
      }
      return result;
    }

{code}

      was (Author: apurtell):
    o.a.h.h.client.tableindexed.IndexScanner.ScannerWrapper needs next(int).

A suggestion:

{code}

    /** {@inheritDoc} */
    public RowResult next() throws IOException {
        RowResult[] result = next(1);
        if (result == null)
          return null;
        return result[0];
    }

    /** {@inheritDoc} */
    public RowResult[] next(int nbRows) throws IOException {
      RowResult[] indexResult = indexScanner.next(nbRows);
      if (indexResult == null) {
        return null;
      }
      RowResult[] result = new RowResult[indexResult.length];
      for (int i = 0; i < indexResult.length; i++) {
        RowResult row = indexResult[i];
        byte[] baseRow = row.get(INDEX_BASE_ROW_COLUMN).getValue();
        LOG.debug("next index row [" + Bytes.toString(row.getRow())
            + "] -> base row [" + Bytes.toString(baseRow) + "]");
        HbaseMapWritable<byte[], Cell> colValues =
          new HbaseMapWritable<byte[], Cell>();
        if (columns != null && columns.length > 0) {
          LOG.debug("Going to base table for remaining columns");
          RowResult baseResult = IndexedTable.this.getRow(baseRow, columns);
          colValues.putAll(baseResult);
        }
        for (Entry<byte[], Cell> entry : row.entrySet()) {
          byte[] col = entry.getKey();
          if (HStoreKey.matchingFamily(INDEX_COL_FAMILY_NAME, col)) {
            continue;
          }
          colValues.put(col, entry.getValue());
        }
        result[i] = new RowResult(baseRow, colValues);
      }
      return result;
    }

{code}
  
> Secondary Indexes
> -----------------
>
>                 Key: HBASE-883
>                 URL: https://issues.apache.org/jira/browse/HBASE-883
>             Project: Hadoop HBase
>          Issue Type: New Feature
>          Components: client, regionserver
>            Reporter: Clint Morgan
>            Assignee: Clint Morgan
>             Fix For: 0.19.0
>
>         Attachments: hbase-883.patch, hbase-883.patch, hbase-883.patch, hbase-883.patch, hbase-883.patch, hbase-883.patch
>
>
> I'm working on a secondary index impl. The basic idea is to maintain a separate table per index.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.