use of org.apache.orc.impl.PositionProvider in project hive by apache.
the class OrcEncodedDataConsumer method createPositionProviders.
private PositionProvider[] createPositionProviders(TreeReaderFactory.TreeReader[] columnReaders, OrcBatchKey batchKey, ConsumerStripeMetadata stripeMetadata) throws IOException {
if (columnReaders.length == 0)
return null;
PositionProvider[] pps = null;
if (!stripeMetadata.supportsRowIndexes()) {
PositionProvider singleRgPp = new IndexlessPositionProvider();
pps = new PositionProvider[stripeMetadata.getEncodings().size()];
for (int i = 0; i < pps.length; ++i) {
pps[i] = singleRgPp;
}
} else {
int rowGroupIndex = batchKey.rgIx;
if (rowGroupIndex == OrcEncodedColumnBatch.ALL_RGS) {
throw new IOException("Cannot position readers without RG information");
}
// TODO: this assumes indexes in getRowIndexes would match column IDs
OrcProto.RowIndex[] ris = stripeMetadata.getRowIndexes();
pps = new PositionProvider[ris.length];
for (int i = 0; i < ris.length; ++i) {
OrcProto.RowIndex ri = ris[i];
if (ri == null)
continue;
pps[i] = new RecordReaderImpl.PositionProviderImpl(ri.getEntry(rowGroupIndex));
}
}
return pps;
}
use of org.apache.orc.impl.PositionProvider in project hive by apache.
the class OrcEncodedDataConsumer method repositionInStreams.
private void repositionInStreams(TreeReaderFactory.TreeReader[] columnReaders, EncodedColumnBatch<OrcBatchKey> batch, boolean sameStripe, ConsumerStripeMetadata stripeMetadata) throws IOException {
PositionProvider[] pps = createPositionProviders(columnReaders, batch.getBatchKey(), stripeMetadata);
if (pps == null)
return;
for (int i = 0; i < columnReaders.length; i++) {
TreeReader reader = columnReaders[i];
// Note: we assume this never happens for SerDe reader - the batch would never have vectors.
// That is always true now; but it wasn't some day, the below would throw in getColumnData.
((SettableTreeReader) reader).setBuffers(batch, sameStripe);
// SettableTreeReader so that we can avoid this check.
if (reader instanceof EncodedTreeReaderFactory.TimestampStreamReader && !sameStripe) {
((EncodedTreeReaderFactory.TimestampStreamReader) reader).updateTimezone(stripeMetadata.getWriterTimezone());
}
reader.seek(pps);
}
}
Aggregations