/** * Find the key range for original bucket files. * @param reader the reader * @param bucket the bucket number we are reading * @param options the options for reading with * @ */ private void discoverOriginalKeyBounds(Reader reader, int bucket, Reader.Options options ) { long rowLength = 0; long rowOffset = 0; long offset = options.getOffset(); long maxOffset = options.getMaxOffset(); bool isTail = true; foreach (StripeInformation stripe in reader.getStripes()) { if (offset > stripe.getOffset()) { rowOffset += stripe.getNumberOfRows(); } else if (maxOffset > stripe.getOffset()) { rowLength += stripe.getNumberOfRows(); } else { isTail = false; break; } } if (rowOffset > 0) { minKey = new RecordIdentifier(0, bucket, rowOffset - 1); } if (!isTail) { maxKey = new RecordIdentifier(0, bucket, rowOffset + rowLength - 1); } }
/** * Find the key range for bucket files. * @param reader the reader * @param options the options for reading with * @ */ private void discoverKeyBounds(Reader reader, Reader.Options options) { RecordIdentifier[] keyIndex = OrcRecordUpdater.parseKeyIndex(reader); long offset = options.getOffset(); long maxOffset = options.getMaxOffset(); int firstStripe = 0; int stripeCount = 0; bool isTail = true; List<StripeInformation> stripes = reader.getStripes(); foreach (StripeInformation stripe in stripes) { if (offset > stripe.getOffset()) { firstStripe += 1; } else if (maxOffset > stripe.getOffset()) { stripeCount += 1; } else { isTail = false; break; } } if (firstStripe != 0) { minKey = keyIndex[firstStripe - 1]; } if (!isTail) { maxKey = keyIndex[firstStripe + stripeCount - 1]; } }