diff --git llap-server/src/java/org/apache/hadoop/hive/llap/io/decode/OrcEncodedDataConsumer.java llap-server/src/java/org/apache/hadoop/hive/llap/io/decode/OrcEncodedDataConsumer.java index 257727a..a00b3a2 100644 --- llap-server/src/java/org/apache/hadoop/hive/llap/io/decode/OrcEncodedDataConsumer.java +++ llap-server/src/java/org/apache/hadoop/hive/llap/io/decode/OrcEncodedDataConsumer.java @@ -84,6 +84,7 @@ protected void decodeBatch(EncodedColumnBatch batch, if (columnReaders == null || !sameStripe) { this.columnReaders = EncodedTreeReaderFactory.createEncodedTreeReader(numCols, fileMetadata.getTypes(), stripeMetadata.getEncodings(), batch, codec, skipCorrupt); + positionInStreams(columnReaders, batch, numCols, stripeMetadata); } else { repositionInStreams(this.columnReaders, batch, sameStripe, numCols, stripeMetadata); } @@ -115,6 +116,18 @@ protected void decodeBatch(EncodedColumnBatch batch, } } + private void positionInStreams(EncodedTreeReaderFactory.TreeReader[] columnReaders, + EncodedColumnBatch batch, int numCols, + OrcStripeMetadata stripeMetadata) throws IOException { + for (int i = 0; i < numCols; i++) { + int columnIndex = batch.columnIxs[i]; + int rowGroupIndex = batch.batchKey.rgIx; + OrcProto.RowIndex rowIndex = stripeMetadata.getRowIndexes()[columnIndex]; + OrcProto.RowIndexEntry rowIndexEntry = rowIndex.getEntry(rowGroupIndex); + columnReaders[i].seek(new RecordReaderImpl.PositionProviderImpl(rowIndexEntry)); + } + } + private void repositionInStreams(EncodedTreeReaderFactory.TreeReader[] columnReaders, EncodedColumnBatch batch, boolean sameStripe, int numCols, OrcStripeMetadata stripeMetadata) throws IOException {