You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2014/07/21 21:10:40 UTC

[jira] [Commented] (PHOENIX-1103) Remove hash join special case for ChunkedResultIterator

    [ https://issues.apache.org/jira/browse/PHOENIX-1103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14069067#comment-14069067 ] 

James Taylor commented on PHOENIX-1103:
---------------------------------------

Thanks for the patch, [~gabriel.reid]. I may have missed it, but don't you need to not add a zero byte to the last key, because you want to process that row again, so like this instead:
{code}
    private PeekingResultIterator getResultIterator() throws SQLException {
        if (resultIterator == null) {
            singleChunkResultIterator = new SingleChunkResultIterator(
                    new TableResultIterator(context, tableRef, scan), chunkSize);
            resultIterator = delegateIteratorFactory.newIterator(context, singleChunkResultIterator);
        } else if (resultIterator.peek() == null && !singleChunkResultIterator.isEndOfStreamReached()) {
            singleChunkResultIterator.close();
            try {
                this.scan = new Scan(scan);
            } catch (IOException e) {
                throw new PhoenixIOException(e);
            }
            scan.setStartRow(singleChunkResultIterator.getLastKey());
            singleChunkResultIterator = new SingleChunkResultIterator(
                    new TableResultIterator(context, tableRef, scan), chunkSize);
            resultIterator = delegateIteratorFactory.newIterator(context, singleChunkResultIterator);
        }
        return resultIterator;
    }
{code}

Also minor, but consider making the two ImmutableBytesWritable pointers member variables so you don't reallocated again and again:
{code}
+        private boolean rowKeyChanged(Tuple lastTuple, Tuple newTuple) {
+            ImmutableBytesWritable oldKeyPtr = new ImmutableBytesWritable();
+            ImmutableBytesWritable newKeyPtr = new ImmutableBytesWritable();
+            lastTuple.getKey(oldKeyPtr);
+            newTuple.getKey(newKeyPtr);
+
+            return oldKeyPtr.compareTo(newKeyPtr) != 0;
+        }
{code}


> Remove hash join special case for ChunkedResultIterator
> -------------------------------------------------------
>
>                 Key: PHOENIX-1103
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1103
>             Project: Phoenix
>          Issue Type: Improvement
>            Reporter: Gabriel Reid
>            Assignee: Gabriel Reid
>             Fix For: 5.0.0, 3.1, 4.1
>
>         Attachments: PHOENIX-1103.patch
>
>
> This is a follow-up issue to PHOENIX-539. There is currently an special case which disables the ChunkedResultIterator in the case of a hash join. This disabling of the ChunkedResultIterator is needed due to the fact that a hash join scan can return multiple rows with the same row key.
> As discussed in the comments of PHOENIX-539, the ChunkedResultIterator should be updated to only end a chunk at between different row keys.



--
This message was sent by Atlassian JIRA
(v6.2#6252)