in arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedArrowReader.java [137:209]
public VectorHolder read(VectorHolder reuse, int numValsToRead) {
boolean dictEncoded = vectorizedColumnIterator.producesDictionaryEncodedVector();
if (reuse == null
|| (!dictEncoded && readType == ReadType.DICTIONARY)
|| (dictEncoded && readType != ReadType.DICTIONARY)) {
allocateFieldVector(dictEncoded);
nullabilityHolder = new NullabilityHolder(batchSize);
} else {
vec.setValueCount(0);
nullabilityHolder.reset();
}
if (vectorizedColumnIterator.hasNext()) {
if (dictEncoded) {
vectorizedColumnIterator.dictionaryBatchReader().nextBatch(vec, -1, nullabilityHolder);
} else {
switch (readType) {
case VARBINARY:
case VARCHAR:
vectorizedColumnIterator
.varWidthTypeBatchReader()
.nextBatch(vec, -1, nullabilityHolder);
break;
case BOOLEAN:
vectorizedColumnIterator.booleanBatchReader().nextBatch(vec, -1, nullabilityHolder);
break;
case INT:
case INT_BACKED_DECIMAL:
vectorizedColumnIterator
.integerBatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
case LONG:
case LONG_BACKED_DECIMAL:
vectorizedColumnIterator.longBatchReader().nextBatch(vec, typeWidth, nullabilityHolder);
break;
case FLOAT:
vectorizedColumnIterator
.floatBatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
case DOUBLE:
vectorizedColumnIterator
.doubleBatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
case TIMESTAMP_MILLIS:
vectorizedColumnIterator
.timestampMillisBatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
case TIMESTAMP_INT96:
vectorizedColumnIterator
.timestampInt96BatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
case UUID:
case FIXED_WIDTH_BINARY:
case FIXED_LENGTH_DECIMAL:
vectorizedColumnIterator
.fixedSizeBinaryBatchReader()
.nextBatch(vec, typeWidth, nullabilityHolder);
break;
}
}
}
Preconditions.checkState(
vec.getValueCount() == numValsToRead,
"Number of values read, %s, does not equal expected, %s",
vec.getValueCount(),
numValsToRead);
return new VectorHolder(
columnDescriptor, vec, dictEncoded, dictionary, nullabilityHolder, icebergField);
}