ParthChonkar commented on issue #468: URL: https://github.com/apache/arrow-java/issues/468#issuecomment-2564645204
The patterns I've seen/used revolved around down-casting/type matching on the FieldVector subclasses: 1. Downcast the returned FieldVector to the concrete class (IntVector, VarCharVector, etc) and then use the corresponding typed `get*` method from them 2. Use visitor pattern/method signature overloading VectorSchemaRoot stores a schema and a corresponding bag of [FieldVectors](https://arrow.apache.org/docs/java/reference/org.apache.arrow.vector/org/apache/arrow/vector/FieldVector.html). The actual subclass is tied to the arrow type for that field. (This is gets a more tricky if you are using [nested types](https://arrow.apache.org/docs/java/vector.html#building-listvector)) For (1) you do need to know the mapping between your schema's arrow field types <-> ValueVectors subclasses and have logic to cast accordingly based on the field type. This is reflected a bit in [this example](https://arrow.apache.org/docs/java/quickstartguide.html#create-a-vectorschemaroot) the vectors have to be downcasted in order to write the values properly, this also applies to reading their values in a typed manner. Agree that it's a bit tricky at first to map the simple types to their ValueVector subclasses (basically need to look [here](https://github.com/apache/arrow-java/blob/main/vector/src/main/java/org/apache/arrow/vector/types/Types.java)) - would be nice documentation add. It looks like there's already a stub for a table with this mapping [here](https://arrow.apache.org/docs/java/vector.html#building-listvector). ("Table with non-intuitive names"). As an aside it seems safer to cast the vector to its typed vector first rather than casting the type directly from the `FieldVector#getObject` (in case you want to fail loudly before accidentally coercing doubles/ints via a downcast). For (2) this is letting java multiple dispatch route the FieldVector from your VectorSchemaRoot to a function that accepts its concrete subclass. Curious what other folks approaches are/if there are conventions or patterns I might be missing here. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
