xxlaykxx opened a new pull request, #36351:
URL: https://github.com/apache/arrow/pull/36351

   Added new method rootAsMap() to ComplexWriter and implement it in 
ComplexWriterImpl for supporting @map type.
   Previously in dremio side:
   
   When i trying to return map like @output ComplexWrite
   with this code:
   
   org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter mapWriter = 
out.rootAsList().map(false);
   
   mapWriter.startMap();
   for (java.util.Map.Entry<java.lang.Integer, java.lang.Integer> element : 
map.entrySet()) {
       mapWriter.startEntry();
       mapWriter.key().integer().writeInt((Integer) element.getKey());
       mapWriter.value().integer().writeInt((Integer) element.getValue());
       mapWriter.endEntry();
   }
   mapWriter.endMap();
   It use UnionMapWriter and generate schema like:
   EXPR$0: Map(false)<$data$: Union(Sparse, [1, 39])<struct: Struct<key: 
Int(32, true) not null, value: Int(32, true) not null> not null, map: 
Map(false)<entries: Struct<key: Int(32, true) not null, value: Int(32, true)> 
not null>>>
   But in OutputDerivation impl class where i should create output Complete type
   
   List<Field> children = Arrays.asList( CompleteType.INT.toField("key", 
false), CompleteType.INT.toField("value", false));
   return new CompleteType(CompleteType.MAP.getType(), 
CompleteType.struct(children).toField(MapVector.DATA_VECTOR_NAME, false));
   (This is only one valid case, because 
MapVector.initializeChildrenFromFields())
   return
   EXPR$0::map<key::int32, value::int32> I found a place where it start using 
union - PromotableWriter.promoteToUnion.
   And in the end i have
   
   SCHEMA_CHANGE ERROR: Schema changed during projection. Schema was 
   schema(EXPR$0::map<key::int32, value::int32>)
    but then changed to 
   schema(EXPR$0::map<struct::struct<key::int32, value::int32>, 
map::map<key::int32, value::int32>>)


-- 
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