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]

Reply via email to